]> git.mxchange.org Git - friendica.git/commitdiff
Merge remote branch 'upstream/master'
authorOlivier Migeot <olivier@migeot.org>
Tue, 4 Oct 2011 09:45:57 +0000 (11:45 +0200)
committerOlivier Migeot <olivier@migeot.org>
Tue, 4 Oct 2011 09:45:57 +0000 (11:45 +0200)
474 files changed:
.gitignore
LICENSE
README [deleted file]
addon/LICENSE [deleted file]
addon/README [deleted file]
addon/calc/calc.php [deleted file]
addon/convert/UnitConvertor.php [deleted file]
addon/convert/convert.php [deleted file]
addon/facebook/README [deleted file]
addon/facebook/facebook.css [deleted file]
addon/facebook/facebook.php [deleted file]
addon/fortunate/fortunate.css [deleted file]
addon/fortunate/fortunate.php [deleted file]
addon/impressum/README [deleted file]
addon/impressum/admin.tpl [deleted file]
addon/impressum/impressum.php [deleted file]
addon/js_upload/file-uploader/client/demo.htm [deleted file]
addon/js_upload/file-uploader/client/do-nothing.htm [deleted file]
addon/js_upload/file-uploader/client/fileuploader.css [deleted file]
addon/js_upload/file-uploader/client/fileuploader.js [deleted file]
addon/js_upload/file-uploader/client/loading.gif [deleted file]
addon/js_upload/file-uploader/gpl-2.0.txt [deleted file]
addon/js_upload/file-uploader/license.txt [deleted file]
addon/js_upload/file-uploader/readme.md [deleted file]
addon/js_upload/file-uploader/server/OctetStreamReader.java [deleted file]
addon/js_upload/file-uploader/server/coldfusion/coldfusion.cfc [deleted file]
addon/js_upload/file-uploader/server/coldfusion/demo.cfm [deleted file]
addon/js_upload/file-uploader/server/coldfusion/readme.txt [deleted file]
addon/js_upload/file-uploader/server/perl.cgi [deleted file]
addon/js_upload/file-uploader/server/php.php [deleted file]
addon/js_upload/file-uploader/server/readme.txt [deleted file]
addon/js_upload/file-uploader/server/uploads/.gitignore [deleted file]
addon/js_upload/file-uploader/tests/action-acceptance.php [deleted file]
addon/js_upload/file-uploader/tests/action-handler-queue-test.php [deleted file]
addon/js_upload/file-uploader/tests/action-handler-test.php [deleted file]
addon/js_upload/file-uploader/tests/action-slow-response.php [deleted file]
addon/js_upload/file-uploader/tests/browser-bugs/safari-bug1.htm [deleted file]
addon/js_upload/file-uploader/tests/browser-bugs/safari-bug2.htm [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/application-javascript.php [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/application-json.php [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/header-404.php [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/somepage.php [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/text-html-large.php [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/text-html.php [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/text-javascript.php [deleted file]
addon/js_upload/file-uploader/tests/iframe-content-tests/text-plain.php [deleted file]
addon/js_upload/file-uploader/tests/jquery-1.4.2.min.js [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/jquery-ui-1.8.4.custom.min.js [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_222222_256x240.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_228ef1_256x240.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ef8c08_256x240.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffd27a_256x240.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffffff_256x240.png [deleted file]
addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/jquery-ui-1.8.4.custom.css [deleted file]
addon/js_upload/file-uploader/tests/qunit/package.json [deleted file]
addon/js_upload/file-uploader/tests/qunit/qunit/qunit.css [deleted file]
addon/js_upload/file-uploader/tests/qunit/qunit/qunit.js [deleted file]
addon/js_upload/file-uploader/tests/qunit/test/index.html [deleted file]
addon/js_upload/file-uploader/tests/qunit/test/same.js [deleted file]
addon/js_upload/file-uploader/tests/qunit/test/test.js [deleted file]
addon/js_upload/file-uploader/tests/sample-files/1imagelonglonglonglonglonglongname.gif [deleted file]
addon/js_upload/file-uploader/tests/sample-files/2larger.txt [deleted file]
addon/js_upload/file-uploader/tests/sample-files/3empty.txt [deleted file]
addon/js_upload/file-uploader/tests/sample-files/4text.txt [deleted file]
addon/js_upload/file-uploader/tests/sample-files/5text.txt [deleted file]
addon/js_upload/file-uploader/tests/sample-files/6text.txt [deleted file]
addon/js_upload/file-uploader/tests/sample-files/7small.txt [deleted file]
addon/js_upload/file-uploader/tests/sample-files/8text.txt [deleted file]
addon/js_upload/file-uploader/tests/separate-file-list.htm [deleted file]
addon/js_upload/file-uploader/tests/test-acceptance.htm [deleted file]
addon/js_upload/file-uploader/tests/test-drop-zone.htm [deleted file]
addon/js_upload/file-uploader/tests/test-handler-queue.htm [deleted file]
addon/js_upload/file-uploader/tests/test-upload-handlers.htm [deleted file]
addon/js_upload/js_upload.php [deleted file]
addon/ldapauth/README [deleted file]
addon/ldapauth/ldapauth.php [deleted file]
addon/oembed/oembed.js [deleted file]
addon/oembed/oembed.php [deleted file]
addon/oembed/oembed.png [deleted file]
addon/oembed/settings.tpl [deleted file]
addon/piwik/README [deleted file]
addon/piwik/admin.tpl [deleted file]
addon/piwik/piwik.css [deleted file]
addon/piwik/piwik.php [deleted file]
addon/poormancron/poormancron.php [deleted file]
addon/randplace/randplace.css [deleted file]
addon/randplace/randplace.php [deleted file]
addon/sniper/100x100.gif [deleted file]
addon/sniper/100x100.jpg [deleted file]
addon/sniper/100x75.jpg [deleted file]
addon/sniper/100x80.jpg [deleted file]
addon/sniper/120x90hotshotsniper.jpg [deleted file]
addon/sniper/125x125.jpg [deleted file]
addon/sniper/140x90.jpg [deleted file]
addon/sniper/150x150.jpg [deleted file]
addon/sniper/160x86.gif [deleted file]
addon/sniper/180x135.jpg [deleted file]
addon/sniper/250x180.jpg [deleted file]
addon/sniper/300x200.jpg [deleted file]
addon/sniper/300x300.jpg [deleted file]
addon/sniper/32x32.jpg [deleted file]
addon/sniper/335x185.jpg [deleted file]
addon/sniper/60x60.jpg [deleted file]
addon/sniper/64x64.gif [deleted file]
addon/sniper/70x45.jpg [deleted file]
addon/sniper/70x60.jpg [deleted file]
addon/sniper/73x80.jpg [deleted file]
addon/sniper/75x57.jpg [deleted file]
addon/sniper/80x60.jpg [deleted file]
addon/sniper/80x70.jpg [deleted file]
addon/sniper/80x80hotshotsniper.jpg [deleted file]
addon/sniper/81x67.jpg [deleted file]
addon/sniper/description_etc.txt [deleted file]
addon/sniper/hotshotsniper.html [deleted file]
addon/sniper/hotshotsniper.swf [deleted file]
addon/sniper/sniper.php [deleted file]
addon/statusnet/README [deleted file]
addon/statusnet/admin.tpl [deleted file]
addon/statusnet/signinwithstatusnet.png [deleted file]
addon/statusnet/statusnet.css [deleted file]
addon/statusnet/statusnet.php [deleted file]
addon/tictac/tictac.php [deleted file]
addon/twitter/README [deleted file]
addon/twitter/admin.tpl [deleted file]
addon/twitter/lighter.png [deleted file]
addon/twitter/twitter.css [deleted file]
addon/twitter/twitter.php [deleted file]
addon/widgets/settings.tpl [deleted file]
addon/widgets/widget_friends.php [deleted file]
addon/widgets/widget_like.php [deleted file]
addon/widgets/widgets.js [deleted file]
addon/widgets/widgets.php [deleted file]
boot.php
database.sql
doc/Account-Basics.md
doc/Connectors.md
doc/Developers.md
doc/Install.md
doc/Installing-Connectors.md
doc/Making-Friends.md
doc/Profiles.md
images/connect-bg.png [new file with mode: 0644]
images/icons.png
images/icons/10/add.png [new file with mode: 0644]
images/icons/10/delete.png [new file with mode: 0644]
images/icons/10/edit.png [new file with mode: 0644]
images/icons/10/feed.png [new file with mode: 0644]
images/icons/10/gear.png [new file with mode: 0644]
images/icons/10/group.png [new file with mode: 0644]
images/icons/10/info.png [new file with mode: 0644]
images/icons/10/link.png [new file with mode: 0644]
images/icons/10/lock.png [new file with mode: 0644]
images/icons/10/menu.png [new file with mode: 0644]
images/icons/10/notice.png [new file with mode: 0644]
images/icons/10/notify_off.png [new file with mode: 0644]
images/icons/10/notify_on.png [new file with mode: 0644]
images/icons/10/star.png [new file with mode: 0644]
images/icons/10/user.png [new file with mode: 0644]
images/icons/16/add.png [new file with mode: 0644]
images/icons/16/delete.png [new file with mode: 0644]
images/icons/16/edit.png [new file with mode: 0644]
images/icons/16/feed.png [new file with mode: 0644]
images/icons/16/gear.png [new file with mode: 0644]
images/icons/16/group.png [new file with mode: 0644]
images/icons/16/info.png [new file with mode: 0644]
images/icons/16/link.png [new file with mode: 0644]
images/icons/16/lock.png [new file with mode: 0644]
images/icons/16/menu.png [new file with mode: 0644]
images/icons/16/notice.png [new file with mode: 0644]
images/icons/16/notify_off.png [new file with mode: 0644]
images/icons/16/notify_on.png [new file with mode: 0644]
images/icons/16/star.png [new file with mode: 0644]
images/icons/16/user.png [new file with mode: 0644]
images/icons/22/add.png [new file with mode: 0644]
images/icons/22/delete.png [new file with mode: 0644]
images/icons/22/edit.png [new file with mode: 0644]
images/icons/22/feed.png [new file with mode: 0644]
images/icons/22/gear.png [new file with mode: 0644]
images/icons/22/group.png [new file with mode: 0644]
images/icons/22/info.png [new file with mode: 0644]
images/icons/22/link.png [new file with mode: 0644]
images/icons/22/lock.png [new file with mode: 0644]
images/icons/22/menu.png [new file with mode: 0644]
images/icons/22/notice.png [new file with mode: 0644]
images/icons/22/notify_off.png [new file with mode: 0644]
images/icons/22/notify_on.png [new file with mode: 0644]
images/icons/22/star.png [new file with mode: 0644]
images/icons/22/user.png [new file with mode: 0644]
images/icons/48/add.png [new file with mode: 0644]
images/icons/48/delete.png [new file with mode: 0644]
images/icons/48/edit.png [new file with mode: 0644]
images/icons/48/feed.png [new file with mode: 0644]
images/icons/48/gear.png [new file with mode: 0644]
images/icons/48/group.png [new file with mode: 0644]
images/icons/48/info.png [new file with mode: 0644]
images/icons/48/link.png [new file with mode: 0644]
images/icons/48/lock.png [new file with mode: 0644]
images/icons/48/menu.png [new file with mode: 0644]
images/icons/48/notice.png [new file with mode: 0644]
images/icons/48/notify_off.png [new file with mode: 0644]
images/icons/48/notify_on.png [new file with mode: 0644]
images/icons/48/star.png [new file with mode: 0644]
images/icons/48/user.png [new file with mode: 0644]
images/icons/Makefile [new file with mode: 0644]
images/icons/add.png [new file with mode: 0644]
images/icons/delete.png [new file with mode: 0644]
images/icons/edit.png [new file with mode: 0644]
images/icons/feed.png [new file with mode: 0644]
images/icons/gear.png [new file with mode: 0644]
images/icons/group.png [new file with mode: 0644]
images/icons/info.png [new file with mode: 0644]
images/icons/link.png [new file with mode: 0644]
images/icons/lock.png [new file with mode: 0644]
images/icons/menu.png [new file with mode: 0644]
images/icons/notice.png [new file with mode: 0644]
images/icons/notify_off.png [new file with mode: 0644]
images/icons/notify_on.png [new file with mode: 0644]
images/icons/star.png [new file with mode: 0644]
images/icons/user.png [new file with mode: 0644]
images/larrow.gif
images/logo.png [new file with mode: 0644]
images/lrarrow.gif
include/Contact.php
include/EmailNotification.php
include/Scrape.php
include/acl.js [deleted file]
include/ajaxupload.js [deleted file]
include/api.php
include/auth.php
include/bb2diaspora.php
include/bbcode.php
include/contact_selectors.php
include/conversation.php
include/country.js [deleted file]
include/crypto.php
include/delivery.php [new file with mode: 0644]
include/diaspora.php
include/email.php
include/group.php
include/html2bbcode.php
include/items.php
include/jquery.htmlstream.js [deleted file]
include/jquery.js [deleted file]
include/main.js [deleted file]
include/nav.php
include/network.php
include/notifier.php
include/pgettext.php
include/poller.php
include/profile_advanced.php
include/queue.php
include/salmon.php
include/template_processor.php
include/text.php
include/zotfns.php [deleted file]
index.php
js/acl.js [new file with mode: 0644]
js/ajaxupload.js [new file with mode: 0644]
js/country.js [new file with mode: 0644]
js/jquery.htmlstream.js [new file with mode: 0644]
js/jquery.js [new file with mode: 0644]
js/main.js [new file with mode: 0644]
library/jgrowl/README [new file with mode: 0644]
library/jgrowl/jquery.jgrowl.css [new file with mode: 0755]
library/jgrowl/jquery.jgrowl_minimized.js [new file with mode: 0644]
library/markdown.php
library/stanlemon-jgrowl-tip.tar.gz [new file with mode: 0644]
library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
library/tiptip/README [new file with mode: 0644]
library/tiptip/jquery.tipTip.minified.js [new file with mode: 0644]
library/tiptip/tipTip.css [new file with mode: 0644]
mod/acl.php
mod/admin.php
mod/apps.php
mod/community.php
mod/contacts.php
mod/crepair.php
mod/dfrn_confirm.php
mod/dfrn_notify.php
mod/dfrn_request.php
mod/directory.php
mod/display.php
mod/editpost.php
mod/events.php
mod/follow.php
mod/friendika.php
mod/group.php
mod/help.php
mod/hostxrd.php
mod/item.php
mod/like.php
mod/localtime.php [new file with mode: 0644]
mod/match.php
mod/message.php
mod/network.php
mod/notes.php
mod/notifications.php
mod/oexchange.php
mod/openid.php
mod/parse_url.php
mod/photo.php
mod/photos.php
mod/ping.php
mod/post.php [new file with mode: 0644]
mod/profile.php
mod/profile_photo.php
mod/profiles.php
mod/pubsub.php
mod/receive.php
mod/register.php
mod/salmon.php
mod/search.php
mod/settings.php
mod/tagmatch.php [new file with mode: 0644]
mod/update_notes.php [new file with mode: 0644]
mod/wall_attach.php
mod/xrd.php
update.php
util/po2php.php
view/404.tpl [new file with mode: 0644]
view/admin_aside.tpl
view/admin_remoteupdate.tpl
view/admin_site.tpl
view/apps.tpl [new file with mode: 0644]
view/auto_request.tpl
view/contact_block.tpl [new file with mode: 0644]
view/contact_edit.tpl
view/contact_template.tpl
view/conversation.tpl [new file with mode: 0644]
view/crepair.tpl
view/cs/htconfig.tpl
view/cs/lostpass_eml.tpl
view/cs/mail_received_html_body_eml.tpl
view/cs/messages.po
view/cs/passchanged_eml.tpl
view/cs/register_open_eml.tpl
view/cs/register_verify_eml.tpl
view/cs/strings.php
view/de/messages.po
view/de/strings.php
view/default.php
view/dfrn_request.tpl
view/diaspora_vcard.tpl [new file with mode: 0644]
view/directory_header.tpl
view/directory_item.tpl
view/es/messages.po
view/es/strings.php
view/follow.tpl
view/fr/strings.php
view/group_drop.tpl
view/head.tpl
view/it/messages.po
view/it/strings.php
view/it/wall_received_html_body_eml.tpl [new file with mode: 0644]
view/it/wall_received_text_body_eml.tpl [new file with mode: 0644]
view/jot-header.tpl
view/like.tpl [deleted file]
view/login.tpl
view/mail_conv.tpl
view/mail_head.tpl
view/mail_list.tpl
view/match.tpl [new file with mode: 0644]
view/msg-header.tpl
view/nav.tpl
view/photo_album.tpl
view/photo_edit.tpl
view/photo_top.tpl
view/photos_upload.tpl
view/profile_listing_header.tpl
view/profile_tabs.tpl
view/profile_vcard.tpl
view/prv_message.tpl
view/pt-br/strings.php
view/ru/messages.po [new file with mode: 0644]
view/ru/strings.php [new file with mode: 0644]
view/search_item.tpl
view/settings_tabs.tpl
view/suggestions.tpl
view/theme/clean/theme.php [new file with mode: 0644]
view/theme/darkbubble/dbicons.png [new file with mode: 0644]
view/theme/darkbubble/experimental [new file with mode: 0644]
view/theme/darkbubble/style.css [new file with mode: 0644]
view/theme/darkbubble/theme.php [new file with mode: 0644]
view/theme/darkness/theme.php [new file with mode: 0644]
view/theme/darkzero/theme.php [new file with mode: 0644]
view/theme/dispy/jot-header.tpl
view/theme/dispy/jot.tpl
view/theme/dispy/nav.tpl
view/theme/dispy/photo-menu.jpg [new file with mode: 0644]
view/theme/dispy/profile_vcard.tpl [new file with mode: 0644]
view/theme/dispy/search_item.tpl
view/theme/dispy/style.css
view/theme/dispy/wall_item.tpl
view/theme/dispy/wallwall_item.tpl
view/theme/duepuntozero/nav.tpl [new file with mode: 0644]
view/theme/duepuntozero/profile_vcard.tpl [new file with mode: 0644]
view/theme/duepuntozero/search_item.tpl [new file with mode: 0644]
view/theme/duepuntozero/style.css
view/theme/duepuntozero/theme.php [new file with mode: 0644]
view/theme/duepuntozero/wall_item.tpl [new file with mode: 0644]
view/theme/duepuntozero/wallwall_item.tpl [new file with mode: 0644]
view/theme/easterbunny/theme.php [new file with mode: 0644]
view/theme/goldenrod/theme.php [new file with mode: 0644]
view/theme/greenzero/greenicons.png
view/theme/greenzero/theme.php [new file with mode: 0644]
view/theme/loozah/nav.tpl [new file with mode: 0644]
view/theme/loozah/profile_vcard.tpl [new file with mode: 0644]
view/theme/loozah/search_item.tpl [new file with mode: 0644]
view/theme/loozah/style.css
view/theme/loozah/wall_item.tpl [new file with mode: 0644]
view/theme/loozah/wallwall_item.tpl [new file with mode: 0644]
view/theme/purplezero/theme.php [new file with mode: 0644]
view/theme/quattro/colors.less [new file with mode: 0644]
view/theme/quattro/experimental [new file with mode: 0644]
view/theme/quattro/icons.less [new file with mode: 0644]
view/theme/quattro/quattro.less [new file with mode: 0644]
view/theme/quattro/style.css [new file with mode: 0644]
view/theme/quattro/style.less [new file with mode: 0644]
view/theme/shady/theme.php [new file with mode: 0644]
view/theme/testbubble/calendar.png [new file with mode: 0644]
view/theme/testbubble/connect.png [new file with mode: 0644]
view/theme/testbubble/contact_edit.tpl [new file with mode: 0644]
view/theme/testbubble/group_drop.tpl [new file with mode: 0644]
view/theme/testbubble/group_edit.tpl [new file with mode: 0644]
view/theme/testbubble/groups.png [new file with mode: 0644]
view/theme/testbubble/icons.png [new file with mode: 0644]
view/theme/testbubble/icons.svg [new file with mode: 0644]
view/theme/testbubble/jot-header.tpl [new file with mode: 0644]
view/theme/testbubble/jot.tpl [new file with mode: 0644]
view/theme/testbubble/login-bg.gif [new file with mode: 0644]
view/theme/testbubble/login.tpl [new file with mode: 0644]
view/theme/testbubble/lrarrow.gif [new file with mode: 0644]
view/theme/testbubble/mail_head.tpl [new file with mode: 0644]
view/theme/testbubble/match.tpl [new file with mode: 0644]
view/theme/testbubble/menu-user-pin.jpg [new file with mode: 0644]
view/theme/testbubble/menu-user-pin.png [new file with mode: 0644]
view/theme/testbubble/nav.tpl [new file with mode: 0644]
view/theme/testbubble/next.png [new file with mode: 0644]
view/theme/testbubble/notifications.png [new file with mode: 0644]
view/theme/testbubble/photo-menu.jpg [new file with mode: 0644]
view/theme/testbubble/photo_album.tpl [new file with mode: 0644]
view/theme/testbubble/photo_top.tpl [new file with mode: 0644]
view/theme/testbubble/photo_view.tpl [new file with mode: 0644]
view/theme/testbubble/photography.png [new file with mode: 0644]
view/theme/testbubble/premium.png [new file with mode: 0644]
view/theme/testbubble/prev.png [new file with mode: 0644]
view/theme/testbubble/profile_entry.tpl [new file with mode: 0644]
view/theme/testbubble/profile_tabs.tpl [new file with mode: 0644]
view/theme/testbubble/profile_vcard.tpl [new file with mode: 0644]
view/theme/testbubble/search.png [new file with mode: 0644]
view/theme/testbubble/search_item.tpl [new file with mode: 0644]
view/theme/testbubble/star.png [new file with mode: 0644]
view/theme/testbubble/style.css [new file with mode: 0644]
view/theme/testbubble/user.png [new file with mode: 0644]
view/theme/testbubble/wall_item.tpl [new file with mode: 0644]
view/theme/testbubble/wallwall_item.tpl [new file with mode: 0644]
view/theme/three-d/theme.php [new file with mode: 0644]
view/viewcontact_template.tpl
view/wall_fake_drop.tpl [deleted file]
view/wall_item.tpl
view/wall_item_drop.tpl [deleted file]
view/wallwall_item.tpl
view/xrd_host.tpl
view/xrd_person.tpl
zot.txt [new file with mode: 0644]

index 41ec42389f92291bf57d3eca9b2769cc00f0c4c4..3dfb8a903a4e7a9587c7d3c25538ff43a7aee996 100644 (file)
@@ -7,3 +7,6 @@ include/jquery-1.4.2.min.js
 *.version*
 favicon.*
 home.html
+addon
+*~
+
diff --git a/LICENSE b/LICENSE
index 33579fe080957f5e9ee6cd9199b1933ecee9484c..3136dd4f8133a8b787b02c774c40c3b46ef9693d 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -1,25 +1,20 @@
-The Friendika project is distributed under the following license terms:
+Copyright (c) 2010, 2011 the Friendika Project
+All rights reserved.
 
-* This software is provided for any use with no license terms or restrictions.
-
-No guarantee is provided. Use at your own risk.
-
-Components packaged with this software may fall under different license terms.
-
-cropper      - BSD
-TwitterOAuth - BSD
-markdown     - BSD
-slinky       - BSD
-ajax-upload  - MIT
-simplepie    - MIT
-LightOpenID  - MIT
-HTML5        - MIT
-jQuery       - MIT
-TinyMCE      - LGPL
-phpsec       - LGPL
-HTMLPurifer  - LGPL
-Facebook SDK - Apache
-
-Addons, plugins, and themes may also be provided under their own license terms.
+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 --git a/README b/README
deleted file mode 100644 (file)
index 598b6d2..0000000
--- a/README
+++ /dev/null
@@ -1,86 +0,0 @@
-
-    *************
-    * Friendika *
-    *************
-
-    Friendika Communications Server
-
-    http://project.friendika.com
-
-
-       Friendika is a web application for managing social communications. Some
-would call it a "social network" or "distributed social network". We think 
-both terms have been over-used, and don't adequately describe Friendika's 
-capabilities - though Friendika can also fill those roles.
-
-       At its essence, Friendika is a web application which can monitor various
-information and social activity streams, and which also lets you participate
-in online conversations with friends and associates, using a variety of network
-protocols. These are combined into an overview of your various communications
-and activities - regardless of network origin.
-
-       Friendika also manages your personal profiles and photo albums and lets 
-you securely present each of these to specific audiences. Your communications
-can be either open and public, or closed and private. You can easily create
-"groups" of contacts with which you can partition your conversations into
-private social circles, and which cannot be seen outside the circle.
-
-       Friendika is decentralised. Any account on any Friendika server can connect
-with any account on any other Friendika server. You can also connect to and
-interact directly with friends on Facebook, Status.Net, and other federated
-social web services (e.g. identi.ca, GNU-Social, etc.).
-
-       Outgoing communications can be directed to Friendika, existing accounts on 
-Facebook and Twitter, federated social web providers - or even delivered to
-email contacts.
-
-       Incoming data streams aren't limited to traditional social networks.
-They may include most any service which provides a syndication feed (both RSS
-and Atom). This allows you to view communications from friends in other 
-diverse social networks - such as Diaspora, Google Buzz, and millions of 
-blogs, news services, and other websites. You can also import
-contacts from (and write to) anybody that is accessible from your email
-INBOX and view them in your social stream. Over time we will try to
-build two-way bridges to other services so that you can freely
-interact in both directions with anybody on an accessible network that 
-allows it. 
-
-       Communications between Friendika servers are private and encrypted, 
-using military grade encryption - and require mutual identity provenance
-before any data is exchanged. These same crypto mechanisms provide remote 
-password-less authentication; allowing you to post to profiles and view private
-photo collections on other servers - without encountering any login and/or
-authorisation dialogues when visiting these sites.
-
-       Friendika has no boundaries and no central ownership of the data generated
-within the network. Anybody with a commodity PHP/MySQL web server or hosting
-account can provide a server, and each individual server can then support
-up to several thousand participating members - each with their own unique
-communication and privacy needs. This allows Friendika to scale to global
-levels and mimics the decentralised architecture of the web itself.
-
-       If you are creating a website which requires social interaction, Friendika 
-can also take the place of blog software, forum software and feed readers, and
-also provide individualised communications and content management - or
-simply be used as an alternative to traditional "monolithic" social networks.
-
-       Friendika is also free - in every sense of the word. 
-
-       Choose freedom - join us.
-
-       Find out more about the project at http://project.friendika.com
-
-    *******************
-    Friendika Demo Site
-    *******************
-
-    http://demo.friendika.com
-
-    *******************
-    Friendika Downloads
-    *******************
-
-    http://github.com/friendika/friendika/tarball/master
-
-
-
diff --git a/addon/LICENSE b/addon/LICENSE
deleted file mode 100644 (file)
index 02cff93..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Friendika addons/plugins license terms are under the control of the project 
-author or authors. 
-
-Developers are free to set their own license terms on addons/plugins as 
-standalone works. These license terms apply only to the covered addon or
-plugin. 
-
-Addons/plugins may be licensed under copyleft or other license terms. Although 
-these projects may require Friendika to operate, no addon or plugin may 
-mandate any changes to the Friendika project license.
diff --git a/addon/README b/addon/README
deleted file mode 100644 (file)
index fb1c634..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-Friendika Addon/Plugin development
-
-This is an early specification and hook details may be subject to change.
-
-Please see the sample addon 'randplace' for a working example of using these features.
-
-
-You must register plugins with the system in the .htconfig.php file.
-
-$a->config['system']['addon'] = 'plugin1name, plugin2name, another_name';
-
-Plugin names cannot contain spaces and are used as filenames.
-
-
-Register your plugin hooks during installation. 
-
-       register_hook($hookname, $file, $function);
-
-       $hookname is a string and corresponds to a known Friendika hook
-       $file is a pathname relative to the top-level Friendika directory.
-               This *should* be 'addon/plugin_name/plugin_name.php' in most cases.
-       $function is a string and is the name of the function which will be executed
-               when the hook is called.
-
-
-Your hook functions will be called with at least one and possibly two arguments
-
-       function myhook_function(&$a, &$b) {
-
-
-       }
-
-If you wish to make changes to the calling data, you must declare them as 
-reference variables (with '&') during function declaration. 
-
-$a is the Friendika 'App' class - which contains a wealth of information
-about the current state of Friendika, such as which module has been called,
-configuration info, the page contents at the point the hook was invoked, profile
-and user information, etc. It is recommeded you call this '$a' to match its usage 
-elsewhere.
-
-$b can be called anything you like. This is information which is specific to the hook 
-currently being processed, and generally contains information that is being immediately
-processed or acted on that you can use, display, or alter. Remember to declare it with 
-'&' if you wish to alter it.
-
-
-Current hooks:
-
-'authenticate' - called when a user attempts to login. 
-       $b is an array
-               'username' => the supplied username
-               'password' => the supplied password
-               'authenticated' => set this to non-zero to authenticate the user.
-               'user_record' => successful authentication must also return a valid user record from the database
-
-
-'logged_in' - called after a user has successfully logged in.
-       $b contains the $a->user array
-
-
-'display_item' - called when formatting a post for display.
-       $b is an array
-               'item' => The item (array) details pulled from the database
-               'output' => the (string) HTML representation of this item prior to adding it 
-                       to the page  
-
-'post_local' - called when a status post or comment is entered on the local system
-       $b is the item array of the information to be stored in the database
-               {Please note: body contents are bbcode - not HTML)
-
-'post_local_end' - called when a local status post or comment has been stored on the local system
-       $b is the item array of the information which has just been stored in the database
-               {Please note: body contents are bbcode - not HTML)
-
-
-'post_remote' - called when receiving a post from another source. This may also be used
-       to post local activity or system generated messages.
-       $b is the item array of information to be stored in the database and the item
-       body is bbcode.
-
-'settings_form' - called when generating the HTML for the user Settings page
-       $b is the (string) HTML of the settings page before the final '</form>' tag.
-
-'settings_post' - called when the Settings pages are submitted.
-       $b is the $_POST array
-
-'plugin_settings' - called when generating the HTML for the addon settings page
-       $b is the (string) HTML of the addon settings page before the final '</form>' tag.
-
-'plugin_settings_post' - called when the Addon Settings pages are submitted.
-       $b is the $_POST array
-
-'profile_post' - called when posting a profile page.
-       $b is the $_POST array
-
-'profile_edit' - called prior to output of profile edit page
-       $b is array
-               'profile' => profile (array) record from the database
-               'entry' => the (string) HTML of the generated entry
-
-'profile_advanced' - called when the HTML is generated for the 'Advanced profile', 
-       corresponding to the 'Profile' tab within a person's profile page.
-       $b is the (string) HTML representation of the generated profile
-
-'directory_item' - called from the Directory page when formatting an item for display
-       $b is an array
-               'contact' => contact (array) record for the person from the database
-               'entry' => the (string) HTML of the generated entry 
-
-'profile_sidebar_enter' - called prior to generating the sidebar "short" profile for a page
-       $b is (array) the person's profile array
-
-'profile_sidebar' - called when generating the sidebar "short" profile for a page
-       $b is an array
-               'profile' => profile (array) record for the person from the database
-               'entry' => the (string) HTML of the generated entry
-
-'contact_block_end' - called when formatting the block of contacts/friends on a 
-       profile sidebar has completed
-       $b is an array
-               'contacts' => contact array of entries
-               'output' => the (string) generated HTML of the contact block
-
-'bbcode' - called during conversion of bbcode to html
-       $b is (string) converted text
-
-'html2bbcode' - called during conversion of html to bbcode (e.g. remote message posting)
-       $b is (string) converted text
-
-
-'page_header' - called after building the page navigation section
-       $b is (string) HTML of nav region
-
-
-'personal_xrd' - called prior to output of personal XRD file.
-       $b is an array
-               'user' => the user record for the person
-               'xml' => the complete XML to be output
-
-'home_content' - called prior to output home page content, shown to unlogged users
-       $b is (string) HTML of section region
-
-'contact_edit' - called when editing contact details on an individual from the Contacts page
-       $b is (array)
-               'contact' => contact record (array) of target contact
-               'output' => the (string) generated HTML of the contact edit page
-
-'contact_edit_post' - called when posting the contact edit page
-       $b is the $_POST array
-
-'init_1' - called just after DB has been opened and before session start
-       $b is not used or passed
-
-'page_end' - called after HTML content functions have completed
-    $b is (string) HTML of content div
-
-'jot_plugin' - add tools to jot toolbar
-  $b is (string) HTML for tool icon
-
-
-*** = subject to change
-
-
-
-
-
-Not yet documented:
-
-'atom_feed' ***
-
-'atom_feed_end' ***
-
-'parse_atom' ***
-
-'atom_author' ***
-
-'atom_entry' ***
-
-'parse_link' ***
-
-
-
-
-       
diff --git a/addon/calc/calc.php b/addon/calc/calc.php
deleted file mode 100644 (file)
index 8c079dc..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-<?php\r
-/**\r
- * Name: Calculator App\r
- * Description: Simple Calculator Application\r
- * Version: 1.0\r
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>\r
- */\r
-\r
-\r
-function calc_install() {\r
-       register_hook('app_menu', 'addon/calc/calc.php', 'calc_app_menu');\r
-}\r
-\r
-function calc_uninstall() {\r
-       unregister_hook('app_menu', 'addon/calc/calc.php', 'calc_app_menu');\r
-\r
-}\r
-\r
-function calc_app_menu($a,&$b) {\r
-       $b['app_menu'] .= '<div class="app-title"><a href="calc">Calculator</a></div>'; \r
-}\r
-\r
-\r
-function calc_module() {}\r
-\r
-\r
-\r
-\r
-function calc_init($a) {\r
-\r
-$x = <<< EOT\r
-\r
-<script language="JavaScript">\r
-/**************************************\r
- * www.FemaleNerd.com         *\r
- **************************************/\r
-\r
-// Declare global variables\r
-var displayText = ""\r
-var num1\r
-var num2\r
-var operatorType\r
-\r
-// Write to display\r
-function addDisplay(n){\r
-   id = document.getElementById("display");\r
-id.value = ""\r
-displayText += n\r
-id.value = displayText\r
-}\r
-\r
-// Addition\r
-function addNumbers() {\r
-if (displayText == "") {\r
-  displayText = result\r
- }\r
-num1 = parseFloat(displayText)\r
-operatorType = "add"\r
-displayText = ""\r
-}\r
-\r
-// Subtraction\r
-function subtractNumbers() {\r
-if (displayText == "") {\r
-  displayText = result\r
- }\r
-num1 = parseFloat(displayText)\r
-operatorType = "subtract"\r
-displayText = ""\r
-}\r
-\r
-// Multiplication\r
-function multiplyNumbers() {\r
-if (displayText == "") {\r
-  displayText = result\r
- }\r
-num1 = parseFloat(displayText)\r
-operatorType = "multiply"\r
-displayText = ""\r
-}\r
-\r
-// Division\r
-function divideNumbers() {\r
-if (displayText == "") {\r
-  displayText = result\r
- }\r
-num1 = parseFloat(displayText)\r
-operatorType = "divide"\r
-displayText = ""\r
-}\r
-\r
-// Sine\r
-function sin() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = Math.sin(num1)\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// Cosine\r
-function cos() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = Math.cos(num1)\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// ArcSine\r
-function arcSin() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = Math.asin(num1)\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// ArcCosine\r
-function arcCos() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = Math.acos(num1)\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// Square root\r
-function sqrt() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = Math.sqrt(num1)\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// Square number (number to the power of two)\r
-function square() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = num1 * num1\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// Convert degrees to radians\r
-function degToRad() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = num1 * Math.PI / 180\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// Convert radians to degrees\r
-function radToDeg() {\r
-   id = document.getElementById("display");\r
-if (displayText == "") {\r
-  num1 = result\r
-  }\r
-else {\r
-  num1 = parseFloat(displayText)\r
-  }\r
-if (num1 != "") {\r
-  result = num1 * 180 / Math.PI\r
-  id.value = result\r
-  displayText = ""\r
-  }\r
-else {\r
-  alert("Please write the number first")\r
-  }\r
-}\r
-\r
-// Calculations\r
-function calculate() {\r
-   id = document.getElementById("display");\r
-\r
-if (displayText != "") {\r
-  num2 = parseFloat(displayText)\r
-// Calc: Addition\r
-  if (operatorType == "add") {\r
-    result = num1 + num2\r
-    id.value = result\r
-    }\r
-// Calc: Subtraction\r
-  if (operatorType == "subtract") {\r
-    result = num1 - num2\r
-    id.value = result\r
-    }\r
-// Calc: Multiplication\r
-  if (operatorType == "multiply") {\r
-    result = num1 * num2\r
-    id.value = result\r
-    }\r
-// Calc: Division\r
-  if (operatorType == "divide") {\r
-    result = num1 / num2\r
-    id.value = result\r
-    }\r
-  displayText = ""\r
-  }\r
-  else {\r
-  id.value = "Oops! Error!"\r
-  }\r
-}\r
-\r
-// Clear the display\r
-function clearDisplay() {\r
-   id = document.getElementById("display");\r
-\r
-displayText = ""\r
-id.value = ""\r
-}\r
-</script>\r
-\r
-EOT;\r
-$a->page['htmlhead'] .= $x;\r
-}\r
-\r
-function calc_content($app) {\r
-\r
-$o = '';\r
-\r
-$o .=  <<< EOT\r
-\r
-<h3>Calculator</h3>\r
-<br /><br />\r
-<table>\r
-<tbody><tr><td> \r
-<table bgcolor="#af9999" border="1">\r
-<tbody><tr><td>\r
-<table border="1" cellpadding="2" cellspacing="2">\r
-<form name="calc">\r
-<!--\r
-<TR><TD VALIGN=top colspan=6 ALIGN="center"> <H2>Calculator</H2> </TD>\r
--->\r
-<tbody><tr>\r
-       <td colspan="5"><input size="22" id="display" name="display" type="text"></td>\r
-</tr><tr align="left" valign="middle">\r
-       <td><input name="one" value="&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;" onclick="addDisplay(1)" type="button"></td>\r
-       <td><input name="two" value="&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;" onclick="addDisplay(2)" type="button"></td>\r
-       <td><input name="three" value="&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;" onclick="addDisplay(3)" type="button"></td>\r
-       <td><input name="plus" value="&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;" onclick="addNumbers()" type="button"></td>\r
-</tr><tr align="left" valign="middle">\r
-       <td><input name="four" value="&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;" onclick="addDisplay(4)" type="button"></td>\r
-       <td><input name="five" value="&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;" onclick="addDisplay(5)" type="button"></td>\r
-       <td><input name="six" value="&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;" onclick="addDisplay(6)" type="button"></td>\r
-       <td><input name="minus" value="&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;" onclick="subtractNumbers()" type="button"></td>\r
-</tr><tr align="left" valign="middle">\r
-       <td><input name="seven" value="&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;" onclick="addDisplay(7)" type="button"></td>\r
-       <td><input name="eight" value="&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;" onclick="addDisplay(8)" type="button"></td>\r
-       <td><input name="nine" value="&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;" onclick="addDisplay(9)" type="button"></td>\r
-       <td><input name="multiplication" value="&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;" onclick="multiplyNumbers()" type="button"></td>\r
-</tr><tr align="left" valign="middle">\r
-       <td><input name="zero" value="&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;" onclick="addDisplay(0)" type="button"></td>\r
-       <td><input name="pi" value="&nbsp;Pi&nbsp;&nbsp;" onclick="addDisplay(Math.PI)" type="button"> </td> \r
-       <td><input name="dot" value="&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;" onclick='addDisplay(".")' type="button"></td>\r
-       <td><input name="division" value="&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;" onclick="divideNumbers()" type="button"></td>\r
-</tr><tr align="left" valign="middle">\r
-       <td><input name="sqareroot" value="sqrt" onclick="sqrt()" type="button"></td>\r
-       <td><input name="squarex" value=" x^2" onclick="square()" type="button"></td>\r
-       <td><input name="deg-rad" value="d2r&nbsp;" onclick="degToRad()" type="button"></td>\r
-       <td><input name="rad-deg" value="r2d&nbsp;" onclick="radToDeg()" type="button"></td>\r
-</tr><tr align="left" valign="middle">\r
-       <td><input name="sine" value="&nbsp;sin&nbsp;" onclick="sin()" type="button"></td>\r
-       <td><input name="arcsine" value="asin" onclick="arcSin()" type="button"></td>\r
-       <td><input name="cosine" value="cos" onclick="cos()" type="button"></td>\r
-       <td><input name="arccosine" value="acs" onclick="arcCos()" type="button"></td>\r
-\r
-</tr><tr align="left" valign="middle">\r
-       <td colspan="2"><input name="clear" value="&nbsp;&nbsp;Clear&nbsp;&nbsp;" onclick="clearDisplay()" type="button"></td>\r
-       <td colspan="3"><input name="enter" value="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" onclick="calculate()" type="button"></td>\r
-\r
-</tr></tbody></table>\r
-</form>\r
-\r
-       <!--\r
-       <TD VALIGN=top> \r
-               <B>NOTE:</B> All sine and cosine calculations are\r
-               <br>done in radians. Remember to convert first\r
-               <br>if using degrees.\r
-       </TD>\r
-       -->\r
-       \r
-</td></tr></tbody></table>\r
-\r
-\r
-</td></tr></tbody></table>\r
-\r
-EOT;\r
-return $o;\r
-\r
-}\r
diff --git a/addon/convert/UnitConvertor.php b/addon/convert/UnitConvertor.php
deleted file mode 100644 (file)
index d7933a8..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-<?php\r
-// +----------------------------------------------------------------------+\r
-// | PHP version 4.0                                                      |\r
-// +----------------------------------------------------------------------+\r
-// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |\r
-// +----------------------------------------------------------------------+\r
-// | This source file is subject to version 2.0 of the PHP license,       |\r
-// | that is bundled with this package in the file LICENSE, and is        |\r
-// | available at through the world-wide-web at                           |\r
-// | http://www.php.net/license/2_02.txt.                                 |\r
-// | If you did not receive a copy of the PHP license and are unable to   |\r
-// | obtain it through the world-wide-web, please send a note to          |\r
-// | license@php.net so we can mail you a copy immediately.               |\r
-// +----------------------------------------------------------------------+\r
-// | Authors: Stanislav Okhvat <stanis@ngs.ru>                            |\r
-// | Co-authored by : CVH, Chris Hansel <chris@cpi-service.com>                                  |\r
-// +----------------------------------------------------------------------+\r
-//\r
-// $Id: UnitConvertor.php,v 1.00 2002/02/20 11:40:00 stasokhvat Exp $\r
-\r
-/**\r
-* UnitConvertor is able to convert between different units and currencies.\r
-*\r
-* @author   Stanislav Okhvat <stanis@sibfair.nsk.su, stanis@ngs.ru>\r
-* @version  $Id: UnitConvertor.php,v 1.00 2002/03/01 17:00:00 stasokhvat Exp $\r
-* @package  UnitConvertor\r
-* @access   public\r
-* @history  01.03.2002  Implemented the code for regular and offset-based\r
-*           conversions\r
-*\r
-*           13.12.2004\r
-*           By Chris Hansel (CVH): changed getConvSpecs in order to have it look up \r
-*           intermediary conversions (also see comments in check_key).\r
-*\r
-*           Intermediary conversions are useful when no conversion ratio is specified\r
-*           between two units when we calculate between the two. For example, we want\r
-*           to convert between Fahrenheit and Kelvin, and we have only\r
-*           specified how to convert Centigrade<->Fahrenheit and\r
-*           Centigrade<->Kelvin. While a direct (Fahrenheit->Kelvin) or\r
-*           reverse (Kelvin->Fahrenheit) lookups fail, looking for an intermediary\r
-*           unit linking the two (Centigrade) helps us do the conversion.\r
-*\r
-*           13.12.2004\r
-*           Chris Hansel (CVH): $to_array argument of addConversion method can now\r
-*           contain units as 'unit1/unit2/unit3', when all units stand for the same\r
-*           thing. See examples in unitconv.php\r
-*/\r
-class UnitConvertor\r
-{\r
-    /**\r
-    * Stores conversion ratios.\r
-    *\r
-    * @var      array\r
-    * @access   private\r
-    */\r
-       var $conversion_table = array();\r
-\r
-    /**\r
-    * Decimal point character (default is "." - American - set in constructor).\r
-    *\r
-    * @var      string\r
-    * @access   private\r
-    */\r
-       var $decimal_point;\r
-\r
-    /**\r
-    * Thousands separator (default is "," - American - set in constructor).\r
-    *\r
-    * @var      string\r
-    * @access   private\r
-    */\r
-       var $thousand_separator;\r
-\r
-    /**\r
-    * For future use\r
-    *\r
-    * @var      array\r
-    * @access   private\r
-    */\r
-       var $bases = array();\r
-\r
-    /**\r
-    * Constructor. Initializes the UnitConvertor object with the most important\r
-       * properties.\r
-    *\r
-    * @param    string    decimal point character\r
-       * @param    string    thousand separator character\r
-    * @return   void\r
-    * @access   public\r
-    */\r
-       function UnitConvertor($dec_point = '.', $thousand_sep = ',')\r
-       {\r
-               $this->decimal_point = $dec_point;\r
-               $this->thousand_separator = $thousand_sep;\r
-\r
-       } // end func UnitConvertor\r
-\r
-    /**\r
-    * Adds a conversion ratio to the conversion table.\r
-    *\r
-    * @param    string    the name of unit from which to convert\r
-       * @param    array     array(\r
-    *                                          "pound"=>array("ratio"=>'', "offset"=>'')\r
-    *                                    )\r
-    *                                    "pound" - name of unit to set conversion ration to\r
-    *                                    "ratio" - 'double' conversion ratio which, when\r
-    *                                    multiplied by the number of $from_unit units produces\r
-    *                                    the result\r
-    *                                    "offset" - an offset from 0 which will be added to\r
-    *                                    the result when converting (needed for temperature\r
-    *                                    conversions and defaults to 0).\r
-    * @return   boolean   true if successful, false otherwise\r
-    * @access   public\r
-    */\r
-       function addConversion($from_unit, $to_array)\r
-       {\r
-               if (!isset($this->conversion_table[$from_unit])) {\r
-                       while(list($key, $val) = each($to_array))\r
-                       {\r
-                               if (strstr($key, '/'))\r
-                               {\r
-                                       $to_units = explode('/', $key);\r
-                                       foreach ($to_units as $to_unit)\r
-                                       {\r
-                                               $this->bases[$from_unit][] = $to_unit;\r
-\r
-                                               if (!is_array($val))\r
-                                               {\r
-                                                       $this->conversion_table[$from_unit."_".$to_unit] = array("ratio"=>$val, "offset"=>0);\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       $this->conversion_table[$from_unit."_".$to_unit] =\r
-                                                               array(\r
-                                                                       "ratio"=>$val['ratio'],\r
-                                                                       "offset"=>(isset($val['offset']) ? $val['offset'] : 0)\r
-                                                               );\r
-                                               }\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       $this->bases[$from_unit][] = $key;\r
-\r
-                                       if (!is_array($val))\r
-                                       {\r
-                                               $this->conversion_table[$from_unit."_".$key] = array("ratio"=>$val, "offset"=>0);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               $this->conversion_table[$from_unit."_".$key] =\r
-                                               array(\r
-                                                       "ratio"=>$val['ratio'],\r
-                                                       "offset"=>(isset($val['offset']) ? $val['offset'] : 0)\r
-                                               );\r
-                                       }\r
-                               }\r
-                       }\r
-                       return true;\r
-               }\r
-               return false;\r
-\r
-       } // end func addConversion\r
-\r
-    /**\r
-    * Converts from one unit to another using specified precision.\r
-    *\r
-    * @param    double    value to convert\r
-       * @param    string    name of the source unit from which to convert\r
-    * @param    string    name of the target unit to which we are converting\r
-    * @param    integer   double precision of the end result\r
-    * @return   void\r
-    * @access   public\r
-    */\r
-       function convert($value, $from_unit, $to_unit, $precision)\r
-       {\r
-               if ($this->getConvSpecs($from_unit, $to_unit, $value, $converted ))\r
-               {\r
-                       return number_format($converted , (int)$precision, $this->decimal_point, $this->thousand_separator);\r
-               } else {\r
-                       return false;\r
-               }\r
-       } // end func\r
-\r
-       /**\r
-       * CVH : changed this Function getConvSpecs in order to have it look up \r
-       * intermediary Conversions from the \r
-       * "base" unit being that one that has the highest hierarchical order in one\r
-       * "logical" Conversion_Array\r
-       * when taking $conv->addConversion('km',\r
-       * array('meter'=>1000, 'dmeter'=>10000, 'centimeter'=>100000,\r
-       * 'millimeter'=>1000000, 'mile'=>0.62137, 'naut.mile'=>0.53996,\r
-       * 'inch(es)/zoll'=>39370, 'ft/foot/feet'=>3280.8, 'yd/yard'=>1093.6));\r
-       * "km" would be the logical base unit for all units of dinstance, thus, \r
-       * if the function fails to find a direct or reverse conversion in the table \r
-       * it is only logical to suspect that if there is a chance \r
-       * converting the value it only is via the "base" unit, and so \r
-       * there is not even a need for a recursive search keeping the perfomance \r
-       * acceptable and the ressource small...\r
-       *\r
-       * CVH check_key checks for a key in the Conversiontable and returns a value\r
-       */\r
-       function  check_key( $key) {\r
-               if ( array_key_exists ($key,$this->conversion_table)) {\r
-                       if (! empty($this->conversion_table[$key])) {\r
-                               return $this->conversion_table[$key];\r
-                       }\r
-               }\r
-               return false;\r
-       }\r
-\r
-       /**\r
-    * Key function. Finds the conversion ratio and offset from one unit to another.\r
-    *\r
-       * @param    string    name of the source unit from which to convert\r
-    * @param    string    name of the target unit to which we are converting\r
-    * @param    double    conversion ratio found. Returned by reference.\r
-    * @param    double    offset which needs to be added (or subtracted, if negative)\r
-       *                     to the result to convert correctly. \r
-       *                     For temperature or some scientific conversions,\r
-    *                                    i.e. Fahrenheit -> Celcius\r
-    * @return   boolean   true if ratio and offset are found for the supplied\r
-    *                                    units, false otherwise\r
-    * @access   private\r
-    */\r
-       function getConvSpecs($from_unit, $to_unit, $value, &$converted)\r
-       {\r
-               $key = $from_unit."_".$to_unit;\r
-               $revkey = $to_unit."_".$from_unit;\r
-               $found = false;\r
-               if ($ct_arr = $this->check_key($key)) {\r
-                       // Conversion Specs found directly\r
-                       $ratio = (double)$ct_arr['ratio'];\r
-                       $offset = $ct_arr['offset']; \r
-                       $converted = (double)(($value  * $ratio)+ $offset);\r
-                       \r
-                       return true;\r
-               }       // not found in direct order, try reverse order\r
-               elseif ($ct_arr = $this->check_key($revkey)) {\r
-                       $ratio = (double)(1/$ct_arr['ratio']);\r
-                       $offset = -$ct_arr['offset'];\r
-                       $converted = (double)(($value  + $offset) *  $ratio);\r
-                       \r
-                       return true;\r
-               }       // not found test for intermediary conversion\r
-               else {\r
-                       // return ratio = 1 if keyparts match\r
-                       if ($key == $revkey) {\r
-                                           $ratio = 1;\r
-                                               $offset = 0;\r
-                                               $converted = $value;\r
-                                               return true;\r
-                       }               \r
-                       // otherwise search intermediary\r
-                       reset($this->conversion_table);\r
-                       while (list($convk, $i1_value) = each($this->conversion_table)) {\r
-                               // split the key into parts\r
-                               $keyparts = preg_split("/_/",$convk);\r
-                               // return ratio = 1 if keyparts match\r
-                       \r
-                               // Now test if either part matches the from or to unit\r
-                               if ($keyparts[1] == $to_unit && ($i2_value = $this->check_key($keyparts[0]."_".$from_unit))) {\r
-                                               // an intermediary $keyparts[0] was found\r
-                                               // now let us put things together intermediary 1 and 2\r
-                                               $converted = (double)(((($value - $i2_value['offset']) / $i2_value['ratio']) * $i1_value['ratio'])+ $i1_value['offset']);\r
-\r
-                                               $found = true;\r
-                                               \r
-                               } elseif ($keyparts[1] == $from_unit && ($i2_value = $this->check_key($keyparts[0]."_".$to_unit))) {\r
-                                               // an intermediary $keyparts[0] was found\r
-                                               // now let us put things together intermediary 2 and 1\r
-                                               $converted = (double)(((($value - $i1_value['offset']) / $i1_value['ratio']) + $i2_value['offset']) * $i2_value['ratio']);\r
-\r
-                                               $found = true;                  \r
-                               } \r
-                       }\r
-                       return $found;          \r
-               }\r
-\r
-       } // end func getConvSpecs\r
-       \r
-} // end class UnitConvertor\r
-?>
\ No newline at end of file
diff --git a/addon/convert/convert.php b/addon/convert/convert.php
deleted file mode 100644 (file)
index 7a4c90a..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php\r
-/**\r
- * Name: Converter App\r
- * Description: Unit converter application\r
- * Version: 1.0\r
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>\r
- */\r
-\r
-function convert_install() {\r
-       register_hook('app_menu', 'addon/convert/convert.php', 'convert_app_menu');\r
-}\r
-\r
-function convert_uninstall() {\r
-       unregister_hook('app_menu', 'addon/convert/convert.php', 'convert_app_menu');\r
-}\r
-\r
-function convert_app_menu($a,&$b) {\r
-       $b['app_menu'] .= '<div class="app-title"><a href="convert">Units Conversion</a></div>'; \r
-}\r
-\r
-\r
-function convert_module() {}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-function convert_content($app) {\r
-\r
-include("UnitConvertor.php");\r
\r
- class TP_Converter extends UnitConvertor {\r
-       function TP_Converter($lang = "en")\r
-       {\r
-               if ($lang != 'en' ) {\r
-                       $dec_point = '.'; $thousand_sep = "'";\r
-               } else {\r
-                       $dec_point = '.'; $thousand_sep = ",";\r
-               }\r
-               \r
-               $this->UnitConvertor($dec_point , $thousand_sep );\r
-\r
-       } // end func UnitConvertor\r
-\r
-       function find_base_unit($from,$to) {\r
-               while (list($skey,$sval) = each($this->bases)) {\r
-                               if ($skey == $from || $to == $skey || in_array($to,$sval) || in_array($from,$sval)) {\r
-                                       return $skey;                           \r
-                               }\r
-               }\r
-               return false;           \r
-       }\r
-\r
-       function getTable($value, $from_unit, $to_unit, $precision) {\r
-       \r
-               if ($base_unit = $this->find_base_unit($from_unit,$to_unit)) {\r
-               \r
-                       // A baseunit was found now lets convert from -> $base_unit \r
-                       \r
-                               $cell ['value'] = $this->convert($value, $from_unit, $base_unit, $precision)." ".$base_unit;    \r
-                               $cell ['class'] = ($base_unit == $from_unit || $base_unit == $to_unit) ? "framedred": "";\r
-                               $cells[] = $cell;\r
-                       // We now have the base unit and value now lets produce the table;\r
-                       while (list($key,$val) = each($this->bases[$base_unit])) {\r
-                               $cell ['value'] = $this->convert($value, $from_unit, $val, $precision)." ".$val;        \r
-                               $cell ['class'] = ($val == $from_unit || $val == $to_unit) ? "framedred": "";\r
-                               $cells[] = $cell;\r
-                       }\r
-\r
-                       $cc = count($cells);\r
-                       $string = "<table class=\"framed grayish\" border=\"1\" cellpadding=\"5\" width=\"80%\" align=\"center\"><tr>";\r
-                       $string .= "<td rowspan=\"$cc\" align=\"center\">$value $from_unit</td>";\r
-                       $i=0;\r
-                       foreach ($cells as $cell) {\r
-                               if ($i==0) {\r
-                                       $string .= "<td class=\"".$cell['class']."\">".$cell['value']."</td>";\r
-                                       $i++;\r
-                               } else {\r
-                                       $string .= "</tr><tr><td class=\"".$cell['class']."\">".$cell['value']."</td>";\r
-                               }\r
-                       }\r
-                       $string .= "</tr></table>";\r
-                       return $string;\r
-               }               \r
-               \r
-       }\r
-}\r
-\r
-\r
-$conv = new TP_Converter('en');\r
-\r
-\r
-$conversions = array(\r
-       'Temperature'=>array('base' =>'Celsius',\r
-               'conv'=>array(\r
-                       'Fahrenheit'=>array('ratio'=>1.8, 'offset'=>32),\r
-                       'Kelvin'=>array('ratio'=>1, 'offset'=>273),\r
-                       'Reaumur'=>0.8\r
-               )\r
-       ),\r
-       'Weight' => array('base' =>'kg',\r
-               'conv'=>array(\r
-                       'g'=>1000,\r
-                       'mg'=>1000000,\r
-                       't'=>0.001,\r
-                       'grain'=>15432,\r
-                       'oz'=>35.274,\r
-                       'lb'=>2.2046,\r
-                       'cwt(UK)'       => 0.019684,\r
-                       'cwt(US)'       => 0.022046, \r
-                       'ton (US)'      => 0.0011023,\r
-                       'ton (UK)'      => 0.0009842\r
-               )\r
-       ),\r
-       'Distance' => array('base' =>'km',\r
-               'conv'=>array(\r
-                       'm'=>1000,\r
-                       'dm'=>10000,\r
-                       'cm'=>100000,\r
-                       'mm'=>1000000,\r
-                       'mile'=>0.62137,\r
-                       'naut.mile'=>0.53996,\r
-                       'inch(es)'=>39370,\r
-                       'ft'=>3280.8,\r
-                       'yd'=>1093.6,\r
-                       'furlong'=>4.970969537898672,\r
-                       'fathom'=>546.8066491688539\r
-               )\r
-       ),\r
-       'Area' => array('base' =>'km 2',\r
-               'conv'=>array(  \r
-                       'ha'=>100,\r
-                       'acre'=>247.105,\r
-                       'm 2'=>pow(1000,2),\r
-                       'dm 2'=>pow(10000,2),\r
-                       'cm 2'=>pow(100000,2),\r
-                       'mm 2'=>pow(1000000,2), \r
-                       'mile 2'=>pow(0.62137,2),\r
-                       'naut.miles 2'=>pow(0.53996,2),\r
-                       'in 2'=>pow(39370,2),\r
-                       'ft 2'=>pow(3280.8,2),\r
-                       'yd 2'=>pow(1093.6,2),\r
-               )\r
-       ),\r
-       'Volume' => array('base' =>'m 3',\r
-               'conv'=>array(\r
-                       'in 3'=>61023.6,\r
-                       'ft 3'=>35.315,\r
-                       'cm 3'=>pow(10,6),\r
-                       'dm 3'=>1000,\r
-                       'litre'=>1000,\r
-                       'hl'=>10,\r
-                       'yd 3'=>1.30795,\r
-                       'gal(US)'=>264.172,\r
-                       'gal(UK)'=>219.969,\r
-                       'pint' => 2113.376,\r
-                       'quart' => 1056.688,\r
-                       'cup' => 4266.753,\r
-                       'fl oz' => 33814.02,\r
-                       'tablespoon' => 67628.04,\r
-                       'teaspoon' => 202884.1,\r
-                       'pt (UK)'=>1000/0.56826, \r
-                       'barrel petroleum'=>1000/158.99,\r
-                       'Register Tons'=>2.832, \r
-                       'Ocean Tons'=>1.1327\r
-               )\r
-       ),\r
-       'Speed' =>array('base' =>'kmph',\r
-               'conv'=>array(\r
-                       'mps'=>0.0001726031,\r
-                       'milesph'=>0.62137,\r
-                       'knots'=>0.53996,\r
-                       'mach STP'=>0.0008380431,\r
-                       'c (warp)'=>9.265669e-10\r
-               )\r
-       )\r
-);\r
-\r
-\r
-while (list($key,$val) = each($conversions)) {\r
-       $conv->addConversion($val['base'], $val['conv']);\r
-       $list[$key][] = $val['base'];\r
-       while (list($ukey,$uval) = each($val['conv'])) {\r
-               $list[$key][] = $ukey;\r
-       }\r
-}\r
-\r
-  $o .= '<h3>Unit Conversions</h3>';\r
-\r
-\r
-       if (isset($_POST['from_unit']) && isset($_POST['value'])) {\r
-       $_POST['value'] = $_POST['value'] + 0;\r
-\r
-\r
-               $o .= ($conv->getTable($_POST['value'], $_POST['from_unit'], $_POST['to_unit'], 5))."</p>";\r
-       } else {\r
-               $o .= "<p>Select:</p>";\r
-       }\r
-\r
-       if(isset($_POST['value']))\r
-               $value = $_POST['value'];\r
-       else\r
-               $value = '';\r
-\r
-       $o .= '<form action="convert" method="post" name="conversion">';\r
-    $o .= '<input name="value" type="text" id="value" value="' . $value . '" size="10" maxlength="10" />';\r
-    $o .= '<select name="from_unit" size="12">';\r
-\r
-\r
-\r
-       reset($list);\r
-       while(list($key,$val) = each($list)) {\r
-               $o .=  "\n\t<optgroup label=\"$key\">";\r
-               while(list($ukey,$uval) = each($val)) {\r
-                       $selected = (($uval == $_POST['from_unit']) ? ' selected="selected" ' : '');\r
-                       $o .=  "\n\t\t<option value=\"$uval\" $selected >$uval</option>";\r
-               }\r
-               $o .= "\n\t</optgroup>";\r
-       }\r
-\r
-       $o .= '</select>';\r
-\r
-    $o .= '<input type="submit" name="Submit" value="Submit" /></form>';\r
-  \r
-       return $o;\r
-}\r
diff --git a/addon/facebook/README b/addon/facebook/README
deleted file mode 100644 (file)
index 19c5948..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-Installing the Friendika/Facebook connector
-
-1. register an API key for your site from developer.facebook.com
-  a. We'd be very happy if you include "Friendika" in the application name
-     to increase name recognition. The Friendika icons are also present
-     in the images directory and may be uploaded as a Facebook app icon.
-     Use images/friendika-16.jpg for the Icon and images/friendika-128.jpg for the Logo.
-  b. The url should be your site URL with a trailing slash.
-     You may use http://portal.friendika.com/privacy as the privacy policy
-     URL unless your site has different requirements, and 
-     http://portal.friendika.com as the Terms of Service URL unless
-     you have different requirements. (Friendika is a software application
-     and does not require Terms of Service, though your installation of it might).
-  c. Set the following values in your .htconfig.php file
-        $a->config['facebook']['appid'] = 'xxxxxxxxxxx';
-        $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
-     Replace with the settings Facebook gives you.
-  d. Navigate to Set Web->Site URL & Domain -> Website Settings.  Set Site URL 
-     to yoursubdomain.yourdomain.com.  Set Site Domain to your yourdomain.com.
-2. Enable the facebook plugin by including it in .htconfig.php - e.g. 
-    $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
-3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
-   and click 'Install Facebook Connector'.
-4. This will ask you to login to Facebook and grant permission to the 
-   plugin to do its stuff. Allow it to do so. 
-5. You're done. To turn it off visit the Plugin Settings page again and
-   'Remove Facebook posting'.
-
-Vidoes and embeds will not be posted if there is no other content. Links 
-and images will be converted to a format suitable for the Facebook API and 
-long posts truncated - with a link to view the full post. 
-
-Facebook contacts will not be able to view private photos, as they are not able to
-authenticate to your site to establish identity. We will address this 
-in a future release.
diff --git a/addon/facebook/facebook.css b/addon/facebook/facebook.css
deleted file mode 100644 (file)
index 0c16433..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#facebook-enable-wrapper {
-       margin-top: 20px;
-}
-
-#facebook-disable-wrapper {
-       margin-top: 20px;
-}
-
-#facebook-post-default-form input {
-       margin-top: 20px;
-       margin-right: 20px;
-}
\ No newline at end of file
diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php
deleted file mode 100644 (file)
index 33895f8..0000000
+++ /dev/null
@@ -1,1021 +0,0 @@
-<?php
-/**
- * Name: Facebook Connector
- * Version: 1.0
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- */
-
-/**
- * Installing the Friendika/Facebook connector
- *
- * 1. register an API key for your site from developer.facebook.com
- *   a. We'd be very happy if you include "Friendika" in the application name
- *      to increase name recognition. The Friendika icons are also present
- *      in the images directory and may be uploaded as a Facebook app icon.
- *      Use images/friendika-16.jpg for the Icon and images/friendika-128.jpg for the Logo.
- *   b. The url should be your site URL with a trailing slash.
- *      You may use http://portal.friendika.com/privacy as the privacy policy
- *      URL unless your site has different requirements, and 
- *      http://portal.friendika.com as the Terms of Service URL unless
- *      you have different requirements. (Friendika is a software application
- *      and does not require Terms of Service, though your installation of it might).
- *   c. Set the following values in your .htconfig.php file
- *         $a->config['facebook']['appid'] = 'xxxxxxxxxxx';
- *         $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
- *      Replace with the settings Facebook gives you.
- *   d. Navigate to Set Web->Site URL & Domain -> Website Settings.  Set 
- *      Site URL to yoursubdomain.yourdomain.com. Set Site Domain to your 
- *      yourdomain.com.
- * 2. Enable the facebook plugin by including it in .htconfig.php - e.g. 
- *     $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
- * 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
- *    and click 'Install Facebook Connector'.
- * 4. This will ask you to login to Facebook and grant permission to the 
- *    plugin to do its stuff. Allow it to do so. 
- * 5. You're done. To turn it off visit the Plugin Settings page again and
- *    'Remove Facebook posting'.
- *
- * Vidoes and embeds will not be posted if there is no other content. Links 
- * and images will be converted to a format suitable for the Facebook API and 
- * long posts truncated - with a link to view the full post. 
- *
- * Facebook contacts will not be able to view private photos, as they are not able to
- * authenticate to your site to establish identity. We will address this 
- * in a future release.
- */
-
-define('FACEBOOK_MAXPOSTLEN', 420);
-
-
-function facebook_install() {
-       register_hook('post_local_end',   'addon/facebook/facebook.php', 'facebook_post_hook');
-       register_hook('jot_networks',     'addon/facebook/facebook.php', 'facebook_jot_nets');
-       register_hook('plugin_settings',  'addon/facebook/facebook.php', 'facebook_plugin_settings');
-       register_hook('cron',             'addon/facebook/facebook.php', 'facebook_cron');
-       register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook');
-}
-
-
-function facebook_uninstall() {
-       unregister_hook('post_local_end',   'addon/facebook/facebook.php', 'facebook_post_hook');
-       unregister_hook('jot_networks',     'addon/facebook/facebook.php', 'facebook_jot_nets');
-       unregister_hook('plugin_settings',  'addon/facebook/facebook.php', 'facebook_plugin_settings');
-       unregister_hook('cron',             'addon/facebook/facebook.php', 'facebook_cron');
-       unregister_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook');
-}
-
-
-/* declare the facebook_module function so that /facebook url requests will land here */
-
-function facebook_module() {}
-
-
-
-/* If a->argv[1] is a nickname, this is a callback from Facebook oauth requests. */
-
-function facebook_init(&$a) {
-
-       if($a->argc != 2)
-               return;
-       $nick = $a->argv[1];
-       if(strlen($nick))
-               $r = q("SELECT `uid` FROM `user` WHERE `nickname` = '%s' LIMIT 1",
-                               dbesc($nick)
-               );
-       if(! count($r))
-               return;
-
-       $uid           = $r[0]['uid'];
-       $auth_code     = (($_GET['code']) ? $_GET['code'] : '');
-       $error         = (($_GET['error_description']) ? $_GET['error_description'] : '');
-
-
-       if($error)
-               logger('facebook_init: Error: ' . $error);
-
-       if($auth_code && $uid) {
-
-               $appid = get_config('facebook','appid');
-               $appsecret = get_config('facebook', 'appsecret');
-
-               $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id='
-                       . $appid . '&client_secret=' . $appsecret . '&redirect_uri='
-                       . urlencode($a->get_baseurl() . '/facebook/' . $nick) 
-                       . '&code=' . $auth_code);
-
-               logger('facebook_init: returned access token: ' . $x, LOGGER_DATA);
-
-               if(strpos($x,'access_token=') !== false) {
-                       $token = str_replace('access_token=', '', $x);
-                       if(strpos($token,'&') !== false)
-                               $token = substr($token,0,strpos($token,'&'));
-                       set_pconfig($uid,'facebook','access_token',$token);
-                       set_pconfig($uid,'facebook','post','1');
-                       set_pconfig($uid,'facebook','no_linking',1);
-                       fb_get_self($uid);
-                       fb_get_friends($uid);
-                       fb_consume_all($uid);
-
-               }
-
-       }
-
-}
-
-
-function fb_get_self($uid) {
-       $access_token = get_pconfig($uid,'facebook','access_token');
-       if(! $access_token)
-               return;
-       $s = fetch_url('https://graph.facebook.com/me/?access_token=' . $access_token);
-       if($s) {
-               $j = json_decode($s);
-               set_pconfig($uid,'facebook','self_id',(string) $j->id);
-       }
-}
-
-
-
-function fb_get_friends($uid) {
-
-       $access_token = get_pconfig($uid,'facebook','access_token');
-
-       $no_linking = get_pconfig($uid,'facebook','no_linking');
-       if($no_linking)
-               return;
-
-       if(! $access_token)
-               return;
-       $s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token);
-       if($s) {
-               logger('facebook: fb_get_friends: ' . $s, LOGGER_DATA);
-               $j = json_decode($s);
-               logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
-               if(! $j->data)
-                       return;
-               foreach($j->data as $person) {
-                       $s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token);
-                       if($s) {
-                               $jp = json_decode($s);
-                               logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA);
-
-                               // always use numeric link for consistency
-
-                               $jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
-
-                               // check if we already have a contact
-
-                               $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
-                                       intval($uid),
-                                       dbesc($jp->link)
-                               );                      
-
-                               if(count($r)) {
-
-                                       // check that we have all the photos, this has been known to fail on occasion
-
-                                       if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) {  
-                                               require_once("Photo.php");
-
-                                               $photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']);
-
-                                               $r = q("UPDATE `contact` SET `photo` = '%s', 
-                                                       `thumb` = '%s',
-                                                       `micro` = '%s', 
-                                                       `name-date` = '%s', 
-                                                       `uri-date` = '%s', 
-                                                       `avatar-date` = '%s'
-                                                       WHERE `id` = %d LIMIT 1
-                                               ",
-                                                       dbesc($photos[0]),
-                                                       dbesc($photos[1]),
-                                                       dbesc($photos[2]),
-                                                       dbesc(datetime_convert()),
-                                                       dbesc(datetime_convert()),
-                                                       dbesc(datetime_convert()),
-                                                       intval($r[0]['id'])
-                                               );                      
-                                       }       
-                                       continue;
-                               }
-                               else {
-
-                                       // create contact record 
-                                       $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, 
-                                               `name`, `nick`, `photo`, `network`, `rel`, `priority`,
-                                               `writable`, `blocked`, `readonly`, `pending` )
-                                               VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
-                                               intval($uid),
-                                               dbesc(datetime_convert()),
-                                               dbesc($jp->link),
-                                               dbesc(''),
-                                               dbesc(''),
-                                               dbesc($jp->id),
-                                               dbesc('facebook ' . $jp->id),
-                                               dbesc($jp->name),
-                                               dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)),
-                                               dbesc('https://graph.facebook.com/' . $jp->id . '/picture'),
-                                               dbesc(NETWORK_FACEBOOK),
-                                               intval(CONTACT_IS_FRIEND),
-                                               intval(1),
-                                               intval(1)
-                                       );
-                               }
-
-                               $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
-                                       dbesc($jp->link),
-                                       intval($uid)
-                               );
-
-                               if(! count($r)) {
-                                       continue;
-                               }
-
-                               $contact = $r[0];
-                               $contact_id  = $r[0]['id'];
-
-                               require_once("Photo.php");
-
-                               $photos = import_profile_photo($r[0]['photo'],$uid,$contact_id);
-
-                               $r = q("UPDATE `contact` SET `photo` = '%s', 
-                                       `thumb` = '%s',
-                                       `micro` = '%s', 
-                                       `name-date` = '%s', 
-                                       `uri-date` = '%s', 
-                                       `avatar-date` = '%s'
-                                       WHERE `id` = %d LIMIT 1
-                               ",
-                                       dbesc($photos[0]),
-                                       dbesc($photos[1]),
-                                       dbesc($photos[2]),
-                                       dbesc(datetime_convert()),
-                                       dbesc(datetime_convert()),
-                                       dbesc(datetime_convert()),
-                                       intval($contact_id)
-                               );                      
-
-                       }
-               }
-       }
-}
-
-// This is the POST method to the facebook settings page
-// Content is posted to Facebook in the function facebook_post_hook() 
-
-function facebook_post(&$a) {
-
-       $uid = local_user();
-       if($uid){
-
-               $value = ((x($_POST,'post_by_default')) ? intval($_POST['post_by_default']) : 0);
-               set_pconfig($uid,'facebook','post_by_default', $value);
-
-               $no_linking = get_pconfig($uid,'facebook','no_linking');
-
-               $linkvalue = ((x($_POST,'facebook_linking')) ? intval($_POST['facebook_linking']) : 0);
-               set_pconfig($uid,'facebook','no_linking', (($linkvalue) ? 0 : 1));
-
-               // FB linkage was allowed but has just been turned off - remove all FB contacts and posts
-
-               if((! intval($no_linking)) && (! intval($linkvalue))) {
-                       $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `network` = '%s' ",
-                               intval($uid),
-                               dbesc(NETWORK_FACEBOOK)
-                       );
-                       if(count($r)) {
-                               require_once('include/Contact.php');
-                               foreach($r as $rr)
-                                       contact_remove($rr['id']);
-                       }
-               }
-               elseif(intval($no_linking) && intval($linkvalue)) {
-                       // FB linkage is now allowed - import stuff.
-                       fb_get_self($uid);
-                       fb_get_friends($uid);
-                       fb_consume_all($uid);
-               }
-
-               info( t('Settings updated.') . EOL);
-       } 
-
-       return;         
-}
-
-// Facebook settings form
-
-function facebook_content(&$a) {
-
-       if(! local_user()) {
-               notice( t('Permission denied.') . EOL);
-               return '';
-       }
-
-       if($a->argc > 1 && $a->argv[1] === 'remove') {
-               del_pconfig(local_user(),'facebook','post');
-               info( t('Facebook disabled') . EOL);
-       }
-
-       if($a->argc > 1 && $a->argv[1] === 'friends') {
-               fb_get_friends(local_user());
-               info( t('Updating contacts') . EOL);
-       }
-
-
-       $fb_installed = get_pconfig(local_user(),'facebook','post');
-
-       $appid = get_config('facebook','appid');
-
-       if(! $appid) {
-               notice( t('Facebook API key is missing.') . EOL);
-               return '';
-       }
-
-       $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' 
-               . $a->get_baseurl() . '/addon/facebook/facebook.css' . '" media="all" />' . "\r\n";
-
-       $o .= '<h3>' . t('Facebook Connect') . '</h3>';
-
-       if(! $fb_installed) { 
-               $o .= '<div id="facebook-enable-wrapper">';
-
-               $o .= '<a href="https://www.facebook.com/dialog/oauth?client_id=' . $appid . '&redirect_uri=' 
-                       . $a->get_baseurl() . '/facebook/' . $a->user['nickname'] . '&scope=publish_stream,read_stream,offline_access">' . t('Install Facebook connector for this account.') . '</a>';
-               $o .= '</div>';
-       }
-
-       if($fb_installed) {
-               $o .= '<div id="facebook-disable-wrapper">';
-
-               $o .= '<a href="' . $a->get_baseurl() . '/facebook/remove' . '">' . t('Remove Facebook connector') . '</a></div>';
-       
-               $o .= '<div id="facebook-post-default-form">';
-               $o .= '<form action="facebook" method="post" >';
-               $post_by_default = get_pconfig(local_user(),'facebook','post_by_default');
-               $checked = (($post_by_default) ? ' checked="checked" ' : '');
-               $o .= '<input type="checkbox" name="post_by_default" value="1"' . $checked . '/>' . ' ' . t('Post to Facebook by default') . EOL;
-
-               $no_linking = get_pconfig(local_user(),'facebook','no_linking');
-               $checked = (($no_linking) ? '' : ' checked="checked" ');
-               $o .= '<input type="checkbox" name="facebook_linking" value="1"' . $checked . '/>' . ' ' . t('Link all your Facebook friends and conversations') . EOL ;
-
-               $hidden = (($a->user['hidewall'] || get_config('system','block_public')) ? true : false);
-               if(! $hidden) {
-                       $o .= EOL;
-                       $o .= t('Warning: Your Facebook privacy settings can not be imported.') . EOL;
-                       $o .= t('Linked Facebook items <strong>may</strong> be publicly visible, depending on your privacy settings for this website/account.') . EOL;
-               }
-               $o .= '<input type="submit" name="submit" value="' . t('Submit') . '" /></form></div>';
-       }
-
-       return $o;
-}
-
-
-
-function facebook_cron($a,$b) {
-
-       $last = get_config('facebook','last_poll');
-       
-       $poll_interval = intval(get_config('facebook','poll_interval'));
-       if(! $poll_interval)
-               $poll_interval = 3600;
-
-       if($last) {
-               $next = $last + $poll_interval;
-               if($next > time()) 
-                       return;
-       }
-
-       logger('facebook_cron');
-
-
-       // Find the FB users on this site and randomize in case one of them
-       // uses an obscene amount of memory. It may kill this queue run
-       // but hopefully we'll get a few others through on each run. 
-
-       $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' ORDER BY RAND() ");
-       if(count($r)) {
-               foreach($r as $rr) {
-                       if(get_pconfig($rr['uid'],'facebook','no_linking'))
-                               continue;
-                       // check for new friends once a day
-                       $last_friend_check = get_pconfig($rr['uid'],'facebook','friend_check');
-                       if($last_friend_check) 
-                               $next_friend_check = $last_friend_check + 86400;
-                       if($next_friend_check <= time()) {
-                               fb_get_friends($rr['uid']);
-                               set_pconfig($rr['uid'],'facebook','friend_check',time());
-                       }
-                       fb_consume_all($rr['uid']);
-               }
-       }       
-
-       set_config('facebook','last_poll', time());
-
-}
-
-
-
-function facebook_plugin_settings(&$a,&$b) {
-
-       $b .= '<div class="settings-block">';
-       $b .= '<h3>' . t('Facebook') . '</h3>';
-       $b .= '<a href="facebook">' . t('Facebook Connector Settings') . '</a><br />';
-       $b .= '</div>';
-
-}
-
-function facebook_jot_nets(&$a,&$b) {
-       if(! local_user())
-               return;
-
-       $fb_post = get_pconfig(local_user(),'facebook','post');
-       if(intval($fb_post) == 1) {
-               $fb_defpost = get_pconfig(local_user(),'facebook','post_by_default');
-               $selected = ((intval($fb_defpost) == 1) ? ' checked="checked" ' : '');
-               $b .= '<div class="profile-jot-net"><input type="checkbox" name="facebook_enable"' . $selected . 'value="1" /> ' 
-                       . t('Post to Facebook') . '</div>';     
-       }
-}
-
-
-function facebook_post_hook(&$a,&$b) {
-
-       /**
-        * Post to Facebook stream
-        */
-
-       require_once('include/group.php');
-
-       logger('Facebook post');
-
-       $reply = false;
-       $likes = false;
-
-       if((local_user()) && (local_user() == $b['uid'])) {
-
-               // Facebook is not considered a private network
-               if($b['prvnets'] && $b['private'])
-                       return;
-
-               if($b['parent']) {
-                       $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
-                               intval($b['parent']),
-                               intval(local_user())
-                       );
-                       if(count($r) && substr($r[0]['uri'],0,4) === 'fb::')
-                               $reply = substr($r[0]['uri'],4);
-                       elseif(count($r) && substr($r[0]['extid'],0,4) === 'fb::')
-                               $reply = substr($r[0]['extid'],4);
-                       else
-                               return;
-                       logger('facebook reply id=' . $reply);
-               }
-
-               if($b['private'] && $reply === false) {
-                       $allow_people = expand_acl($b['allow_cid']);
-                       $allow_groups = expand_groups(expand_acl($b['allow_gid']));
-                       $deny_people  = expand_acl($b['deny_cid']);
-                       $deny_groups  = expand_groups(expand_acl($b['deny_gid']));
-
-                       $recipients = array_unique(array_merge($allow_people,$allow_groups));
-                       $deny = array_unique(array_merge($deny_people,$deny_groups));
-
-                       $allow_str = dbesc(implode(', ',$recipients));
-                       if($allow_str) {
-                               $r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $allow_str ) AND `network` = 'face'"); 
-                               $allow_arr = array();
-                               if(count($r)) 
-                                       foreach($r as $rr)
-                                               $allow_arr[] = $rr['notify'];
-                       }
-
-                       $deny_str = dbesc(implode(', ',$deny));
-                       if($deny_str) {
-                               $r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $deny_str ) AND `network` = 'face'"); 
-                               $deny_arr = array();
-                               if(count($r)) 
-                                       foreach($r as $rr)
-                                               $deny_arr[] = $rr['notify'];
-                       }
-
-                       if(count($deny_arr) && (! count($allow_arr))) {
-
-                               // One or more FB folks were denied access but nobody on FB was specifically allowed access.
-                               // This might cause the post to be open to public on Facebook, but only to selected members
-                               // on another network. Since this could potentially leak a post to somebody who was denied, 
-                               // we will skip posting it to Facebook with a slightly vague but relevant message that will 
-                               // hopefully lead somebody to this code comment for a better explanation of what went wrong.
-
-                               notice( t('Post to Facebook cancelled because of multi-network access permission conflict.') . EOL);
-                               return;
-                       }
-
-
-                       // if it's a private message but no Facebook members are allowed or denied, skip Facebook post
-
-                       if((! count($allow_arr)) && (! count($deny_arr)))
-                               return;
-               }
-
-               if($b['verb'] == ACTIVITY_LIKE)
-                       $likes = true;                          
-
-
-               $appid  = get_config('facebook', 'appid'  );
-               $secret = get_config('facebook', 'appsecret' );
-
-               if($appid && $secret) {
-
-                       logger('facebook: have appid+secret');
-
-                       $fb_post   = intval(get_pconfig(local_user(),'facebook','post'));
-                       $fb_enable = (($fb_post && x($_POST,'facebook_enable')) ? intval($_POST['facebook_enable']) : 0);
-                       $fb_token  = get_pconfig(local_user(),'facebook','access_token');
-
-                       // if API is used, default to the chosen settings
-                       if($_POST['api_source'] && intval(get_pconfig(local_user(),'facebook','post_by_default')))
-                               $fb_enable = 1;
-
-
-
-
-                       logger('facebook: $fb_post: ' . $fb_post . ' $fb_enable: ' . $fb_enable . ' $fb_token: ' . $fb_token,LOGGER_DEBUG); 
-
-                       // post to facebook if it's a public post and we've ticked the 'post to Facebook' box, 
-                       // or it's a private message with facebook participants
-                       // or it's a reply or likes action to an existing facebook post                 
-
-                       if($fb_post && $fb_token && ($fb_enable || $b['private'] || $reply)) {
-                               logger('facebook: able to post');
-                               require_once('library/facebook.php');
-                               require_once('include/bbcode.php');     
-
-                               $msg = $b['body'];
-
-                               logger('Facebook post: original msg=' . $msg, LOGGER_DATA);
-
-                               // make links readable before we strip the code
-
-                               // unless it's a dislike - just send the text as a comment
-
-                               if($b['verb'] == ACTIVITY_DISLIKE)
-                                       $msg = trim(strip_tags(bbcode($msg)));
-
-                               $search_str = $a->get_baseurl() . '/search';
-
-                               if(preg_match("/\[url=(.*?)\](.*?)\[\/url\]/is",$msg,$matches)) {
-
-                                       // don't use hashtags for message link
-
-                                       if(strpos($matches[2],$search_str) === false) {
-                                               $link = $matches[1];
-                                               if(substr($matches[2],0,5) != '[img]')
-                                                       $linkname = $matches[2];
-                                       }
-                               }
-
-                               $msg = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/is",'$2 $1',$msg);
-
-                               if(preg_match("/\[img\](.*?)\[\/img\]/is",$msg,$matches))
-                                       $image = $matches[1];
-
-                               $msg = preg_replace("/\[img\](.*?)\[\/img\]/is", t('Image: ') . '$1', $msg);
-
-                               if((strpos($link,z_root()) !== false) && (! $image))
-                                       $image = $a->get_baseurl() . '/images/friendika-64.jpg';
-
-                               $msg = trim(strip_tags(bbcode($msg)));
-                               $msg = html_entity_decode($msg,ENT_QUOTES,'UTF-8');
-
-                               // add any attachments as text urls
-
-                           $arr = explode(',',$b['attach']);
-
-                           if(count($arr)) {
-                                       $msg .= "\n";
-                               foreach($arr as $r) {
-                               $matches = false;
-                                               $cnt = preg_match('|\[attach\]href=\"(.*?)\" size=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches);
-                                               if($cnt) {
-                                                       $msg .= $matches[1];
-                                               }
-                                       }
-                               }
-
-                               if (strlen($msg) > FACEBOOK_MAXPOSTLEN) {
-                                       $shortlink = "";
-                                       require_once('library/slinky.php');
-
-                                       $display_url = $a->get_baseurl() . '/display/' . $a->user['nickname'] . '/' . $b['id'];
-                                       $slinky = new Slinky( $display_url );
-                                       // setup a cascade of shortening services
-                                       // try to get a short link from these services
-                                       // in the order ur1.ca, trim, id.gd, tinyurl
-                                       $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
-                                       $shortlink = $slinky->short();
-                                       // the new message will be shortened such that "... $shortlink"
-                                       // will fit into the character limit
-                                       $msg = substr($msg, 0, FACEBOOK_MAXPOSTLEN - strlen($shortlink) - 4);
-                                       $msg .= '... ' . $shortlink;
-                               }
-                               if(! strlen($msg))
-                                       return;
-
-                               logger('Facebook post: msg=' . $msg, LOGGER_DATA);
-
-                               if($likes) { 
-                                       $postvars = array('access_token' => $fb_token);
-                               }
-                               else {
-                                       $postvars = array(
-                                               'access_token' => $fb_token, 
-                                               'message' => $msg
-                                       );
-                                       if(isset($image))
-                                               $postvars['picture'] = $image;
-                                       if(isset($link))
-                                               $postvars['link'] = $link;
-                                       if(isset($linkname))
-                                               $postvars['name'] = $linkname;
-                               }
-
-                               if(($b['private']) && (! $b['parent'])) {
-                                       $postvars['privacy'] = '{"value": "CUSTOM", "friends": "SOME_FRIENDS"';
-                                       if(count($allow_arr))
-                                               $postvars['privacy'] .= ',"allow": "' . implode(',',$allow_arr) . '"';
-                                       if(count($deny_arr))
-                                               $postvars['privacy'] .= ',"deny": "' . implode(',',$deny_arr) . '"';
-                                       $postvars['privacy'] .= '}';
-
-                               }
-
-                               if($reply) {
-                                       $url = 'https://graph.facebook.com/' . $reply . '/' . (($likes) ? 'likes' : 'comments');
-                               }
-                               else { 
-                                       $url = 'https://graph.facebook.com/me/feed';
-                                       if($b['plink'])
-                                               $postvars['actions'] = '{"name": "' . t('View on Friendika') . '", "link": "' .  $b['plink'] . '"}';
-                               }
-
-                               logger('facebook: post to ' . $url);
-                               logger('facebook: postvars: ' . print_r($postvars,true));
-
-                               // "test_mode" prevents anything from actually being posted.
-                               // Otherwise, let's do it. 
-
-                               if(! get_config('facebook','test_mode')) {
-                                       $x = post_url($url, $postvars);
-
-                                       $retj = json_decode($x);
-                                       if($retj->id) {
-                                               q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d LIMIT 1",
-                                                       dbesc('fb::' . $retj->id),
-                                                       intval($b['id'])
-                                               );
-                                       }
-                                       else {
-                                               if(! $likes) {
-                                                       $s = serialize(array('url' => $url, 'item' => $b['id'], 'post' => $postvars));
-                                                       q("INSERT INTO `queue` ( `network`, `cid`, `created`, `last`, `content`)
-                                                               VALUES ( '%s', %d, '%s', '%s', '%s') ",
-                                                               dbesc(NETWORK_FACEBOOK),
-                                                               intval($a->contact),
-                                                               dbesc(datetime_convert()),
-                                                               dbesc(datetime_convert()),
-                                                               dbesc($s)
-                                                       );                                                              
-
-                                                       notice( t('Facebook post failed. Queued for retry.') . EOL);
-                                               }
-                                       }
-                                       
-                                       logger('Facebook post returns: ' . $x, LOGGER_DEBUG);
-                               }
-                       }
-               }
-       }
-}
-
-
-function fb_queue_hook(&$a,&$b) {
-
-       $qi = q("SELECT * FROM `queue` WHERE `network` = '%s'",
-               dbesc(NETWORK_FACEBOOK)
-       );
-       if(! count($qi))
-               return;
-
-       require_once('include/queue_fn.php');
-
-       foreach($qi as $x) {
-               if($x['network'] !== NETWORK_FACEBOOK)
-                       continue;
-
-               logger('facebook_queue: run');
-
-               $r = q("SELECT `user`.* FROM `user` LEFT JOIN `contact` on `contact`.`uid` = `user`.`uid` 
-                       WHERE `contact`.`self` = 1 AND `contact`.`id` = %d LIMIT 1",
-                       intval($x['cid'])
-               );
-               if(! count($r))
-                       continue;
-
-               $user = $r[0];
-
-               $appid  = get_config('facebook', 'appid'  );
-               $secret = get_config('facebook', 'appsecret' );
-
-               if($appid && $secret) {
-                       $fb_post   = intval(get_pconfig($user['uid'],'facebook','post'));
-                       $fb_token  = get_pconfig($user['uid'],'facebook','access_token');
-
-                       if($fb_post && $fb_token) {
-                               logger('facebook_queue: able to post');
-                               require_once('library/facebook.php');
-
-                               $z = unserialize($x['content']);
-                               $item = $z['item'];
-                               $j = post_url($z['url'],$z['post']);
-
-                               $retj = json_decode($j);
-                               if($retj->id) {
-                                       q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d LIMIT 1",
-                                               dbesc('fb::' . $retj->id),
-                                               intval($item)
-                                       );
-                                       logger('facebook_queue: success: ' . $j); 
-                                       remove_queue_item($x['id']);
-                               }
-                               else {
-                                       logger('facebook_queue: failed: ' . $j);
-                                       update_queue_time($x['id']);
-                               }
-                       }
-               }
-       }
-}
-
-function fb_consume_all($uid) {
-
-       require_once('include/items.php');
-
-       $access_token = get_pconfig($uid,'facebook','access_token');
-       if(! $access_token)
-               return;
-       
-
-       $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
-       if($s) {
-               $j = json_decode($s);
-               logger('fb_consume_stream: wall: ' . print_r($j,true), LOGGER_DATA);
-               fb_consume_stream($uid,$j,true);
-       }
-       $s = fetch_url('https://graph.facebook.com/me/home?access_token=' . $access_token);
-       if($s) {
-               $j = json_decode($s);
-               logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA);
-               fb_consume_stream($uid,$j,false);
-       }
-
-}
-
-function fb_consume_stream($uid,$j,$wall = false) {
-       $a = get_app();
-
-       $no_linking = get_pconfig($uid,'facebook','no_linking');
-       if($no_linking)
-               return;
-
-       $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
-               intval($uid)
-       );
-
-       $user = q("SELECT `nickname`, `blockwall` FROM `user` WHERE `uid` = %d LIMIT 1",
-               intval($uid)
-       );
-       if(count($user))
-               $my_local_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname'];
-
-       $self_id = get_pconfig($uid,'facebook','self_id');
-       if(! count($j->data) || (! strlen($self_id)))
-               return;
-
-       foreach($j->data as $entry) {
-               logger('fb_consume: entry: ' . print_r($entry,true), LOGGER_DATA);
-               $datarray = array();
-
-               $r = q("SELECT * FROM `item` WHERE ( `uri` = '%s' OR `extid` = '%s') AND `uid` = %d LIMIT 1",
-                               dbesc('fb::' . $entry->id),
-                               dbesc('fb::' . $entry->id),
-                               intval($uid)
-               );
-               if(count($r)) {
-                       $post_exists = true;
-                       $orig_post = $r[0];
-                       $top_item = $r[0]['id'];
-               }
-               else {
-                       $post_exists = false;
-                       $orig_post = null;
-               }
-
-               if(! $orig_post) {
-                       $datarray['gravity'] = 0;
-                       $datarray['uid'] = $uid;
-                       $datarray['wall'] = (($wall) ? 1 : 0);
-                       $datarray['uri'] = $datarray['parent-uri'] = 'fb::' . $entry->id;
-                       $from = $entry->from;
-                       if($from->id == $self_id)
-                               $datarray['contact-id'] = $self[0]['id'];
-                       else {
-                               $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
-                                       dbesc($from->id),
-                                       intval($uid)
-                               );
-                               if(count($r))
-                                       $datarray['contact-id'] = $r[0]['id'];
-                       }
-
-                       // don't store post if we don't have a contact
-
-                       if(! x($datarray,'contact-id')) {
-                               logger('no contact: post ignored');
-                               continue; 
-                       }
-
-                       $datarray['verb'] = ACTIVITY_POST;                                              
-                       if($wall) {
-                               $datarray['owner-name'] = $self[0]['name'];
-                               $datarray['owner-link'] = $self[0]['url'];
-                               $datarray['owner-avatar'] = $self[0]['thumb'];
-                       }
-                       if(isset($entry->application) && isset($entry->application->name) && strlen($entry->application->name))
-                               $datarray['app'] = strip_tags($entry->application->name);
-                       else
-                               $datarray['app'] = 'facebook';
-                       $datarray['author-name'] = $from->name;
-                       $datarray['author-link'] = 'http://facebook.com/profile.php?id=' . $from->id;
-                       $datarray['author-avatar'] = 'https://graph.facebook.com/' . $from->id . '/picture';
-                       $datarray['plink'] = $datarray['author-link'] . '&v=wall&story_fbid=' . substr($entry->id,strpos($entry->id,'_') + 1);
-
-                       $datarray['body'] = $entry->message;
-                       if($entry->picture)
-                               $datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]';
-                       if($entry->link)
-                               $datarray['body'] .= "\n" . linkify($entry->link);
-                       if($entry->name)
-                               $datarray['body'] .= "\n" . $entry->name;
-                       if($entry->caption)
-                               $datarray['body'] .= "\n" . $entry->caption;
-                       if($entry->description)
-                               $datarray['body'] .= "\n" . $entry->description;
-                       $datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time);
-                       $datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time);
-
-                       // If the entry has a privacy policy, we cannot assume who can or cannot see it,
-                       // as the identities are from a foreign system. Mark it as private to the owner.
-
-                       if($entry->privacy && $entry->privacy->value !== 'EVERYONE') {
-                               $datarray['private'] = 1;
-                               $datarray['allow_cid'] = '<' . $uid . '>';
-                       }
-                       
-                       $top_item = item_store($datarray);
-                       $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
-                               intval($top_item),
-                               intval($uid)
-                       );                      
-                       if(count($r)) {
-                               $orig_post = $r[0];
-                               logger('fb: new top level item posted');
-                       }
-               }
-
-               if(isset($entry->likes) && isset($entry->likes->data))
-                       $likers = $entry->likes->data;
-               else
-                       $likers = null;
-
-               if(isset($entry->comments) && isset($entry->comments->data))
-                       $comments = $entry->comments->data;
-               else
-                       $comments = null;
-
-               if(is_array($likers)) {
-                       foreach($likers as $likes) {
-
-                               if(! $orig_post)
-                                       continue;
-
-                               // If we posted the like locally, it will be found with our url, not the FB url.
-
-                               $second_url = (($likes->id == $self_id) ? $self[0]['url'] : 'http://facebook.com/profile.php?id=' . $likes->id); 
-
-                               $r = q("SELECT * FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `verb` = '%s' 
-                                       AND ( `author-link` = '%s' OR `author-link` = '%s' ) LIMIT 1",
-                                       dbesc($orig_post['uri']),
-                                       intval($uid),
-                                       dbesc(ACTIVITY_LIKE),
-                                       dbesc('http://facebook.com/profile.php?id=' . $likes->id),
-                                       dbesc($second_url)
-                               );
-
-                               if(count($r))
-                                       continue;
-                                       
-                               $likedata = array();
-                               $likedata['parent'] = $top_item;
-                               $likedata['verb'] = ACTIVITY_LIKE;
-                               $likedata['gravity'] = 3;
-                               $likedata['uid'] = $uid;
-                               $likedata['wall'] = (($wall) ? 1 : 0);
-                               $likedata['uri'] = item_new_uri($a->get_baseurl(), $uid);
-                               $likedata['parent-uri'] = $orig_post['uri'];
-                               if($likes->id == $self_id)
-                                       $likedata['contact-id'] = $self[0]['id'];
-                               else {
-                                       $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
-                                               dbesc($likes->id),
-                                               intval($uid)
-                                       );
-                                       if(count($r))
-                                               $likedata['contact-id'] = $r[0]['id'];
-                               }
-                               if(! x($likedata,'contact-id'))
-                                       $likedata['contact-id'] = $orig_post['contact-id'];
-
-                               $likedata['app'] = 'facebook';
-                               $likedata['verb'] = ACTIVITY_LIKE;                                              
-                               $likedata['author-name'] = $likes->name;
-                               $likedata['author-link'] = 'http://facebook.com/profile.php?id=' . $likes->id;
-                               $likedata['author-avatar'] = 'https://graph.facebook.com/' . $likes->id . '/picture';
-                               
-                               $author  = '[url=' . $likedata['author-link'] . ']' . $likedata['author-name'] . '[/url]';
-                               $objauthor =  '[url=' . $orig_post['author-link'] . ']' . $orig_post['author-name'] . '[/url]';
-                               $post_type = t('status');
-                       $plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]';
-                               $likedata['object-type'] = ACTIVITY_OBJ_NOTE;
-
-                               $likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink);
-                               $likedata['object'] = '<object><type>' . ACTIVITY_OBJ_NOTE . '</type><local>1</local>' . 
-                                       '<id>' . $orig_post['uri'] . '</id><link>' . xmlify('<link rel="alternate" type="text/html" href="' . xmlify($orig_post['plink']) . '" />') . '</link><title>' . $orig_post['title'] . '</title><content>' . $orig_post['body'] . '</content></object>';  
-
-                               $item = item_store($likedata);                  
-                       }
-               }
-               if(is_array($comments)) {
-                       foreach($comments as $cmnt) {
-
-                               if(! $orig_post)
-                                       continue;
-
-                               $r = q("SELECT * FROM `item` WHERE `uid` = %d AND ( `uri` = '%s' OR `extid` = '%s' ) LIMIT 1",
-                                       intval($uid),
-                                       dbesc('fb::' . $cmnt->id),
-                                       dbesc('fb::' . $cmnt->id)
-                               );
-                               if(count($r))
-                                       continue;
-
-                               $cmntdata = array();
-                               $cmntdata['parent'] = $top_item;
-                               $cmntdata['verb'] = ACTIVITY_POST;
-                               $cmntdata['gravity'] = 6;
-                               $cmntdata['uid'] = $uid;
-                               $cmntdata['wall'] = (($wall) ? 1 : 0);
-                               $cmntdata['uri'] = 'fb::' . $cmnt->id;
-                               $cmntdata['parent-uri'] = $orig_post['uri'];
-                               if($cmnt->from->id == $self_id) {
-                                       $cmntdata['contact-id'] = $self[0]['id'];
-                               }
-                               else {
-                                       $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d LIMIT 1",
-                                               dbesc($cmnt->from->id),
-                                               intval($uid)
-                                       );
-                                       if(count($r)) {
-                                               $cmntdata['contact-id'] = $r[0]['id'];
-                                               if($r[0]['blocked'] || $r[0]['readonly'])
-                                                       continue;
-                                       }
-                               }
-                               if(! x($cmntdata,'contact-id'))
-                                       $cmntdata['contact-id'] = $orig_post['contact-id'];
-
-                               $cmntdata['app'] = 'facebook';
-                               $cmntdata['created'] = datetime_convert('UTC','UTC',$cmnt->created_time);
-                               $cmntdata['edited']  = datetime_convert('UTC','UTC',$cmnt->created_time);
-                               $cmntdata['verb'] = ACTIVITY_POST;                                              
-                               $cmntdata['author-name'] = $cmnt->from->name;
-                               $cmntdata['author-link'] = 'http://facebook.com/profile.php?id=' . $cmnt->from->id;
-                               $cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture';
-                               $cmntdata['body'] = $cmnt->message;
-                               $item = item_store($cmntdata);                  
-                       }
-               }
-       }
-}
-
diff --git a/addon/fortunate/fortunate.css b/addon/fortunate/fortunate.css
deleted file mode 100644 (file)
index 61813b7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.fortunate {
-       margin-top: 25px;
-       margin-left: 100px;
-       margin-bottom: 25px;
-       color: #000088;
-       font-size: 14px;
-}
\ No newline at end of file
diff --git a/addon/fortunate/fortunate.php b/addon/fortunate/fortunate.php
deleted file mode 100644 (file)
index 5a6302e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Name: Fortunate
- * Description: Add a random fortune cookie at the bottom of every pages.
- * Version: 1.0
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- */
-
-
-function fortunate_install() {
-       register_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch');
-}
-
-function fortunate_uninstall() {
-       unregister_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch');
-}
-
-
-function fortunate_fetch($a,&$b) {
-
-       $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' 
-               . $a->get_baseurl() . '/addon/fortunate/fortunate.css' . '" media="all" />' . "\r\n";
-
-       $s = fetch_url('http://fortunemod.com/cookie.php?numlines=2&equal=1&rand=' . mt_rand());
-       $b .= '<div class="fortunate">' . $s . '</div>';
-}
-
diff --git a/addon/impressum/README b/addon/impressum/README
deleted file mode 100644 (file)
index 9a38c0b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Impressum Plugin for Friendika
-
-Author: Tobias Diekershoff
-        tobias.diekershoff@gmx.net
-
-License: 3-clause BSD license (same as Friendika)
-
-About
-  This plugin adds an Impressum block to the /friendika page with informations
-  about the page operator/owner and how to countact you in case of any questions.
-
-  In the notes and postal fields you can use HTML tags for formatting.
-
-Configuration:
-  For configuration you can set the following variables in the .htconfig file
-   * $a->config['impressum']['owner']           this is the Name of the Operator
-   * $a->config['impressum']['ownerprofile']    this is an optional Friendika account
-                                                where the above owner name will link to
-   * $a->config['impressum']['email']           a contact email address (optional)
-                                                will be displayed slightly obfuscated
-                                                as name(at)example(dot)com
-   * $a->config['impressum']['postal']          should contain a postal address where
-                                                you can be reached at (optional)
-   * $a->config['impressum']['notes']           additional informations that should
-                                                be displayed in the Impressum block
-
diff --git a/addon/impressum/admin.tpl b/addon/impressum/admin.tpl
deleted file mode 100644 (file)
index cfba8df..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-{{ inc field_input.tpl with $field=$owner }}{{ endinc }}
-{{ inc field_input.tpl with $field=$ownerprofile }}{{ endinc }}
-{{ inc field_input.tpl with $field=$postal }}{{ endinc }}
-{{ inc field_input.tpl with $field=$notes }}{{ endinc }}
-{{ inc field_input.tpl with $field=$email }}{{ endinc }}
-<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
diff --git a/addon/impressum/impressum.php b/addon/impressum/impressum.php
deleted file mode 100644 (file)
index b760c7e..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/**
- * Name: Impressum
- * Description: Plugin to add contact information to the about page (/friendika)
- * Version: 1.0
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
- * License: 3-clause BSD license
- */
-
-function impressum_install() {
-    register_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show');
-    logger("installed impressum plugin");
-}
-
-function impressum_uninstall() {
-    unregister_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show');
-    logger("uninstalled impressum plugin");
-}
-function obfuscate_email ($s) {
-    $s = str_replace('@','(at)',$s);
-    $s = str_replace('.','(dot)',$s);
-    return $s;
-}
-function impressum_show($a,&$b) {
-    $b .= '<h3>'.t('Impressum').'</h3>';
-    $owner = get_config('impressum', 'owner');
-    $owner_profile = get_config('impressum','ownerprofile');
-    $postal = get_config('impressum', 'postal');
-    $notes = get_config('impressum', 'notes');
-    $email = obfuscate_email( get_config('impressum','email') );
-    if (strlen($owner)) {
-        if (strlen($owner_profile)) {
-            $tmp = '<a href="'.$owner_profile.'">'.$owner.'</a>';
-        } else {
-            $tmp = $owner;
-        }
-        if (strlen($email)) {
-            $b .= '<p><strong>'.t('Site Owner').'</strong>: '. $tmp .'<br /><strong>'.t('Email Address').'</strong>: '.$email.'</p>';
-        } else {
-            $b .= '<p><strong>'.t('Site Owner').'</strong>: '. $tmp .'</p>';
-        }
-        if (strlen($postal)) {
-            $b .= '<p><strong>'.t('Postal Address').'</strong><br />'. $postal .'</p>';
-        }
-        if (strlen($notes)) {
-            $b .= '<p>'.$notes.'</p>';
-        }
-    } else {
-        $b .= '<p>'.t('The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon.').'</p>';
-    }
-}
-
-function impressum_plugin_admin_post (&$a) {
-    $owner = ((x($_POST, 'owner')) ? notags(trim($_POST['owner'])) : '');
-    $ownerprofile = ((x($_POST, 'ownerprofile')) ? notags(trim($_POST['ownerprofile'])) : '');
-    $postal = ((x($_POST, 'postal')) ? (trim($_POST['postal'])) : '');
-    $notes = ((x($_POST, 'notes')) ? (trim($_POST['notes'])) : '');
-    $email = ((x($_POST, 'email')) ? notags(trim($_POST['email'])) : '');
-    set_config('impressum','owner',$owner);
-    set_config('impressum','ownerprofile',$ownerprofile);
-    set_config('impressum','postal',$postal);
-    set_config('impressum','email',$email);
-    set_config('impressum','notes',$notes);
-    info( t('Settings updated.'). EOL );
-}
-function impressum_plugin_admin (&$a, &$o) {
-    $t = file_get_contents( dirname(__file__). "/admin.tpl" );
-    $o = replace_macros($t, array(
-        '$submit' => t('Submit'),
-        '$owner' => array('owner', t('Site Owner'), get_config('impressum','owner'), ''),
-        '$ownerprofile' => array('ownerprofile', t('Site Owners Profile'), get_config('impressum','ownerprofile'), ''),
-        '$postal' => array('postal', t('Postal Address'), get_config('impressum','postal'), ''),
-        '$notes' => array('notes', t('Notes'), get_config('impressum','notes'), ''),
-        '$email' => array('email', t('Email Address'), get_config('impressum','email'), ''),
-    ));
-}
diff --git a/addon/js_upload/file-uploader/client/demo.htm b/addon/js_upload/file-uploader/client/demo.htm
deleted file mode 100644 (file)
index 2a0cd6d..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-       <link href="fileuploader.css" rel="stylesheet" type="text/css"> 
-    <style>            
-               body {font-size:13px; font-family:arial, sans-serif; width:700px; margin:100px auto;}
-    </style>   
-</head>
-<body>         
-    <p><a href="http://github.com/valums/file-uploader">Back to project page</a></p>
-    
-       <p>To upload a file, click on the button below. Drag-and-drop is supported in FF, Chrome.</p>
-       <p>Progress-bar is supported in FF3.6+, Chrome6+, Safari4+</p>
-       
-       <div id="file-uploader-demo1">          
-               <noscript>                      
-                       <p>Please enable JavaScript to use file uploader.</p>
-                       <!-- or put a simple form for upload here -->
-               </noscript>         
-       </div>
-    
-    <script src="fileuploader.js" type="text/javascript"></script>
-    <script>        
-        function createUploader(){            
-            var uploader = new qq.FileUploader({
-                element: document.getElementById('file-uploader-demo1'),
-                action: 'do-nothing.htm',
-                debug: true
-            });           
-        }
-        
-        // in your app create uploader as soon as the DOM is ready
-        // don't wait for the window to load  
-        window.onload = createUploader;     
-    </script>    
-</body>
-</html>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/client/do-nothing.htm b/addon/js_upload/file-uploader/client/do-nothing.htm
deleted file mode 100644 (file)
index 0da1905..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{success:true}
diff --git a/addon/js_upload/file-uploader/client/fileuploader.css b/addon/js_upload/file-uploader/client/fileuploader.css
deleted file mode 100644 (file)
index 0e3f111..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-.qq-uploader { position:relative; width: 100%;}
-
-.qq-upload-button {
-    display:block; /* or inline-block */
-    width: 105px; padding: 7px 0; text-align:center;    
-    background:#880000; border-bottom:1px solid #ddd;color:#fff;
-}
-.qq-upload-button-hover {background:#cc0000;}
-.qq-upload-button-focus {outline:1px dotted black;}
-
-.qq-upload-drop-area {
-    position:absolute; top:0; left:0; width:100%; height:100%; min-height: 70px; z-index:2;
-    background:#FF9797; text-align:center; 
-}
-.qq-upload-drop-area span {
-    display:block; position:absolute; top: 50%; width:100%; margin-top:-8px; font-size:16px;
-}
-.qq-upload-drop-area-active {background:#FF7171;}
-
-.qq-upload-list {margin:15px 35px; padding:0; list-style:disc;}
-.qq-upload-list li { margin:0; padding:0; line-height:15px; font-size:12px;}
-.qq-upload-file, .qq-upload-spinner, .qq-upload-size, .qq-upload-cancel, .qq-upload-failed-text {
-    margin-right: 7px;
-}
-
-.qq-upload-file {}
-.qq-upload-spinner {display:inline-block; background: url("loading.gif"); width:15px; height:15px; vertical-align:text-bottom;}
-.qq-upload-size,.qq-upload-cancel {font-size:11px;}
-
-.qq-upload-failed-text {display:none;}
-.qq-upload-fail .qq-upload-failed-text {display:inline;}
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/client/fileuploader.js b/addon/js_upload/file-uploader/client/fileuploader.js
deleted file mode 100644 (file)
index 89c09eb..0000000
+++ /dev/null
@@ -1,1247 +0,0 @@
-/**
- * http://github.com/valums/file-uploader
- * 
- * Multiple file upload component with progress-bar, drag-and-drop. 
- * © 2010 Andrew Valums ( andrew(at)valums.com ) 
- * 
- * Licensed under GNU GPL 2 or later, see license.txt.
- */    
-
-//
-// Helper functions
-//
-
-var qq = qq || {};
-
-/**
- * Adds all missing properties from second obj to first obj
- */ 
-qq.extend = function(first, second){
-    for (var prop in second){
-        first[prop] = second[prop];
-    }
-};  
-
-/**
- * Searches for a given element in the array, returns -1 if it is not present.
- * @param {Number} [from] The index at which to begin the search
- */
-qq.indexOf = function(arr, elt, from){
-    if (arr.indexOf) return arr.indexOf(elt, from);
-    
-    from = from || 0;
-    var len = arr.length;    
-    
-    if (from < 0) from += len;  
-
-    for (; from < len; from++){  
-        if (from in arr && arr[from] === elt){  
-            return from;
-        }
-    }  
-    return -1;  
-}; 
-    
-qq.getUniqueId = (function(){
-    var id = 0;
-    return function(){ return id++; };
-})();
-
-//
-// Events
-
-qq.attach = function(element, type, fn){
-    if (element.addEventListener){
-        element.addEventListener(type, fn, false);
-    } else if (element.attachEvent){
-        element.attachEvent('on' + type, fn);
-    }
-};
-qq.detach = function(element, type, fn){
-    if (element.removeEventListener){
-        element.removeEventListener(type, fn, false);
-    } else if (element.attachEvent){
-        element.detachEvent('on' + type, fn);
-    }
-};
-
-qq.preventDefault = function(e){
-    if (e.preventDefault){
-        e.preventDefault();
-    } else{
-        e.returnValue = false;
-    }
-};
-
-//
-// Node manipulations
-
-/**
- * Insert node a before node b.
- */
-qq.insertBefore = function(a, b){
-    b.parentNode.insertBefore(a, b);
-};
-qq.remove = function(element){
-    element.parentNode.removeChild(element);
-};
-
-qq.contains = function(parent, descendant){       
-    // compareposition returns false in this case
-    if (parent == descendant) return true;
-    
-    if (parent.contains){
-        return parent.contains(descendant);
-    } else {
-        return !!(descendant.compareDocumentPosition(parent) & 8);
-    }
-};
-
-/**
- * Creates and returns element from html string
- * Uses innerHTML to create an element
- */
-qq.toElement = (function(){
-    var div = document.createElement('div');
-    return function(html){
-        div.innerHTML = html;
-        var element = div.firstChild;
-        div.removeChild(element);
-        return element;
-    };
-})();
-
-//
-// Node properties and attributes
-
-/**
- * Sets styles for an element.
- * Fixes opacity in IE6-8.
- */
-qq.css = function(element, styles){
-    if (styles.opacity != null){
-        if (typeof element.style.opacity != 'string' && typeof(element.filters) != 'undefined'){
-            styles.filter = 'alpha(opacity=' + Math.round(100 * styles.opacity) + ')';
-        }
-    }
-    qq.extend(element.style, styles);
-};
-qq.hasClass = function(element, name){
-    var re = new RegExp('(^| )' + name + '( |$)');
-    return re.test(element.className);
-};
-qq.addClass = function(element, name){
-    if (!qq.hasClass(element, name)){
-        element.className += ' ' + name;
-    }
-};
-qq.removeClass = function(element, name){
-    var re = new RegExp('(^| )' + name + '( |$)');
-    element.className = element.className.replace(re, ' ').replace(/^\s+|\s+$/g, "");
-};
-qq.setText = function(element, text){
-    element.innerText = text;
-    element.textContent = text;
-};
-
-//
-// Selecting elements
-
-qq.children = function(element){
-    var children = [],
-    child = element.firstChild;
-
-    while (child){
-        if (child.nodeType == 1){
-            children.push(child);
-        }
-        child = child.nextSibling;
-    }
-
-    return children;
-};
-
-qq.getByClass = function(element, className){
-    if (element.querySelectorAll){
-        return element.querySelectorAll('.' + className);
-    }
-
-    var result = [];
-    var candidates = element.getElementsByTagName("*");
-    var len = candidates.length;
-
-    for (var i = 0; i < len; i++){
-        if (qq.hasClass(candidates[i], className)){
-            result.push(candidates[i]);
-        }
-    }
-    return result;
-};
-
-/**
- * obj2url() takes a json-object as argument and generates
- * a querystring. pretty much like jQuery.param()
- * 
- * how to use:
- *
- *    `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`
- *
- * will result in:
- *
- *    `http://any.url/upload?otherParam=value&a=b&c=d`
- *
- * @param  Object JSON-Object
- * @param  String current querystring-part
- * @return String encoded querystring
- */
-qq.obj2url = function(obj, temp, prefixDone){
-    var uristrings = [],
-        prefix = '&',
-        add = function(nextObj, i){
-            var nextTemp = temp 
-                ? (/\[\]$/.test(temp)) // prevent double-encoding
-                   ? temp
-                   : temp+'['+i+']'
-                : i;
-            if ((nextTemp != 'undefined') && (i != 'undefined')) {  
-                uristrings.push(
-                    (typeof nextObj === 'object') 
-                        ? qq.obj2url(nextObj, nextTemp, true)
-                        : (Object.prototype.toString.call(nextObj) === '[object Function]')
-                            ? encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj())
-                            : encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj)                                                          
-                );
-            }
-        }; 
-
-    if (!prefixDone && temp) {
-      prefix = (/\?/.test(temp)) ? (/\?$/.test(temp)) ? '' : '&' : '?';
-      uristrings.push(temp);
-      uristrings.push(qq.obj2url(obj));
-    } else if ((Object.prototype.toString.call(obj) === '[object Array]') && (typeof obj != 'undefined') ) {
-        // we wont use a for-in-loop on an array (performance)
-        for (var i = 0, len = obj.length; i < len; ++i){
-            add(obj[i], i);
-        }
-    } else if ((typeof obj != 'undefined') && (obj !== null) && (typeof obj === "object")){
-        // for anything else but a scalar, we will use for-in-loop
-        for (var i in obj){
-            add(obj[i], i);
-        }
-    } else {
-        uristrings.push(encodeURIComponent(temp) + '=' + encodeURIComponent(obj));
-    }
-
-    return uristrings.join(prefix)
-                     .replace(/^&/, '')
-                     .replace(/%20/g, '+'); 
-};
-
-//
-//
-// Uploader Classes
-//
-//
-
-var qq = qq || {};
-    
-/**
- * Creates upload button, validates upload, but doesn't create file list or dd. 
- */
-qq.FileUploaderBasic = function(o){
-    this._options = {
-        // set to true to see the server response
-        debug: false,
-        action: '/server/upload',
-        params: {},
-        button: null,
-        multiple: true,
-        maxConnections: 3,
-        // validation        
-        allowedExtensions: [],               
-        sizeLimit: 0,   
-        minSizeLimit: 0,                             
-        // events
-        // return false to cancel submit
-        onSubmit: function(id, fileName){},
-        onProgress: function(id, fileName, loaded, total){},
-        onComplete: function(id, fileName, responseJSON){},
-        onCancel: function(id, fileName){},
-        // messages                
-        messages: {
-            typeError: "{file} has invalid extension. Only {extensions} are allowed.",
-            sizeError: "{file} is too large, maximum file size is {sizeLimit}.",
-            minSizeError: "{file} is too small, minimum file size is {minSizeLimit}.",
-            emptyError: "{file} is empty, please select files again without it.",
-            onLeave: "The files are being uploaded, if you leave now the upload will be cancelled."            
-        },
-        showMessage: function(message){
-            alert(message);
-        }               
-    };
-    qq.extend(this._options, o);
-        
-    // number of files being uploaded
-    this._filesInProgress = 0;
-    this._handler = this._createUploadHandler(); 
-    
-    if (this._options.button){ 
-        this._button = this._createUploadButton(this._options.button);
-    }
-                        
-    this._preventLeaveInProgress();         
-};
-   
-qq.FileUploaderBasic.prototype = {
-    setParams: function(params){
-        this._options.params = params;
-    },
-    getInProgress: function(){
-        return this._filesInProgress;         
-    },
-    _createUploadButton: function(element){
-        var self = this;
-        
-        return new qq.UploadButton({
-            element: element,
-            multiple: this._options.multiple && qq.UploadHandlerXhr.isSupported(),
-            onChange: function(input){
-                self._onInputChange(input);
-            }        
-        });           
-    },    
-    _createUploadHandler: function(){
-        var self = this,
-            handlerClass;        
-        
-        if(qq.UploadHandlerXhr.isSupported()){           
-            handlerClass = 'UploadHandlerXhr';                        
-        } else {
-            handlerClass = 'UploadHandlerForm';
-        }
-
-        var handler = new qq[handlerClass]({
-            debug: this._options.debug,
-            action: this._options.action,         
-            maxConnections: this._options.maxConnections,   
-            onProgress: function(id, fileName, loaded, total){                
-                self._onProgress(id, fileName, loaded, total);
-                self._options.onProgress(id, fileName, loaded, total);                    
-            },            
-            onComplete: function(id, fileName, result){
-                self._onComplete(id, fileName, result);
-                self._options.onComplete(id, fileName, result);
-            },
-            onCancel: function(id, fileName){
-                self._onCancel(id, fileName);
-                self._options.onCancel(id, fileName);
-            }
-        });
-
-        return handler;
-    },    
-    _preventLeaveInProgress: function(){
-        var self = this;
-        
-        qq.attach(window, 'beforeunload', function(e){
-            if (!self._filesInProgress){return;}
-            
-            var e = e || window.event;
-            // for ie, ff
-            e.returnValue = self._options.messages.onLeave;
-            // for webkit
-            return self._options.messages.onLeave;             
-        });        
-    },    
-    _onSubmit: function(id, fileName){
-        this._filesInProgress++;  
-    },
-    _onProgress: function(id, fileName, loaded, total){        
-    },
-    _onComplete: function(id, fileName, result){
-        this._filesInProgress--;                 
-        if (result.error){
-            this._options.showMessage(result.error);
-        }             
-    },
-    _onCancel: function(id, fileName){
-        this._filesInProgress--;        
-    },
-    _onInputChange: function(input){
-        if (this._handler instanceof qq.UploadHandlerXhr){                
-            this._uploadFileList(input.files);                   
-        } else {             
-            if (this._validateFile(input)){                
-                this._uploadFile(input);                                    
-            }                      
-        }               
-        this._button.reset();   
-    },  
-    _uploadFileList: function(files){
-        for (var i=0; i<files.length; i++){
-            if ( !this._validateFile(files[i])){
-                return;
-            }            
-        }
-        
-        for (var i=0; i<files.length; i++){
-            this._uploadFile(files[i]);        
-        }        
-    },       
-    _uploadFile: function(fileContainer){      
-        var id = this._handler.add(fileContainer);
-        var fileName = this._handler.getName(id);
-        
-        if (this._options.onSubmit(id, fileName) !== false){
-            this._onSubmit(id, fileName);
-            this._handler.upload(id, this._options.params);
-        }
-    },      
-    _validateFile: function(file){
-        var name, size;
-        
-        if (file.value){
-            // it is a file input            
-            // get input value and remove path to normalize
-            name = file.value.replace(/.*(\/|\\)/, "");
-        } else {
-            // fix missing properties in Safari
-            name = file.fileName != null ? file.fileName : file.name;
-            size = file.fileSize != null ? file.fileSize : file.size;
-        }
-                    
-        if (! this._isAllowedExtension(name)){            
-            this._error('typeError', name);
-            return false;
-            
-        } else if (size === 0){            
-            this._error('emptyError', name);
-            return false;
-                                                     
-        } else if (size && this._options.sizeLimit && size > this._options.sizeLimit){            
-            this._error('sizeError', name);
-            return false;
-                        
-        } else if (size && size < this._options.minSizeLimit){
-            this._error('minSizeError', name);
-            return false;            
-        }
-        
-        return true;                
-    },
-    _error: function(code, fileName){
-        var message = this._options.messages[code];        
-        function r(name, replacement){ message = message.replace(name, replacement); }
-        
-        r('{file}', this._formatFileName(fileName));        
-        r('{extensions}', this._options.allowedExtensions.join(', '));
-        r('{sizeLimit}', this._formatSize(this._options.sizeLimit));
-        r('{minSizeLimit}', this._formatSize(this._options.minSizeLimit));
-        
-        this._options.showMessage(message);                
-    },
-    _formatFileName: function(name){
-        if (name.length > 33){
-            name = name.slice(0, 19) + '...' + name.slice(-13);    
-        }
-        return name;
-    },
-    _isAllowedExtension: function(fileName){
-        var ext = (-1 !== fileName.indexOf('.')) ? fileName.replace(/.*[.]/, '').toLowerCase() : '';
-        var allowed = this._options.allowedExtensions;
-        
-        if (!allowed.length){return true;}        
-        
-        for (var i=0; i<allowed.length; i++){
-            if (allowed[i].toLowerCase() == ext){ return true;}    
-        }
-        
-        return false;
-    },    
-    _formatSize: function(bytes){
-        var i = -1;                                    
-        do {
-            bytes = bytes / 1024;
-            i++;  
-        } while (bytes > 99);
-        
-        return Math.max(bytes, 0.1).toFixed(1) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];          
-    }
-};
-    
-       
-/**
- * Class that creates upload widget with drag-and-drop and file list
- * @inherits qq.FileUploaderBasic
- */
-qq.FileUploader = function(o){
-    // call parent constructor
-    qq.FileUploaderBasic.apply(this, arguments);
-    
-    // additional options    
-    qq.extend(this._options, {
-        element: null,
-        // if set, will be used instead of qq-upload-list in template
-        listElement: null,
-                
-        template: '<div class="qq-uploader">' + 
-                '<div class="qq-upload-drop-area"><span>Drop files here to upload</span></div>' +
-                '<div class="qq-upload-button">Upload a file</div>' +
-                '<ul class="qq-upload-list"></ul>' + 
-             '</div>',
-
-        // template for one item in file list
-        fileTemplate: '<li>' +
-                '<span class="qq-upload-file"></span>' +
-                '<span class="qq-upload-spinner"></span>' +
-                '<span class="qq-upload-size"></span>' +
-                '<a class="qq-upload-cancel" href="#">Cancel</a>' +
-                '<span class="qq-upload-failed-text">Failed</span>' +
-            '</li>',        
-        
-        classes: {
-            // used to get elements from templates
-            button: 'qq-upload-button',
-            drop: 'qq-upload-drop-area',
-            dropActive: 'qq-upload-drop-area-active',
-            list: 'qq-upload-list',
-                        
-            file: 'qq-upload-file',
-            spinner: 'qq-upload-spinner',
-            size: 'qq-upload-size',
-            cancel: 'qq-upload-cancel',
-
-            // added to list item when upload completes
-            // used in css to hide progress spinner
-            success: 'qq-upload-success',
-            fail: 'qq-upload-fail'
-        }
-    });
-    // overwrite options with user supplied    
-    qq.extend(this._options, o);       
-
-    this._element = this._options.element;
-    this._element.innerHTML = this._options.template;        
-    this._listElement = this._options.listElement || this._find(this._element, 'list');
-    
-    this._classes = this._options.classes;
-        
-    this._button = this._createUploadButton(this._find(this._element, 'button'));        
-    
-    this._bindCancelEvent();
-    this._setupDragDrop();
-};
-
-// inherit from Basic Uploader
-qq.extend(qq.FileUploader.prototype, qq.FileUploaderBasic.prototype);
-
-qq.extend(qq.FileUploader.prototype, {
-    /**
-     * Gets one of the elements listed in this._options.classes
-     **/
-    _find: function(parent, type){                                
-        var element = qq.getByClass(parent, this._options.classes[type])[0];        
-        if (!element){
-            throw new Error('element not found ' + type);
-        }
-        
-        return element;
-    },
-    _setupDragDrop: function(){
-        var self = this,
-            dropArea = this._find(this._element, 'drop');                        
-
-        var dz = new qq.UploadDropZone({
-            element: dropArea,
-            onEnter: function(e){
-                qq.addClass(dropArea, self._classes.dropActive);
-                e.stopPropagation();
-            },
-            onLeave: function(e){
-                e.stopPropagation();
-            },
-            onLeaveNotDescendants: function(e){
-                qq.removeClass(dropArea, self._classes.dropActive);  
-            },
-            onDrop: function(e){
-                dropArea.style.display = 'none';
-                qq.removeClass(dropArea, self._classes.dropActive);
-                self._uploadFileList(e.dataTransfer.files);    
-            }
-        });
-                
-        dropArea.style.display = 'none';
-
-        qq.attach(document, 'dragenter', function(e){     
-            if (!dz._isValidFileDrag(e)) return; 
-            
-            dropArea.style.display = 'block';            
-        });                 
-        qq.attach(document, 'dragleave', function(e){
-            if (!dz._isValidFileDrag(e)) return;            
-            
-            var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);
-            // only fire when leaving document out
-            if ( ! relatedTarget || relatedTarget.nodeName == "HTML"){               
-                dropArea.style.display = 'none';                                            
-            }
-        });                
-    },
-    _onSubmit: function(id, fileName){
-        qq.FileUploaderBasic.prototype._onSubmit.apply(this, arguments);
-        this._addToList(id, fileName);  
-    },
-    _onProgress: function(id, fileName, loaded, total){
-        qq.FileUploaderBasic.prototype._onProgress.apply(this, arguments);
-
-        var item = this._getItemByFileId(id);
-        var size = this._find(item, 'size');
-        size.style.display = 'inline';
-        
-        var text; 
-        if (loaded != total){
-            text = Math.round(loaded / total * 100) + '% from ' + this._formatSize(total);
-        } else {                                   
-            text = this._formatSize(total);
-        }          
-        
-        qq.setText(size, text);         
-    },
-    _onComplete: function(id, fileName, result){
-        qq.FileUploaderBasic.prototype._onComplete.apply(this, arguments);
-
-        // mark completed
-        var item = this._getItemByFileId(id);                
-        qq.remove(this._find(item, 'cancel'));
-        qq.remove(this._find(item, 'spinner'));
-        
-        if (result.success){
-            qq.addClass(item, this._classes.success);    
-        } else {
-            qq.addClass(item, this._classes.fail);
-        }         
-    },
-    _addToList: function(id, fileName){
-        var item = qq.toElement(this._options.fileTemplate);                
-        item.qqFileId = id;
-
-        var fileElement = this._find(item, 'file');        
-        qq.setText(fileElement, this._formatFileName(fileName));
-        this._find(item, 'size').style.display = 'none';        
-
-        this._listElement.appendChild(item);
-    },
-    _getItemByFileId: function(id){
-        var item = this._listElement.firstChild;        
-        
-        // there can't be txt nodes in dynamically created list
-        // and we can  use nextSibling
-        while (item){            
-            if (item.qqFileId == id) return item;            
-            item = item.nextSibling;
-        }          
-    },
-    /**
-     * delegate click event for cancel link 
-     **/
-    _bindCancelEvent: function(){
-        var self = this,
-            list = this._listElement;            
-        
-        qq.attach(list, 'click', function(e){            
-            e = e || window.event;
-            var target = e.target || e.srcElement;
-            
-            if (qq.hasClass(target, self._classes.cancel)){                
-                qq.preventDefault(e);
-               
-                var item = target.parentNode;
-                self._handler.cancel(item.qqFileId);
-                qq.remove(item);
-            }
-        });
-    }    
-});
-    
-qq.UploadDropZone = function(o){
-    this._options = {
-        element: null,  
-        onEnter: function(e){},
-        onLeave: function(e){},  
-        // is not fired when leaving element by hovering descendants   
-        onLeaveNotDescendants: function(e){},   
-        onDrop: function(e){}                       
-    };
-    qq.extend(this._options, o); 
-    
-    this._element = this._options.element;
-    
-    this._disableDropOutside();
-    this._attachEvents();   
-};
-
-qq.UploadDropZone.prototype = {
-    _disableDropOutside: function(e){
-        // run only once for all instances
-        if (!qq.UploadDropZone.dropOutsideDisabled ){
-
-            qq.attach(document, 'dragover', function(e){
-                if (e.dataTransfer){
-                    e.dataTransfer.dropEffect = 'none';
-                    e.preventDefault(); 
-                }           
-            });
-            
-            qq.UploadDropZone.dropOutsideDisabled = true; 
-        }        
-    },
-    _attachEvents: function(){
-        var self = this;              
-                  
-        qq.attach(self._element, 'dragover', function(e){
-            if (!self._isValidFileDrag(e)) return;
-            
-            var effect = e.dataTransfer.effectAllowed;
-            if (effect == 'move' || effect == 'linkMove'){
-                e.dataTransfer.dropEffect = 'move'; // for FF (only move allowed)    
-            } else {                    
-                e.dataTransfer.dropEffect = 'copy'; // for Chrome
-            }
-                                                     
-            e.stopPropagation();
-            e.preventDefault();                                                                    
-        });
-        
-        qq.attach(self._element, 'dragenter', function(e){
-            if (!self._isValidFileDrag(e)) return;
-                        
-            self._options.onEnter(e);
-        });
-        
-        qq.attach(self._element, 'dragleave', function(e){
-            if (!self._isValidFileDrag(e)) return;
-            
-            self._options.onLeave(e);
-            
-            var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);                      
-            // do not fire when moving a mouse over a descendant
-            if (qq.contains(this, relatedTarget)) return;
-                        
-            self._options.onLeaveNotDescendants(e); 
-        });
-                
-        qq.attach(self._element, 'drop', function(e){
-            if (!self._isValidFileDrag(e)) return;
-            
-            e.preventDefault();
-            self._options.onDrop(e);
-        });          
-    },
-    _isValidFileDrag: function(e){
-        var dt = e.dataTransfer,
-            // do not check dt.types.contains in webkit, because it crashes safari 4            
-            isWebkit = navigator.userAgent.indexOf("AppleWebKit") > -1;                        
-
-        // dt.effectAllowed is none in Safari 5
-        // dt.types.contains check is for firefox            
-        return dt && dt.effectAllowed != 'none' && 
-            (dt.files || (!isWebkit && dt.types.contains && dt.types.contains('Files')));
-        
-    }        
-}; 
-
-qq.UploadButton = function(o){
-    this._options = {
-        element: null,  
-        // if set to true adds multiple attribute to file input      
-        multiple: false,
-        // name attribute of file input
-        name: 'file',
-        onChange: function(input){},
-        hoverClass: 'qq-upload-button-hover',
-        focusClass: 'qq-upload-button-focus'                       
-    };
-    
-    qq.extend(this._options, o);
-        
-    this._element = this._options.element;
-    
-    // make button suitable container for input
-    qq.css(this._element, {
-        position: 'relative',
-        overflow: 'hidden',
-        // Make sure browse button is in the right side
-        // in Internet Explorer
-        direction: 'ltr'
-    });   
-    
-    this._input = this._createInput();
-};
-
-qq.UploadButton.prototype = {
-    /* returns file input element */    
-    getInput: function(){
-        return this._input;
-    },
-    /* cleans/recreates the file input */
-    reset: function(){
-        if (this._input.parentNode){
-            qq.remove(this._input);    
-        }                
-        
-        qq.removeClass(this._element, this._options.focusClass);
-        this._input = this._createInput();
-    },    
-    _createInput: function(){                
-        var input = document.createElement("input");
-        
-        if (this._options.multiple){
-            input.setAttribute("multiple", "multiple");
-        }
-                
-        input.setAttribute("type", "file");
-        input.setAttribute("name", this._options.name);
-        
-        qq.css(input, {
-            position: 'absolute',
-            // in Opera only 'browse' button
-            // is clickable and it is located at
-            // the right side of the input
-            right: 0,
-            top: 0,
-            fontFamily: 'Arial',
-            // 4 persons reported this, the max values that worked for them were 243, 236, 236, 118
-            fontSize: '118px',
-            margin: 0,
-            padding: 0,
-            cursor: 'pointer',
-            opacity: 0
-        });
-        
-        this._element.appendChild(input);
-
-        var self = this;
-        qq.attach(input, 'change', function(){
-            self._options.onChange(input);
-        });
-                
-        qq.attach(input, 'mouseover', function(){
-            qq.addClass(self._element, self._options.hoverClass);
-        });
-        qq.attach(input, 'mouseout', function(){
-            qq.removeClass(self._element, self._options.hoverClass);
-        });
-        qq.attach(input, 'focus', function(){
-            qq.addClass(self._element, self._options.focusClass);
-        });
-        qq.attach(input, 'blur', function(){
-            qq.removeClass(self._element, self._options.focusClass);
-        });
-
-        // IE and Opera, unfortunately have 2 tab stops on file input
-        // which is unacceptable in our case, disable keyboard access
-        if (window.attachEvent){
-            // it is IE or Opera
-            input.setAttribute('tabIndex', "-1");
-        }
-
-        return input;            
-    }        
-};
-
-/**
- * Class for uploading files, uploading itself is handled by child classes
- */
-qq.UploadHandlerAbstract = function(o){
-    this._options = {
-        debug: false,
-        action: '/upload.php',
-        // maximum number of concurrent uploads        
-        maxConnections: 999,
-        onProgress: function(id, fileName, loaded, total){},
-        onComplete: function(id, fileName, response){},
-        onCancel: function(id, fileName){}
-    };
-    qq.extend(this._options, o);    
-    
-    this._queue = [];
-    // params for files in queue
-    this._params = [];
-};
-qq.UploadHandlerAbstract.prototype = {
-    log: function(str){
-        if (this._options.debug && window.console) console.log('[uploader] ' + str);        
-    },
-    /**
-     * Adds file or file input to the queue
-     * @returns id
-     **/    
-    add: function(file){},
-    /**
-     * Sends the file identified by id and additional query params to the server
-     */
-    upload: function(id, params){
-        var len = this._queue.push(id);
-
-        var copy = {};        
-        qq.extend(copy, params);
-        this._params[id] = copy;        
-                
-        // if too many active uploads, wait...
-        if (len <= this._options.maxConnections){               
-            this._upload(id, this._params[id]);
-        }
-    },
-    /**
-     * Cancels file upload by id
-     */
-    cancel: function(id){
-        this._cancel(id);
-        this._dequeue(id);
-    },
-    /**
-     * Cancells all uploads
-     */
-    cancelAll: function(){
-        for (var i=0; i<this._queue.length; i++){
-            this._cancel(this._queue[i]);
-        }
-        this._queue = [];
-    },
-    /**
-     * Returns name of the file identified by id
-     */
-    getName: function(id){},
-    /**
-     * Returns size of the file identified by id
-     */          
-    getSize: function(id){},
-    /**
-     * Returns id of files being uploaded or
-     * waiting for their turn
-     */
-    getQueue: function(){
-        return this._queue;
-    },
-    /**
-     * Actual upload method
-     */
-    _upload: function(id){},
-    /**
-     * Actual cancel method
-     */
-    _cancel: function(id){},     
-    /**
-     * Removes element from queue, starts upload of next
-     */
-    _dequeue: function(id){
-        var i = qq.indexOf(this._queue, id);
-        this._queue.splice(i, 1);
-                
-        var max = this._options.maxConnections;
-        
-        if (this._queue.length >= max){
-            var nextId = this._queue[max-1];
-            this._upload(nextId, this._params[nextId]);
-        }
-    }        
-};
-
-/**
- * Class for uploading files using form and iframe
- * @inherits qq.UploadHandlerAbstract
- */
-qq.UploadHandlerForm = function(o){
-    qq.UploadHandlerAbstract.apply(this, arguments);
-       
-    this._inputs = {};
-};
-// @inherits qq.UploadHandlerAbstract
-qq.extend(qq.UploadHandlerForm.prototype, qq.UploadHandlerAbstract.prototype);
-
-qq.extend(qq.UploadHandlerForm.prototype, {
-    add: function(fileInput){
-        fileInput.setAttribute('name', 'qqfile');
-        var id = 'qq-upload-handler-iframe' + qq.getUniqueId();       
-        
-        this._inputs[id] = fileInput;
-        
-        // remove file input from DOM
-        if (fileInput.parentNode){
-            qq.remove(fileInput);
-        }
-                
-        return id;
-    },
-    getName: function(id){
-        // get input value and remove path to normalize
-        return this._inputs[id].value.replace(/.*(\/|\\)/, "");
-    },    
-    _cancel: function(id){
-        this._options.onCancel(id, this.getName(id));
-        
-        delete this._inputs[id];        
-
-        var iframe = document.getElementById(id);
-        if (iframe){
-            // to cancel request set src to something else
-            // we use src="javascript:false;" because it doesn't
-            // trigger ie6 prompt on https
-            iframe.setAttribute('src', 'javascript:false;');
-
-            qq.remove(iframe);
-        }
-    },     
-    _upload: function(id, params){                        
-        var input = this._inputs[id];
-        
-        if (!input){
-            throw new Error('file with passed id was not added, or already uploaded or cancelled');
-        }                
-
-        var fileName = this.getName(id);
-                
-        var iframe = this._createIframe(id);
-        var form = this._createForm(iframe, params);
-        form.appendChild(input);
-
-        var self = this;
-        this._attachLoadEvent(iframe, function(){                                 
-            self.log('iframe loaded');
-            
-            var response = self._getIframeContentJSON(iframe);
-
-            self._options.onComplete(id, fileName, response);
-            self._dequeue(id);
-            
-            delete self._inputs[id];
-            // timeout added to fix busy state in FF3.6
-            setTimeout(function(){
-                qq.remove(iframe);
-            }, 1);
-        });
-
-        form.submit();        
-        qq.remove(form);        
-        
-        return id;
-    }, 
-    _attachLoadEvent: function(iframe, callback){
-        qq.attach(iframe, 'load', function(){
-            // when we remove iframe from dom
-            // the request stops, but in IE load
-            // event fires
-            if (!iframe.parentNode){
-                return;
-            }
-
-            // fixing Opera 10.53
-            if (iframe.contentDocument &&
-                iframe.contentDocument.body &&
-                iframe.contentDocument.body.innerHTML == "false"){
-                // In Opera event is fired second time
-                // when body.innerHTML changed from false
-                // to server response approx. after 1 sec
-                // when we upload file with iframe
-                return;
-            }
-
-            callback();
-        });
-    },
-    /**
-     * Returns json object received by iframe from server.
-     */
-    _getIframeContentJSON: function(iframe){
-        // iframe.contentWindow.document - for IE<7
-        var doc = iframe.contentDocument ? iframe.contentDocument: iframe.contentWindow.document,
-            response;
-        
-        this.log("converting iframe's innerHTML to JSON");
-        this.log("innerHTML = " + doc.body.innerHTML);
-                        
-        try {
-            response = eval("(" + doc.body.innerHTML + ")");
-        } catch(err){
-            response = {};
-        }        
-
-        return response;
-    },
-    /**
-     * Creates iframe with unique name
-     */
-    _createIframe: function(id){
-        // We can't use following code as the name attribute
-        // won't be properly registered in IE6, and new window
-        // on form submit will open
-        // var iframe = document.createElement('iframe');
-        // iframe.setAttribute('name', id);
-
-        var iframe = qq.toElement('<iframe src="javascript:false;" name="' + id + '" />');
-        // src="javascript:false;" removes ie6 prompt on https
-
-        iframe.setAttribute('id', id);
-
-        iframe.style.display = 'none';
-        document.body.appendChild(iframe);
-
-        return iframe;
-    },
-    /**
-     * Creates form, that will be submitted to iframe
-     */
-    _createForm: function(iframe, params){
-        // We can't use the following code in IE6
-        // var form = document.createElement('form');
-        // form.setAttribute('method', 'post');
-        // form.setAttribute('enctype', 'multipart/form-data');
-        // Because in this case file won't be attached to request
-        var form = qq.toElement('<form method="post" enctype="multipart/form-data"></form>');
-
-        var queryString = qq.obj2url(params, this._options.action);
-
-        form.setAttribute('action', queryString);
-        form.setAttribute('target', iframe.name);
-        form.style.display = 'none';
-        document.body.appendChild(form);
-
-        return form;
-    }
-});
-
-/**
- * Class for uploading files using xhr
- * @inherits qq.UploadHandlerAbstract
- */
-qq.UploadHandlerXhr = function(o){
-    qq.UploadHandlerAbstract.apply(this, arguments);
-
-    this._files = [];
-    this._xhrs = [];
-    
-    // current loaded size in bytes for each file 
-    this._loaded = [];
-};
-
-// static method
-qq.UploadHandlerXhr.isSupported = function(){
-    var input = document.createElement('input');
-    input.type = 'file';        
-    
-    return (
-        'multiple' in input &&
-        typeof File != "undefined" &&
-        typeof (new XMLHttpRequest()).upload != "undefined" );       
-};
-
-// @inherits qq.UploadHandlerAbstract
-qq.extend(qq.UploadHandlerXhr.prototype, qq.UploadHandlerAbstract.prototype)
-
-qq.extend(qq.UploadHandlerXhr.prototype, {
-    /**
-     * Adds file to the queue
-     * Returns id to use with upload, cancel
-     **/    
-    add: function(file){
-        if (!(file instanceof File)){
-            throw new Error('Passed obj in not a File (in qq.UploadHandlerXhr)');
-        }
-                
-        return this._files.push(file) - 1;        
-    },
-    getName: function(id){        
-        var file = this._files[id];
-        // fix missing name in Safari 4
-        return file.fileName != null ? file.fileName : file.name;       
-    },
-    getSize: function(id){
-        var file = this._files[id];
-        return file.fileSize != null ? file.fileSize : file.size;
-    },    
-    /**
-     * Returns uploaded bytes for file identified by id 
-     */    
-    getLoaded: function(id){
-        return this._loaded[id] || 0; 
-    },
-    /**
-     * Sends the file identified by id and additional query params to the server
-     * @param {Object} params name-value string pairs
-     */    
-    _upload: function(id, params){
-        var file = this._files[id],
-            name = this.getName(id),
-            size = this.getSize(id);
-                
-        this._loaded[id] = 0;
-                                
-        var xhr = this._xhrs[id] = new XMLHttpRequest();
-        var self = this;
-                                        
-        xhr.upload.onprogress = function(e){
-            if (e.lengthComputable){
-                self._loaded[id] = e.loaded;
-                self._options.onProgress(id, name, e.loaded, e.total);
-            }
-        };
-
-        xhr.onreadystatechange = function(){            
-            if (xhr.readyState == 4){
-                self._onComplete(id, xhr);                    
-            }
-        };
-
-        // build query string
-        params = params || {};
-        params['qqfile'] = name;
-        var queryString = qq.obj2url(params, this._options.action);
-
-        xhr.open("POST", queryString, true);
-        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
-        xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
-        xhr.setRequestHeader("Content-Type", "application/octet-stream");
-        xhr.send(file);
-    },
-    _onComplete: function(id, xhr){
-        // the request was aborted/cancelled
-        if (!this._files[id]) return;
-        
-        var name = this.getName(id);
-        var size = this.getSize(id);
-        
-        this._options.onProgress(id, name, size, size);
-                
-        if (xhr.status == 200){
-            this.log("xhr - server response received");
-            this.log("responseText = " + xhr.responseText);
-                        
-            var response;
-                    
-            try {
-                response = eval("(" + xhr.responseText + ")");
-            } catch(err){
-                response = {};
-            }
-            
-            this._options.onComplete(id, name, response);
-                        
-        } else {                   
-            this._options.onComplete(id, name, {});
-        }
-                
-        this._files[id] = null;
-        this._xhrs[id] = null;    
-        this._dequeue(id);                    
-    },
-    _cancel: function(id){
-        this._options.onCancel(id, this.getName(id));
-        
-        this._files[id] = null;
-        
-        if (this._xhrs[id]){
-            this._xhrs[id].abort();
-            this._xhrs[id] = null;                                   
-        }
-    }
-});
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/client/loading.gif b/addon/js_upload/file-uploader/client/loading.gif
deleted file mode 100644 (file)
index 6fba776..0000000
Binary files a/addon/js_upload/file-uploader/client/loading.gif and /dev/null differ
diff --git a/addon/js_upload/file-uploader/gpl-2.0.txt b/addon/js_upload/file-uploader/gpl-2.0.txt
deleted file mode 100644 (file)
index ecbc059..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/license.txt b/addon/js_upload/file-uploader/license.txt
deleted file mode 100644 (file)
index 25cdd3d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-File uploader component is licensed under GNU GPL 2 or later, see gpl-2.0.txt.
-© 2010 Andrew Valums
-
-This distribution also includes:
-
-    server/OctetStreamReader.java    
-    Dual Licensed under the MIT and GPL v.2        
-    
-    jQuery JavaScript Library
-    http://jquery.com/    
-    Copyright 2010, John Resig
-    Dual licensed under the MIT or GPL Version 2 licenses.
-    http://jquery.org/license
-    
-    Sizzle.js - CSS selector engine used by jQuery
-    http://sizzlejs.com/
-    Copyright 2010, The Dojo Foundation
-    Released under the MIT, BSD, and GPL Licenses.
-        
-    QUnit - A JavaScript Unit Testing Framework
-    http://docs.jquery.com/QUnit
-    Copyright (c) 2009 John Resig, Jörn Zaefferer
-    Dual licensed under the MIT (MIT-LICENSE.txt)
-    and GPL (GPL-LICENSE.txt) licenses.
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/readme.md b/addon/js_upload/file-uploader/readme.md
deleted file mode 100644 (file)
index c107bf1..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-[donation_link]: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=3PMY37SL9L888&lc=US&item_name=JavaScript%20file%20uploader&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted
-
-This plugin uses XHR for uploading multiple files with progress-bar in FF3.6+, Safari4+,
-Chrome and falls back to hidden iframe based upload in other browsers,
-providing good user experience everywhere.
-
-### <a href="http://valums.com/files/2010/file-uploader/demo.htm">Demo</a> [Donate][donation_link] ###
-
-### Features ###
-* multiple file select, progress-bar in FF, Chrome, Safari
-* drag-and-drop file select in FF, Chrome 
-* uploads are cancellable
-* no external dependencies
-* doesn't use Flash
-* fully working with https
-* keyboard support in FF, Chrome, Safari
-* tested in IE7,8; Firefox 3,3.6,4; Safari4,5; Chrome; Opera10.60;
-
-### License ###
-This plugin is open sourced under <a href="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPL 2</a> or later.
-If this license doesn't suit you mail me at andrew (at) valums.com.
-
-Please [donate][donation_link] if you are willing to support the further development of file upload plugin.  
-
-### Known Issues ###
-Plugin breaks back button functionality in Opera.
-       
-### Getting started ###
-The fileuploader.js contains two classes that are meant to be used directly.
-If you need a complete upload widget (from demo) to quickly drop
-into your current design, use qq.FileUploader.
-
-If you want to customize uploader, by using a different looking file list
-or change the behaviour or functionality use qq.FileUploaderBasic.
-
-The difference between them is that qq.FileUploader provides a list of files,
-drag-and-drop, but qq.FileUploaderBasic only creates button and handles validation.
-Basic uploader is easier extendable, and doesn't limit possible customization.
-
-qq.FileUploader extends qq.FileUploaderBasic, so that all the options present
-in the basic uploader also exist in the full widget.  
-
-### qq.FileUploader - Setting up full upload widget ###
-
-Include fileuploader.js and fileuploader.css into your page.
-Create container element.
-
-    <div id="file-uploader">       
-        <noscript>          
-            <p>Please enable JavaScript to use file uploader.</p>
-            <!-- or put a simple form for upload here -->
-        </noscript>         
-    </div>
-    
-Initialize uploader when the DOM is ready. Change the action option.
-For example ../server/php.php for the default folder structure.
-In the server folder you will find examples for different platforms.
-If you can't find the one you need, check the readme.txt in the same folder. 
-
-    var uploader = new qq.FileUploader({
-        // pass the dom node (ex. $(selector)[0] for jQuery users)
-        element: document.getElementById('file-uploader'),
-        // path to server-side upload script
-        action: '/server/upload'
-    }); 
-
-### Options of both classes ###
-    
-    // url of the server-side upload script, should be on the same domain
-    action: '/server/upload',
-    // additional data to send, name-value pairs
-    params: {},
-    
-    // validation    
-    // ex. ['jpg', 'jpeg', 'png', 'gif'] or []
-    allowedExtensions: [],        
-    // each file size limit in bytes
-    // this option isn't supported in all browsers
-    sizeLimit: 0, // max size   
-    minSizeLimit: 0, // min size
-    
-    // set to true to output server response to console
-    debug: false,
-    
-    // events         
-    // you can return false to abort submit
-    onSubmit: function(id, fileName){},
-    onProgress: function(id, fileName, loaded, total){},
-    onComplete: function(id, fileName, responseJSON){},
-    onCancel: function(id, fileName){},
-    
-    messages: {
-        // error messages, see qq.FileUploaderBasic for content            
-    },
-    showMessage: function(message){ alert(message); }        
-
-Instance methods
-
-* setParams(newParams)         
-
-#### Changing alert/messages to something more user friendly ####
-
-If you limited file types and max size, you will probably want to change the default alert and
-messages as you see fit, this is possible using showMessage callback and messages option.
-
-#### Sending additional params ####
-
-To add a parameter that will be passed as a query string with each upload use params option. 
-
-    var uploader = new qq.FileUploader({
-        element: document.getElementById('file-uploader'),
-        action: '/server-side.upload',
-        // additional data to send, name-value pairs
-        params: {
-            param1: 'value1',
-            param2: 'value2'
-        }
-    });
-
-To change params based on the state of your app, use 
-    
-    uploader.setParams({
-       anotherParam: 'value' 
-    });
-
-It can be nicely used in onSubmit callback.      
-
-#### Troubleshooting ####
-
-If you can't get the uploader to work, please try the following steps
-before asking for help.
-
-If the upload doesn't complete, saying failed.
-
-* Set the debug option of the FileUploader to true.
-* Open the page where you have a FileUploader.
-* Open developer console in your browser.
-* Try to upload the file. You should see a server serponse.
-
-It should be {success:true} for completed requests. If it's not,
-then you have a problem with your server-side script.
-
-#### Contributors ####
-
-Thanks to everybody who contributed, either by sending bug reports or donating. And special thanks to:
-
-John Yeary  
-Sidney Maestre  
-Patrick Pfeiffer  
-Sean Sandy (SeanJA)  
-Andy Newby     
-Ivan Valles  
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/server/OctetStreamReader.java b/addon/js_upload/file-uploader/server/OctetStreamReader.java
deleted file mode 100644 (file)
index 23f02be..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *  Copyright 2010 Blue Lotus Software, LLC.
- *  Copyright 2010 John Yeary <jyeary@bluelotussoftware.com>.
- *  Copyright 2010 Allan O'Driscoll
- *
- * Dual Licensed MIT and GPL v.2 
- *
- * The MIT License
- *
- * 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.
- *
- *
- * The GNU General Public License (GPL) Version 2, June 1991
- * This program is free software; you can redistribute it and/or modify it under the terms of the
- * GNU General Public License as published by the Free Software Foundation; version 2 of the License.
-
- * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-package com.bluelotussoftware.apache.commons.fileupload.example;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.io.IOUtils;
-
-/**
- * Reads an <code>application/octet-stream</code> and writes it to a file.
- * @author John Yeary <jyeary@bluelotussoftware.com>
- * @author Allan O'Driscoll
- * @version 1.0
- */
-public class OctetStreamReader extends HttpServlet {
-
-    private static final long serialVersionUID = 6748857432950840322L;
-    private static final String DESTINATION_DIR_PATH = "files";
-    private static String realPath;
-
-    /**
-     * {@inheritDoc}
-     * @param config
-     * @throws ServletException
-     */
-    @Override
-    public void init(ServletConfig config) throws ServletException {
-        super.init(config);
-        realPath = getServletContext().getRealPath(DESTINATION_DIR_PATH) + "/";
-    }
-
-    /** 
-     * Handles the HTTP <code>POST</code> method.
-     * @param request servlet request
-     * @param response servlet response
-     * @throws ServletException if a servlet-specific error occurs
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    protected void doPost(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException {
-
-        PrintWriter writer = null;
-        InputStream is = null;
-        FileOutputStream fos = null;
-
-        try {
-            writer = response.getWriter();
-        } catch (IOException ex) {
-            log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
-        }
-
-        String filename = request.getHeader("X-File-Name");
-        try {
-            is = request.getInputStream();
-            fos = new FileOutputStream(new File(realPath + filename));
-            IOUtils.copy(is, fos);
-            response.setStatus(response.SC_OK);
-            writer.print("{success: true}");
-        } catch (FileNotFoundException ex) {
-            response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
-            writer.print("{success: false}");
-            log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
-        } catch (IOException ex) {
-            response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
-            writer.print("{success: false}");
-            log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
-        } finally {
-            try {
-                fos.close();
-                is.close();
-            } catch (IOException ignored) {
-            }
-        }
-
-        writer.flush();
-        writer.close();
-    }
-}
diff --git a/addon/js_upload/file-uploader/server/coldfusion/coldfusion.cfc b/addon/js_upload/file-uploader/server/coldfusion/coldfusion.cfc
deleted file mode 100644 (file)
index 4e07270..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!---\rAJAX FileUploader for ColdFusion\rversion: 1.1.1\rfeedback:  sid.maestre@designovermatter.com\r\r-----------update history----------------\r1.1.1 on 9/30/2010 by Martin Webb <martin[at]cubicstate.com>\r- Change function for Upload to returnformat equals JSON\r- local var scoping.\r1.1 on 9/9/2010 by Sid Maestre\r- Split Upload function to handle fallback uploads for browsers that don't support XHR data transfer\r--->\r<cfcomponent hint="I handle AJAX File Uploads from Valum's AJAX file uploader library">\r      \r    <cffunction name="Upload" access="remote" output="false" returntype="any" returnformat="JSON">\r            <cfargument name="qqfile" type="string" required="true">\r\r              <cfset var local = structNew()>\r                <cfset local.response = structNew()>\r           <cfset local.requestData = GetHttpRequestData()>\r               \r               <!--- check if XHR data exists --->\r        <cfif len(local.requestData.content) GT 0>\r                 <cfset local.response = UploadFileXhr(arguments.qqfile, local.requestData.content)>       \r             <cfelse>\r               <!--- no XHR data process as standard form submission --->\r                     <cffile action="upload" fileField="arguments.qqfile" destination="#ExpandPath('.')#" nameConflict="makeunique">\r                <cfset local.response['success'] = true>\r               <cfset local.response['type'] = 'form'>\r                </cfif>\r                \r               <cfreturn local.response>\r      </cffunction>\r    \r    \r    <cffunction name="UploadFileXhr" access="private" output="false" returntype="struct">\r              <cfargument name="qqfile" type="string" required="true">\r               <cfargument name="content" type="any" required="true">\r\r                <cfset var local = structNew()>\r                <cfset local.response = structNew()>\r\r        <!--- write the contents of the http request to a file.  \r                The filename is passed with the qqfile variable --->\r           <cffile action="write" file="#ExpandPath('.')#/#arguments.qqfile#" output="#arguments.content#">\r       \r               <!--- if you want to return some JSON you can do it here.  \r            I'm just passing a success message      --->\r           <cfset local.response['success'] = true>\r       <cfset local.response['type'] = 'xhr'>\r         \r               <cfreturn local.response>\r    </cffunction>\r    \r</cfcomponent>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/server/coldfusion/demo.cfm b/addon/js_upload/file-uploader/server/coldfusion/demo.cfm
deleted file mode 100644 (file)
index 98ab800..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>\r<html>\r<head>\r    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r       <link href="fileuploader.css" rel="stylesheet" type="text/css"> \r    <style>            \r               body {font-size:13px; font-family:arial, sans-serif; width:700px; margin:100px auto;}\r    </style>      \r       \r</head>\r<body >                \r       <h1>ColdFusion File Uploader Demo</h1>\r    <p><a href="http://github.com/valums/file-uploader">Back to project page</a></p>\r    \r       <p>To upload a file, click on the button below. Drag-and-drop is supported in FF, Chrome.</p>\r  <p>Progress-bar is supported in FF3.6+, Chrome6+, Safari4+</p>\r \r       <div id="file-uploader-demo1">          \r               <noscript>                      \r                       <p>Please enable JavaScript to use file uploader.</p>\r                  <!-- or put a simple form for upload here -->\r          </noscript>         \r   </div>\r    \r    <script src="fileuploader.js" type="text/javascript"></script>\r    <script>        \r        function createUploader(){            \r            var uploader = new qq.FileUploader({\r                element: document.getElementById('file-uploader-demo1'),\r                action: '/valums/server/coldfusion.cfc',\r                          params: {method: 'Upload'}\r            });           \r        }\r        \r        // in your app create uploader as soon as the DOM is ready\r        // don't wait for the window to load  \r        window.onload = createUploader;     \r    </script>    \r</body>\r</html>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/server/coldfusion/readme.txt b/addon/js_upload/file-uploader/server/coldfusion/readme.txt
deleted file mode 100644 (file)
index c974689..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Coldfusion example by Sidney Maestre
-http://www.designovermatter.com/post.cfm/ajax-file-uploader-for-coldfusion
-
-    1.  Unzip Andrew's AJAX Uploader into your web root.
-    2.  Replace the demo.htm with demo.cfm in the "client" folder
-    3.  Place coldfusion.cfc in the "server" folder 
-    4.  Browse to the demo.cfm file and try it out. The file should be written to the "server" folder.
-
-Questions? You can contact Sidney Maestreme by mail (sid.maestre(at)designovermatter.com) or Twitter @SidneyAllen
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/server/perl.cgi b/addon/js_upload/file-uploader/server/perl.cgi
deleted file mode 100644 (file)
index c66f1aa..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/perl
-
-    use strict;
-    use CGI::Carp qw(fatalsToBrowser);
-
-    use Digest::MD5;
-
-    my $uploaddir = '/folder/to/save/in/ajax_upload/tmp_uploads';
-
-    my $maxFileSize = 0.5 * 1024 * 1024; # 1/2mb max file size...
-
-    use CGI;
-    my $IN = new CGI;
-
-    my $file = $IN->param('POSTDATA');
-    my $temp_id = $IN->param('temp_id');
-
-       # make a random filename, and we guess the file type later on...
-    my $name = Digest::MD5::md5_base64( rand );
-       $name =~ s/\+/_/g;
-       $name =~ s/\//_/g;
-
-    my $type;
-    if ($file =~ /^GIF/) {
-        $type = "gif";
-    } elsif ($file =~ /PNG/) {
-        $type = "png";
-    } elsif ($file =~ /JFIF/) {
-        $type = "jpg";
-    }
-
-    if (!$type) {
-        print qq|{ "success": false, "error": "Invalid file type..." }|;
-        print STDERR "file has been NOT been uploaded... \n";
-    }
-
-    print STDERR "Making dir: $uploaddir/$temp_id \n";
-
-    mkdir("$uploaddir/$temp_id");
-
-    open(WRITEIT, ">$uploaddir/$name.$type") or die "Cant write to $uploaddir/$name.$type. Reason: $!";
-        print WRITEIT $file;
-    close(WRITEIT);
-
-    my $check_size = -s "$uploaddir/$name.$type";
-
-    print STDERR qq|Main filesize: $check_size  Max Filesize: $maxFileSize \n\n|;
-
-    print $IN->header();
-    if ($check_size < 1) {
-        print STDERR "ooops, its empty - gonna get rid of it!\n";
-        print qq|{ "success": false, "error": "File is empty..." }|;
-        print STDERR "file has been NOT been uploaded... \n";
-    } elsif ($check_size > $maxFileSize) {
-        print STDERR "ooops, its too large - gonna get rid of it!\n";
-        print qq|{ "success": false, "error": "File is too large..." }|;
-        print STDERR "file has been NOT been uploaded... \n";
-    } else  {
-        print qq|{ "success": true }|;
-
-        print STDERR "file has been successfully uploaded... thank you.\n";
-    }
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/server/php.php b/addon/js_upload/file-uploader/server/php.php
deleted file mode 100644 (file)
index 915c86c..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-
-/**
- * Handle file uploads via XMLHttpRequest
- */
-class qqUploadedFileXhr {
-    /**
-     * Save the file to the specified path
-     * @return boolean TRUE on success
-     */
-    function save($path) {    
-        $input = fopen("php://input", "r");
-        $temp = tmpfile();
-        $realSize = stream_copy_to_stream($input, $temp);
-        fclose($input);
-        
-        if ($realSize != $this->getSize()){            
-            return false;
-        }
-        
-        $target = fopen($path, "w");        
-        fseek($temp, 0, SEEK_SET);
-        stream_copy_to_stream($temp, $target);
-        fclose($target);
-        
-        return true;
-    }
-    function getName() {
-        return $_GET['qqfile'];
-    }
-    function getSize() {
-        if (isset($_SERVER["CONTENT_LENGTH"])){
-            return (int)$_SERVER["CONTENT_LENGTH"];            
-        } else {
-            throw new Exception('Getting content length is not supported.');
-        }      
-    }   
-}
-
-/**
- * Handle file uploads via regular form post (uses the $_FILES array)
- */
-class qqUploadedFileForm {  
-    /**
-     * Save the file to the specified path
-     * @return boolean TRUE on success
-     */
-    function save($path) {
-        if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
-            return false;
-        }
-        return true;
-    }
-    function getName() {
-        return $_FILES['qqfile']['name'];
-    }
-    function getSize() {
-        return $_FILES['qqfile']['size'];
-    }
-}
-
-class qqFileUploader {
-    private $allowedExtensions = array();
-    private $sizeLimit = 10485760;
-    private $file;
-
-    function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){        
-        $allowedExtensions = array_map("strtolower", $allowedExtensions);
-            
-        $this->allowedExtensions = $allowedExtensions;        
-        $this->sizeLimit = $sizeLimit;
-        
-        $this->checkServerSettings();       
-
-        if (isset($_GET['qqfile'])) {
-            $this->file = new qqUploadedFileXhr();
-        } elseif (isset($_FILES['qqfile'])) {
-            $this->file = new qqUploadedFileForm();
-        } else {
-            $this->file = false; 
-        }
-    }
-    
-    private function checkServerSettings(){        
-        $postSize = $this->toBytes(ini_get('post_max_size'));
-        $uploadSize = $this->toBytes(ini_get('upload_max_filesize'));        
-        
-        if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){
-            $size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';             
-            die("{'error':'increase post_max_size and upload_max_filesize to $size'}");    
-        }        
-    }
-    
-    private function toBytes($str){
-        $val = trim($str);
-        $last = strtolower($str[strlen($str)-1]);
-        switch($last) {
-            case 'g': $val *= 1024;
-            case 'm': $val *= 1024;
-            case 'k': $val *= 1024;        
-        }
-        return $val;
-    }
-    
-    /**
-     * Returns array('success'=>true) or array('error'=>'error message')
-     */
-    function handleUpload($uploadDirectory, $replaceOldFile = FALSE){
-        if (!is_writable($uploadDirectory)){
-            return array('error' => "Server error. Upload directory isn't writable.");
-        }
-        
-        if (!$this->file){
-            return array('error' => 'No files were uploaded.');
-        }
-        
-        $size = $this->file->getSize();
-        
-        if ($size == 0) {
-            return array('error' => 'File is empty');
-        }
-        
-        if ($size > $this->sizeLimit) {
-            return array('error' => 'File is too large');
-        }
-        
-        $pathinfo = pathinfo($this->file->getName());
-        $filename = $pathinfo['filename'];
-        //$filename = md5(uniqid());
-        $ext = $pathinfo['extension'];
-
-        if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
-            $these = implode(', ', $this->allowedExtensions);
-            return array('error' => 'File has an invalid extension, it should be one of '. $these . '.');
-        }
-        
-        if(!$replaceOldFile){
-            /// don't overwrite previous files that were uploaded
-            while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
-                $filename .= rand(10, 99);
-            }
-        }
-        
-        if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
-            return array('success'=>true);
-        } else {
-            return array('error'=> 'Could not save uploaded file.' .
-                'The upload was cancelled, or server error encountered');
-        }
-        
-    }    
-}
-
-// list of valid extensions, ex. array("jpeg", "xml", "bmp")
-$allowedExtensions = array();
-// max file size in bytes
-$sizeLimit = 10 * 1024 * 1024;
-
-$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
-$result = $uploader->handleUpload('uploads/');
-// to pass data through iframe you will need to encode all html tags
-echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);
diff --git a/addon/js_upload/file-uploader/server/readme.txt b/addon/js_upload/file-uploader/server/readme.txt
deleted file mode 100644 (file)
index 8363c0b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-The server-side code should consist of two parts.
-
-1. For IE6-8, Opera, older versions of other browsers you get the file as
-you normally do with regular form-base uploads.
-
-2. For browsers which upload file with progress bar, you will need to get the raw
-post data and write it to the file.
-
-## Return values ##
-
-You should return json as a text/html, and escape all
-'<' as '&lt;', '>' as '&gt;', and '&' as '&amp;'.
-
-Return
-{"success":true} when upload was successful
-{"error":"error message to display"} in case of error
-
-Send me a mail to andrew (at) valums.com, if you will have any questions.
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/server/uploads/.gitignore b/addon/js_upload/file-uploader/server/uploads/.gitignore
deleted file mode 100644 (file)
index c96a04f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/action-acceptance.php b/addon/js_upload/file-uploader/tests/action-acceptance.php
deleted file mode 100644 (file)
index fc9583f..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-usleep(100000);
-
-$fileName;
-$fileSize;
-
-if (isset($_GET['qqfile'])){
-    $fileName = $_GET['qqfile'];
-    
-       // xhr request
-       $headers = apache_request_headers();
-       $fileSize = (int)$headers['Content-Length'];
-} elseif (isset($_FILES['qqfile'])){
-    $fileName = basename($_FILES['qqfile']['name']);
-    $fileSize = $_FILES['qqfile']['size'];
-} else {
-       die ('{error: "server-error file not passed"}');
-}
-
-if ($fileName == '4text.txt'){
-    die ('jsgkdfgu4eyij');
-}
-
-if ($fileSize == 0){
-    die ('{error: "server-error file size is zero"}');
-}
-
-if ($fileSize < 10){
-    die ('{error: "server-error file size is smaller than 10 bytes"}');
-}
-
-if ($fileSize > 9 * 1024){
-    die ('{error: "server-error file size is bigger than 9kB"}');
-}
-
-if (count($_GET)){     
-    array_merge($_GET, array('fileName'=>$fileName));
-    
-    $response = array_merge($_GET, array('success'=>true, 'fileName'=>$fileName));
-    
-    // to pass data through iframe you will need to encode all html tags               
-       echo htmlspecialchars(json_encode($response), ENT_NOQUOTES);    
-} else {
-       die ('{error: "server-error  query params not passed"}');
-}
diff --git a/addon/js_upload/file-uploader/tests/action-handler-queue-test.php b/addon/js_upload/file-uploader/tests/action-handler-queue-test.php
deleted file mode 100644 (file)
index ff13576..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-sleep(4);
-
-$fileName;
-
-if (isset($_GET['qqfile'])){
-    $fileName = $_GET['qqfile'];
-    
-       // xhr request
-       $headers = apache_request_headers();
-       if ((int)$headers['Content-Length'] == 0){
-               die ('{error: "content length is zero"}');
-       }
-} elseif (isset($_FILES['qqfile'])){
-    $fileName = basename($_FILES['qqfile']['name']);
-    
-       // form request
-       if ($_FILES['qqfile']['size'] == 0){
-               die ('{error: "file size is zero"}');
-       }
-} else {
-       die ('{error: "file not passed"}');
-}
-
-if (count($_GET)){
-    $_GET['success'] = true;
-       echo json_encode(array_merge($_GET));   
-} else {
-       die ('{error: "query params not passed"}');
-}
diff --git a/addon/js_upload/file-uploader/tests/action-handler-test.php b/addon/js_upload/file-uploader/tests/action-handler-test.php
deleted file mode 100644 (file)
index 24466b1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-usleep(300);
-
-$fileName;
-
-if (isset($_GET['qqfile'])){
-    $fileName = $_GET['qqfile'];
-    
-       // xhr request
-       $headers = apache_request_headers();
-       if ((int)$headers['Content-Length'] == 0){
-               die ('{error: "content length is zero"}');
-       }
-} elseif (isset($_FILES['qqfile'])){
-    $fileName = basename($_FILES['qqfile']['name']);
-    
-       // form request
-       if ($_FILES['qqfile']['size'] == 0){
-               die ('{error: "file size is zero"}');
-       }
-} else {
-       die ('{error: "file not passed"}');
-}
-
-if (count($_GET)){
-       //return query params
-       echo json_encode(array_merge($_GET, array('fileName'=>$fileName)));     
-} else {
-       die ('{error: "query params not passed"}');
-}
diff --git a/addon/js_upload/file-uploader/tests/action-slow-response.php b/addon/js_upload/file-uploader/tests/action-slow-response.php
deleted file mode 100644 (file)
index 15c38d8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php
-sleep(9);
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/browser-bugs/safari-bug1.htm b/addon/js_upload/file-uploader/tests/browser-bugs/safari-bug1.htm
deleted file mode 100644 (file)
index ef0eb0b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-</head>
-<body>      
-    <p>Drag multiple files into input field. (Win7)</p>
-    <p>Result: One file is selected multiple times. Expected: Multiple files are selected.</p>
-    <input type="file" multiple></body>
-</html>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/browser-bugs/safari-bug2.htm b/addon/js_upload/file-uploader/tests/browser-bugs/safari-bug2.htm
deleted file mode 100644 (file)
index 57f7bc0..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-</head>
-<body>      
-
-<script>
-window.addEventListener('load', function(){
-    document.addEventListener('dragenter', function(e){
-        e.preventDefault();
-    },false);
-    document.addEventListener('dragover', function(e){
-        e.preventDefault();        
-        // e.dataTransfer.effectAllowed is none
-        e.dataTransfer.dropEffect = 'copy';
-    },false);    
-},false);
-</script>
-</html>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/application-javascript.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/application-javascript.php
deleted file mode 100644 (file)
index a91c75f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?php header('Content-type: application/javascript'); ?>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/application-json.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/application-json.php
deleted file mode 100644 (file)
index c116125..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?php header('Content-type: application/json'); ?>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/header-404.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/header-404.php
deleted file mode 100644 (file)
index 17d8075..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php header("HTTP/1.0 404 Not Found"); ?>
-Not found!
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/somepage.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/somepage.php
deleted file mode 100644 (file)
index f0a2575..0000000
+++ /dev/null
@@ -1 +0,0 @@
-I'm a page.
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/text-html-large.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/text-html-large.php
deleted file mode 100644 (file)
index ac9682b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php 
-       header('Content-type: text/html');
-       
-       $data = str_repeat("a", 5000);
-        
-       echo htmlspecialchars(json_encode($data), ENT_NOQUOTES);
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/text-html.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/text-html.php
deleted file mode 100644 (file)
index b69a1c7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php 
-       header('Content-type: text/html');
-       $data = array(
-               'example' => "&a<computer networks>, to download means to receive data to a local system from a remote system, or to initiate such a data transfer. Examples of a remote system from which a download might be performed include a webserver, FTP server, email server, or other similar systems. A download can mean either any file that is offered for downloading or that has been downloaded, or the process of receiving such a file.The inverse operation, uploading, can refer to the sending of data from a local system to a remote system such as a server or another client with the intent that the remote system should store a copy of the data being transferred, or the initiation of such a process. The words first came into popular usage among computer users with the increased popularity of Bulletin Board Systems (BBSs), facilitated by the widespread distribution and implementation of dial-up access the in the 1970s",
-               'sub' => array('arr'=>array(10,20,30), 'boo'=>false)             
-       ); 
-       echo htmlspecialchars(json_encode($data), ENT_NOQUOTES);
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/text-javascript.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/text-javascript.php
deleted file mode 100644 (file)
index ee930d0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?php header('Content-type: text/javascript'); ?>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/iframe-content-tests/text-plain.php b/addon/js_upload/file-uploader/tests/iframe-content-tests/text-plain.php
deleted file mode 100644 (file)
index 90c1af0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php header('Content-type: text/plain'); ?>
-text<p>P tag</p>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/jquery-1.4.2.min.js b/addon/js_upload/file-uploader/tests/jquery-1.4.2.min.js
deleted file mode 100644 (file)
index 7c24308..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/jquery-ui-1.8.4.custom.min.js b/addon/js_upload/file-uploader/tests/jquery-ui/jquery-ui-1.8.4.custom.min.js
deleted file mode 100644 (file)
index 891dcdd..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/*!
- * jQuery UI 1.8.4
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,
-b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,
-CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable",
-"off").css("MozUserSelect","")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none")},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
-"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=
-parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c.style(this,h,d(this,f)+"px")})};c.fn["outer"+
-b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c.style(this,h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==
-b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.4
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);
-b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):
-this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});
-this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f,
-h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=
-b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.4
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *     jquery.ui.widget.js
- */
-(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&
-this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();
-return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&
-this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-
-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.4
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h=
-0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+=
-g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k,
-elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"?
--b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position=
-"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.4
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.mouse.js
- *     jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
-d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
-this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,
-b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
-a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
-0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
-this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
-"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&
-a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),
-10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
-this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
-f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+
-this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+
-Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-
-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=
-this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.4"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");
-if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;
-c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=
-1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;
-this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=
-this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=
-d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;
-if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!=
-"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-
-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
-width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&
-o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=
-p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&
-(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
-10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.4
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.mouse.js
- *     jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
-if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
-d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=
-this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
-this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
-b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;
-f={width:c.size.width-(f?0:c.sizeDiff.width),height:c.size.height-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",
-b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=
-a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,
-k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),
-c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=
-this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+
-a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,
-arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,
-{version:"1.8.4"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,
-function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=
-(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=
-false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-
-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",
-b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top",
-"Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,
-f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=
-a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+
-a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&
-e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",
-height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=
-d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.4
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- *     jquery.ui.core.js
- *     jquery.ui.widget.js
- *  jquery.ui.button.js
- *     jquery.ui.draggable.js
- *     jquery.ui.mouse.js
- *     jquery.ui.position.js
- *     jquery.ui.resizable.js
- */
-(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");
-if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||"&#160;",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false,
-i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);
-return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&
-g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");
-b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=
-f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);
-a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,
-f=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('<button type="button"></button>').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position,
-offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);
-b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(),
-handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,
-a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a);
-f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b?
-d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&&
-d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-
-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
-create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
-function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
deleted file mode 100644 (file)
index 954e22d..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
deleted file mode 100644 (file)
index 64ece57..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
deleted file mode 100644 (file)
index abdc010..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
deleted file mode 100644 (file)
index 9b383f4..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
deleted file mode 100644 (file)
index a23baad..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644 (file)
index 42ccba2..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
deleted file mode 100644 (file)
index 1b1972b..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
deleted file mode 100644 (file)
index f127367..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
deleted file mode 100644 (file)
index 359397a..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_222222_256x240.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_222222_256x240.png
deleted file mode 100644 (file)
index b273ff1..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_222222_256x240.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_228ef1_256x240.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_228ef1_256x240.png
deleted file mode 100644 (file)
index a641a37..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_228ef1_256x240.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ef8c08_256x240.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ef8c08_256x240.png
deleted file mode 100644 (file)
index 85e63e9..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ef8c08_256x240.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffd27a_256x240.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffd27a_256x240.png
deleted file mode 100644 (file)
index e117eff..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffd27a_256x240.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffffff_256x240.png b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffffff_256x240.png
deleted file mode 100644 (file)
index 42f8f99..0000000
Binary files a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/images/ui-icons_ffffff_256x240.png and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/jquery-ui-1.8.4.custom.css b/addon/js_upload/file-uploader/tests/jquery-ui/ui-lightness/jquery-ui-1.8.4.custom.css
deleted file mode 100644 (file)
index 39bc7be..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * jQuery UI CSS Framework @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
- * jQuery UI Resizable @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Dialog @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative;  }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } 
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/addon/js_upload/file-uploader/tests/qunit/package.json b/addon/js_upload/file-uploader/tests/qunit/package.json
deleted file mode 100644 (file)
index b6044c8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-       "name": "qunit",
-       "author": {
-               "name": "John Resig",
-               "email": "jeresig@gmail.com",
-               "url": "http://ejohn.org/"
-       },
-       "maintainer": {
-               "name": "Jörn Zaefferer",
-               "email": "joern.zaefferer@googlemail.com",
-               "url": "http://bassistance.de/"
-       },
-       "url": "http://docs.jquery.com/QUnit",
-       "license": {
-               "name": "MIT",
-               "url": "http://www.opensource.org/licenses/mit-license.php"
-       },
-       "description": "An easy-to-use JavaScript Unit Testing framework.",
-       "keywords": [ "testing", "unit", "jquery" ],
-       "lib": "qunit"
-}
diff --git a/addon/js_upload/file-uploader/tests/qunit/qunit/qunit.css b/addon/js_upload/file-uploader/tests/qunit/qunit/qunit.css
deleted file mode 100644 (file)
index 5714bf4..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-
-ol#qunit-tests {
-       font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
-       margin:0;
-       padding:0;
-       list-style-position:inside;
-
-       font-size: smaller;
-}
-ol#qunit-tests li{
-       padding:0.4em 0.5em 0.4em 2.5em;
-       border-bottom:1px solid #fff;
-       font-size:small;
-       list-style-position:inside;
-}
-ol#qunit-tests li ol{
-       box-shadow: inset 0px 2px 13px #999;
-       -moz-box-shadow: inset 0px 2px 13px #999;
-       -webkit-box-shadow: inset 0px 2px 13px #999;
-       margin-top:0.5em;
-       margin-left:0;
-       padding:0.5em;
-       background-color:#fff;
-       border-radius:15px;
-       -moz-border-radius: 15px;
-       -webkit-border-radius: 15px;
-}
-ol#qunit-tests li li{
-       border-bottom:none;
-       margin:0.5em;
-       background-color:#fff;
-       list-style-position: inside;
-       padding:0.4em 0.5em 0.4em 0.5em;
-}
-
-ol#qunit-tests li li.pass{
-       border-left:26px solid #C6E746;
-       background-color:#fff;
-       color:#5E740B;
-       }
-ol#qunit-tests li li.fail{
-       border-left:26px solid #EE5757;
-       background-color:#fff;
-       color:#710909;
-}
-ol#qunit-tests li.pass{
-       background-color:#D2E0E6;
-       color:#528CE0;
-}
-ol#qunit-tests li.fail{
-       background-color:#EE5757;
-       color:#000;
-}
-ol#qunit-tests li strong {
-       cursor:pointer;
-}
-h1#qunit-header{
-       background-color:#0d3349;
-       margin:0;
-       padding:0.5em 0 0.5em 1em;
-       color:#fff;
-       font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
-       border-top-right-radius:15px;
-       border-top-left-radius:15px;
-       -moz-border-radius-topright:15px;
-       -moz-border-radius-topleft:15px;
-       -webkit-border-top-right-radius:15px;
-       -webkit-border-top-left-radius:15px;
-       text-shadow: rgba(0, 0, 0, 0.5) 4px 4px 1px;
-}
-h2#qunit-banner{
-       font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
-       height:5px;
-       margin:0;
-       padding:0;
-}
-h2#qunit-banner.qunit-pass{
-       background-color:#C6E746;
-}
-h2#qunit-banner.qunit-fail, #qunit-testrunner-toolbar {
-       background-color:#EE5757;
-}
-#qunit-testrunner-toolbar {
-       font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
-       padding:0;
-       /*width:80%;*/
-       padding:0em 0 0.5em 2em;
-       font-size: small;
-}
-h2#qunit-userAgent {
-       font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
-       background-color:#2b81af;
-       margin:0;
-       padding:0;
-       color:#fff;
-       font-size: small;
-       padding:0.5em 0 0.5em 2.5em;
-       text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
-}
-p#qunit-testresult{
-       font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
-       margin:0;
-       font-size: small;
-       color:#2b81af;
-       border-bottom-right-radius:15px;
-       border-bottom-left-radius:15px;
-       -moz-border-radius-bottomright:15px;
-       -moz-border-radius-bottomleft:15px;
-       -webkit-border-bottom-right-radius:15px;
-       -webkit-border-bottom-left-radius:15px;
-       background-color:#D2E0E6;
-       padding:0.5em 0.5em 0.5em 2.5em;
-}
-strong b.fail{
-       color:#710909;
-       }
-strong b.pass{
-       color:#5E740B;
-       }
diff --git a/addon/js_upload/file-uploader/tests/qunit/qunit/qunit.js b/addon/js_upload/file-uploader/tests/qunit/qunit/qunit.js
deleted file mode 100644 (file)
index 9ef5f8d..0000000
+++ /dev/null
@@ -1,1069 +0,0 @@
-/*
- * QUnit - A JavaScript Unit Testing Framework
- * 
- * http://docs.jquery.com/QUnit
- *
- * Copyright (c) 2009 John Resig, Jörn Zaefferer
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- */
-
-(function(window) {
-
-var QUnit = {
-
-       // Initialize the configuration options
-       init: function() {
-               config = {
-                       stats: { all: 0, bad: 0 },
-                       moduleStats: { all: 0, bad: 0 },
-                       started: +new Date,
-                       updateRate: 1000,
-                       blocking: false,
-                       autorun: false,
-                       assertions: [],
-                       filters: [],
-                       queue: []
-               };
-
-               var tests = id("qunit-tests"),
-                       banner = id("qunit-banner"),
-                       result = id("qunit-testresult");
-
-               if ( tests ) {
-                       tests.innerHTML = "";
-               }
-
-               if ( banner ) {
-                       banner.className = "";
-               }
-
-               if ( result ) {
-                       result.parentNode.removeChild( result );
-               }
-       },
-       
-       // call on start of module test to prepend name to all tests
-       module: function(name, testEnvironment) {
-               config.currentModule = name;
-
-               synchronize(function() {
-                       if ( config.currentModule ) {
-                               QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all );
-                       }
-
-                       config.currentModule = name;
-                       config.moduleTestEnvironment = testEnvironment;
-                       config.moduleStats = { all: 0, bad: 0 };
-
-                       QUnit.moduleStart( name, testEnvironment );
-               });
-       },
-
-       asyncTest: function(testName, expected, callback) {
-               if ( arguments.length === 2 ) {
-                       callback = expected;
-                       expected = 0;
-               }
-
-               QUnit.test(testName, expected, callback, true);
-       },
-       
-       test: function(testName, expected, callback, async) {
-               var name = testName, testEnvironment, testEnvironmentArg;
-
-               if ( arguments.length === 2 ) {
-                       callback = expected;
-                       expected = null;
-               }
-               // is 2nd argument a testEnvironment?
-               if ( expected && typeof expected === 'object') {
-                       testEnvironmentArg =  expected;
-                       expected = null;
-               }
-
-               if ( config.currentModule ) {
-                       name = config.currentModule + " module: " + name;
-               }
-
-               if ( !validTest(name) ) {
-                       return;
-               }
-
-               synchronize(function() {
-                       QUnit.testStart( testName );
-
-                       testEnvironment = extend({
-                               setup: function() {},
-                               teardown: function() {}
-                       }, config.moduleTestEnvironment);
-                       if (testEnvironmentArg) {
-                               extend(testEnvironment,testEnvironmentArg);
-                       }
-
-                       // allow utility functions to access the current test environment
-                       QUnit.current_testEnvironment = testEnvironment;
-                       
-                       config.assertions = [];
-                       config.expected = expected;
-
-                       try {
-                               if ( !config.pollution ) {
-                                       saveGlobal();
-                               }
-
-                               testEnvironment.setup.call(testEnvironment);
-                       } catch(e) {
-                               QUnit.ok( false, "Setup failed on " + name + ": " + e.message );
-                       }
-
-                       if ( async ) {
-                               QUnit.stop();
-                       }
-
-                       try {
-                               callback.call(testEnvironment);
-                       } catch(e) {
-                               fail("Test " + name + " died, exception and test follows", e, callback);
-                               QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message );
-                               // else next test will carry the responsibility
-                               saveGlobal();
-
-                               // Restart the tests if they're blocking
-                               if ( config.blocking ) {
-                                       start();
-                               }
-                       }
-               });
-
-               synchronize(function() {
-                       try {
-                               checkPollution();
-                               testEnvironment.teardown.call(testEnvironment);
-                       } catch(e) {
-                               QUnit.ok( false, "Teardown failed on " + name + ": " + e.message );
-                       }
-
-                       try {
-                               QUnit.reset();
-                       } catch(e) {
-                               fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset);
-                       }
-
-                       if ( config.expected && config.expected != config.assertions.length ) {
-                               QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" );
-                       }
-
-                       var good = 0, bad = 0,
-                               tests = id("qunit-tests");
-
-                       config.stats.all += config.assertions.length;
-                       config.moduleStats.all += config.assertions.length;
-
-                       if ( tests ) {
-                               var ol  = document.createElement("ol");
-                               ol.style.display = "none";
-
-                               for ( var i = 0; i < config.assertions.length; i++ ) {
-                                       var assertion = config.assertions[i];
-
-                                       var li = document.createElement("li");
-                                       li.className = assertion.result ? "pass" : "fail";
-                                       li.appendChild(document.createTextNode(assertion.message || "(no message)"));
-                                       ol.appendChild( li );
-
-                                       if ( assertion.result ) {
-                                               good++;
-                                       } else {
-                                               bad++;
-                                               config.stats.bad++;
-                                               config.moduleStats.bad++;
-                                       }
-                               }
-
-                               var b = document.createElement("strong");
-                               b.innerHTML = name + " <b style='color:black;'>(<b class='fail'>" + bad + "</b>, <b class='pass'>" + good + "</b>, " + config.assertions.length + ")</b>";
-                               
-                               addEvent(b, "click", function() {
-                                       var next = b.nextSibling, display = next.style.display;
-                                       next.style.display = display === "none" ? "block" : "none";
-                               });
-                               
-                               addEvent(b, "dblclick", function(e) {
-                                       var target = e && e.target ? e.target : window.event.srcElement;
-                                       if ( target.nodeName.toLowerCase() === "strong" ) {
-                                               var text = "", node = target.firstChild;
-
-                                               while ( node.nodeType === 3 ) {
-                                                       text += node.nodeValue;
-                                                       node = node.nextSibling;
-                                               }
-
-                                               text = text.replace(/(^\s*|\s*$)/g, "");
-
-                                               if ( window.location ) {
-                                                       window.location.href = window.location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent(text);
-                                               }
-                                       }
-                               });
-
-                               var li = document.createElement("li");
-                               li.className = bad ? "fail" : "pass";
-                               li.appendChild( b );
-                               li.appendChild( ol );
-                               tests.appendChild( li );
-
-                               if ( bad ) {
-                                       var toolbar = id("qunit-testrunner-toolbar");
-                                       if ( toolbar ) {
-                                               toolbar.style.display = "block";
-                                               id("qunit-filter-pass").disabled = null;
-                                               id("qunit-filter-missing").disabled = null;
-                                       }
-                               }
-
-                       } else {
-                               for ( var i = 0; i < config.assertions.length; i++ ) {
-                                       if ( !config.assertions[i].result ) {
-                                               bad++;
-                                               config.stats.bad++;
-                                               config.moduleStats.bad++;
-                                       }
-                               }
-                       }
-
-                       QUnit.testDone( testName, bad, config.assertions.length );
-
-                       if ( !window.setTimeout && !config.queue.length ) {
-                               done();
-                       }
-               });
-
-               if ( window.setTimeout && !config.doneTimer ) {
-                       config.doneTimer = window.setTimeout(function(){
-                               if ( !config.queue.length ) {
-                                       done();
-                               } else {
-                                       synchronize( done );
-                               }
-                       }, 13);
-               }
-       },
-       
-       /**
-        * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
-        */
-       expect: function(asserts) {
-               config.expected = asserts;
-       },
-
-       /**
-        * Asserts true.
-        * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
-        */
-       ok: function(a, msg) {
-               QUnit.log(a, msg);
-
-               config.assertions.push({
-                       result: !!a,
-                       message: msg
-               });
-       },
-
-       /**
-        * Checks that the first two arguments are equal, with an optional message.
-        * Prints out both actual and expected values.
-        *
-        * Prefered to ok( actual == expected, message )
-        *
-        * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
-        *
-        * @param Object actual
-        * @param Object expected
-        * @param String message (optional)
-        */
-       equal: function(actual, expected, message) {
-               push(expected == actual, actual, expected, message);
-       },
-
-       notEqual: function(actual, expected, message) {
-               push(expected != actual, actual, expected, message);
-       },
-       
-       deepEqual: function(a, b, message) {
-               push(QUnit.equiv(a, b), a, b, message);
-       },
-
-       notDeepEqual: function(a, b, message) {
-               push(!QUnit.equiv(a, b), a, b, message);
-       },
-
-       strictEqual: function(actual, expected, message) {
-               push(expected === actual, actual, expected, message);
-       },
-
-       notStrictEqual: function(actual, expected, message) {
-               push(expected !== actual, actual, expected, message);
-       },
-       
-       start: function() {
-               // A slight delay, to avoid any current callbacks
-               if ( window.setTimeout ) {
-                       window.setTimeout(function() {
-                               if ( config.timeout ) {
-                                       clearTimeout(config.timeout);
-                               }
-
-                               config.blocking = false;
-                               process();
-                       }, 13);
-               } else {
-                       config.blocking = false;
-                       process();
-               }
-       },
-       
-       stop: function(timeout) {
-               config.blocking = true;
-
-               if ( timeout && window.setTimeout ) {
-                       config.timeout = window.setTimeout(function() {
-                               QUnit.ok( false, "Test timed out" );
-                               QUnit.start();
-                       }, timeout);
-               }
-       },
-       
-       /**
-        * Resets the test setup. Useful for tests that modify the DOM.
-        */
-       reset: function() {
-               if ( window.jQuery ) {
-                       jQuery("#main").html( config.fixture );
-                       jQuery.event.global = {};
-                       jQuery.ajaxSettings = extend({}, config.ajaxSettings);
-               }
-       },
-       
-       /**
-        * Trigger an event on an element.
-        *
-        * @example triggerEvent( document.body, "click" );
-        *
-        * @param DOMElement elem
-        * @param String type
-        */
-       triggerEvent: function( elem, type, event ) {
-               if ( document.createEvent ) {
-                       event = document.createEvent("MouseEvents");
-                       event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
-                               0, 0, 0, 0, 0, false, false, false, false, 0, null);
-                       elem.dispatchEvent( event );
-
-               } else if ( elem.fireEvent ) {
-                       elem.fireEvent("on"+type);
-               }
-       },
-       
-       // Safe object type checking
-       is: function( type, obj ) {
-               return Object.prototype.toString.call( obj ) === "[object "+ type +"]";
-       },
-       
-       // Logging callbacks
-       done: function(failures, total) {},
-       log: function(result, message) {},
-       testStart: function(name) {},
-       testDone: function(name, failures, total) {},
-       moduleStart: function(name, testEnvironment) {},
-       moduleDone: function(name, failures, total) {}
-};
-
-// Backwards compatibility, deprecated
-QUnit.equals = QUnit.equal;
-QUnit.same = QUnit.deepEqual;
-
-// Maintain internal state
-var config = {
-       // The queue of tests to run
-       queue: [],
-
-       // block until document ready
-       blocking: true
-};
-
-// Load paramaters
-(function() {
-       var location = window.location || { search: "", protocol: "file:" },
-               GETParams = location.search.slice(1).split('&');
-
-       for ( var i = 0; i < GETParams.length; i++ ) {
-               GETParams[i] = decodeURIComponent( GETParams[i] );
-               if ( GETParams[i] === "noglobals" ) {
-                       GETParams.splice( i, 1 );
-                       i--;
-                       config.noglobals = true;
-               } else if ( GETParams[i].search('=') > -1 ) {
-                       GETParams.splice( i, 1 );
-                       i--;
-               }
-       }
-       
-       // restrict modules/tests by get parameters
-       config.filters = GETParams;
-       
-       // Figure out if we're running the tests from a server or not
-       QUnit.isLocal = !!(location.protocol === 'file:');
-})();
-
-// Expose the API as global variables, unless an 'exports'
-// object exists, in that case we assume we're in CommonJS
-if ( typeof exports === "undefined" || typeof require === "undefined" ) {
-       extend(window, QUnit);
-       window.QUnit = QUnit;
-} else {
-       extend(exports, QUnit);
-       exports.QUnit = QUnit;
-}
-
-if ( typeof document === "undefined" || document.readyState === "complete" ) {
-       config.autorun = true;
-}
-
-addEvent(window, "load", function() {
-       // Initialize the config, saving the execution queue
-       var oldconfig = extend({}, config);
-       QUnit.init();
-       extend(config, oldconfig);
-
-       config.blocking = false;
-
-       var userAgent = id("qunit-userAgent");
-       if ( userAgent ) {
-               userAgent.innerHTML = navigator.userAgent;
-       }
-       
-       var toolbar = id("qunit-testrunner-toolbar");
-       if ( toolbar ) {
-               toolbar.style.display = "none";
-               
-               var filter = document.createElement("input");
-               filter.type = "checkbox";
-               filter.id = "qunit-filter-pass";
-               filter.disabled = true;
-               addEvent( filter, "click", function() {
-                       var li = document.getElementsByTagName("li");
-                       for ( var i = 0; i < li.length; i++ ) {
-                               if ( li[i].className.indexOf("pass") > -1 ) {
-                                       li[i].style.display = filter.checked ? "none" : "";
-                               }
-                       }
-               });
-               toolbar.appendChild( filter );
-
-               var label = document.createElement("label");
-               label.setAttribute("for", "qunit-filter-pass");
-               label.innerHTML = "Hide passed tests";
-               toolbar.appendChild( label );
-
-               var missing = document.createElement("input");
-               missing.type = "checkbox";
-               missing.id = "qunit-filter-missing";
-               missing.disabled = true;
-               addEvent( missing, "click", function() {
-                       var li = document.getElementsByTagName("li");
-                       for ( var i = 0; i < li.length; i++ ) {
-                               if ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf('missing test - untested code is broken code') > - 1 ) {
-                                       li[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block";
-                               }
-                       }
-               });
-               toolbar.appendChild( missing );
-
-               label = document.createElement("label");
-               label.setAttribute("for", "qunit-filter-missing");
-               label.innerHTML = "Hide missing tests (untested code is broken code)";
-               toolbar.appendChild( label );
-       }
-
-       var main = id('main');
-       if ( main ) {
-               config.fixture = main.innerHTML;
-       }
-
-       if ( window.jQuery ) {
-               config.ajaxSettings = window.jQuery.ajaxSettings;
-       }
-
-       QUnit.start();
-});
-
-function done() {
-       if ( config.doneTimer && window.clearTimeout ) {
-               window.clearTimeout( config.doneTimer );
-               config.doneTimer = null;
-       }
-
-       if ( config.queue.length ) {
-               config.doneTimer = window.setTimeout(function(){
-                       if ( !config.queue.length ) {
-                               done();
-                       } else {
-                               synchronize( done );
-                       }
-               }, 13);
-
-               return;
-       }
-
-       config.autorun = true;
-
-       // Log the last module results
-       if ( config.currentModule ) {
-               QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all );
-       }
-
-       var banner = id("qunit-banner"),
-               tests = id("qunit-tests"),
-               html = ['Tests completed in ',
-               +new Date - config.started, ' milliseconds.<br/>',
-               '<span class="passed">', config.stats.all - config.stats.bad, '</span> tests of <span class="total">', config.stats.all, '</span> passed, <span class="failed">', config.stats.bad,'</span> failed.'].join('');
-
-       if ( banner ) {
-               banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
-       }
-
-       if ( tests ) {  
-               var result = id("qunit-testresult");
-
-               if ( !result ) {
-                       result = document.createElement("p");
-                       result.id = "qunit-testresult";
-                       result.className = "result";
-                       tests.parentNode.insertBefore( result, tests.nextSibling );
-               }
-
-               result.innerHTML = html;
-       }
-
-       QUnit.done( config.stats.bad, config.stats.all );
-}
-
-function validTest( name ) {
-       var i = config.filters.length,
-               run = false;
-
-       if ( !i ) {
-               return true;
-       }
-       
-       while ( i-- ) {
-               var filter = config.filters[i],
-                       not = filter.charAt(0) == '!';
-
-               if ( not ) {
-                       filter = filter.slice(1);
-               }
-
-               if ( name.indexOf(filter) !== -1 ) {
-                       return !not;
-               }
-
-               if ( not ) {
-                       run = true;
-               }
-       }
-
-       return run;
-}
-
-function push(result, actual, expected, message) {
-       message = message || (result ? "okay" : "failed");
-       QUnit.ok( result, result ? message + ": " + QUnit.jsDump.parse(expected) : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) );
-}
-
-function synchronize( callback ) {
-       config.queue.push( callback );
-
-       if ( config.autorun && !config.blocking ) {
-               process();
-       }
-}
-
-function process() {
-       var start = (new Date()).getTime();
-
-       while ( config.queue.length && !config.blocking ) {
-               if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
-                       config.queue.shift()();
-
-               } else {
-                       setTimeout( process, 13 );
-                       break;
-               }
-       }
-}
-
-function saveGlobal() {
-       config.pollution = [];
-       
-       if ( config.noglobals ) {
-               for ( var key in window ) {
-                       config.pollution.push( key );
-               }
-       }
-}
-
-function checkPollution( name ) {
-       var old = config.pollution;
-       saveGlobal();
-       
-       var newGlobals = diff( old, config.pollution );
-       if ( newGlobals.length > 0 ) {
-               ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
-               config.expected++;
-       }
-
-       var deletedGlobals = diff( config.pollution, old );
-       if ( deletedGlobals.length > 0 ) {
-               ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
-               config.expected++;
-       }
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
-       var result = a.slice();
-       for ( var i = 0; i < result.length; i++ ) {
-               for ( var j = 0; j < b.length; j++ ) {
-                       if ( result[i] === b[j] ) {
-                               result.splice(i, 1);
-                               i--;
-                               break;
-                       }
-               }
-       }
-       return result;
-}
-
-function fail(message, exception, callback) {
-       if ( typeof console !== "undefined" && console.error && console.warn ) {
-               console.error(message);
-               console.error(exception);
-               console.warn(callback.toString());
-
-       } else if ( window.opera && opera.postError ) {
-               opera.postError(message, exception, callback.toString);
-       }
-}
-
-function extend(a, b) {
-       for ( var prop in b ) {
-               a[prop] = b[prop];
-       }
-
-       return a;
-}
-
-function addEvent(elem, type, fn) {
-       if ( elem.addEventListener ) {
-               elem.addEventListener( type, fn, false );
-       } else if ( elem.attachEvent ) {
-               elem.attachEvent( "on" + type, fn );
-       } else {
-               fn();
-       }
-}
-
-function id(name) {
-       return !!(typeof document !== "undefined" && document && document.getElementById) &&
-               document.getElementById( name );
-}
-
-// Test for equality any JavaScript type.
-// Discussions and reference: http://philrathe.com/articles/equiv
-// Test suites: http://philrathe.com/tests/equiv
-// Author: Philippe Rathé <prathe@gmail.com>
-QUnit.equiv = function () {
-
-    var innerEquiv; // the real equiv function
-    var callers = []; // stack to decide between skip/abort functions
-    var parents = []; // stack to avoiding loops from circular referencing
-
-
-    // Determine what is o.
-    function hoozit(o) {
-        if (QUnit.is("String", o)) {
-            return "string";
-            
-        } else if (QUnit.is("Boolean", o)) {
-            return "boolean";
-
-        } else if (QUnit.is("Number", o)) {
-
-            if (isNaN(o)) {
-                return "nan";
-            } else {
-                return "number";
-            }
-
-        } else if (typeof o === "undefined") {
-            return "undefined";
-
-        // consider: typeof null === object
-        } else if (o === null) {
-            return "null";
-
-        // consider: typeof [] === object
-        } else if (QUnit.is( "Array", o)) {
-            return "array";
-        
-        // consider: typeof new Date() === object
-        } else if (QUnit.is( "Date", o)) {
-            return "date";
-
-        // consider: /./ instanceof Object;
-        //           /./ instanceof RegExp;
-        //          typeof /./ === "function"; // => false in IE and Opera,
-        //                                          true in FF and Safari
-        } else if (QUnit.is( "RegExp", o)) {
-            return "regexp";
-
-        } else if (typeof o === "object") {
-            return "object";
-
-        } else if (QUnit.is( "Function", o)) {
-            return "function";
-        } else {
-            return undefined;
-        }
-    }
-
-    // Call the o related callback with the given arguments.
-    function bindCallbacks(o, callbacks, args) {
-        var prop = hoozit(o);
-        if (prop) {
-            if (hoozit(callbacks[prop]) === "function") {
-                return callbacks[prop].apply(callbacks, args);
-            } else {
-                return callbacks[prop]; // or undefined
-            }
-        }
-    }
-    
-    var callbacks = function () {
-
-        // for string, boolean, number and null
-        function useStrictEquality(b, a) {
-            if (b instanceof a.constructor || a instanceof b.constructor) {
-                // to catch short annotaion VS 'new' annotation of a declaration
-                // e.g. var i = 1;
-                //      var j = new Number(1);
-                return a == b;
-            } else {
-                return a === b;
-            }
-        }
-
-        return {
-            "string": useStrictEquality,
-            "boolean": useStrictEquality,
-            "number": useStrictEquality,
-            "null": useStrictEquality,
-            "undefined": useStrictEquality,
-
-            "nan": function (b) {
-                return isNaN(b);
-            },
-
-            "date": function (b, a) {
-                return hoozit(b) === "date" && a.valueOf() === b.valueOf();
-            },
-
-            "regexp": function (b, a) {
-                return hoozit(b) === "regexp" &&
-                    a.source === b.source && // the regex itself
-                    a.global === b.global && // and its modifers (gmi) ...
-                    a.ignoreCase === b.ignoreCase &&
-                    a.multiline === b.multiline;
-            },
-
-            // - skip when the property is a method of an instance (OOP)
-            // - abort otherwise,
-            //   initial === would have catch identical references anyway
-            "function": function () {
-                var caller = callers[callers.length - 1];
-                return caller !== Object &&
-                        typeof caller !== "undefined";
-            },
-
-            "array": function (b, a) {
-                var i, j, loop;
-                var len;
-
-                // b could be an object literal here
-                if ( ! (hoozit(b) === "array")) {
-                    return false;
-                }   
-                
-                len = a.length;
-                if (len !== b.length) { // safe and faster
-                    return false;
-                }
-                
-                //track reference to avoid circular references
-                parents.push(a);
-                for (i = 0; i < len; i++) {
-                    loop = false;
-                    for(j=0;j<parents.length;j++){
-                        if(parents[j] === a[i]){
-                            loop = true;//dont rewalk array
-                        }
-                    }
-                    if (!loop && ! innerEquiv(a[i], b[i])) {
-                        parents.pop();
-                        return false;
-                    }
-                }
-                parents.pop();
-                return true;
-            },
-
-            "object": function (b, a) {
-                var i, j, loop;
-                var eq = true; // unless we can proove it
-                var aProperties = [], bProperties = []; // collection of strings
-
-                // comparing constructors is more strict than using instanceof
-                if ( a.constructor !== b.constructor) {
-                    return false;
-                }
-
-                // stack constructor before traversing properties
-                callers.push(a.constructor);
-                //track reference to avoid circular references
-                parents.push(a);
-                
-                for (i in a) { // be strict: don't ensures hasOwnProperty and go deep
-                    loop = false;
-                    for(j=0;j<parents.length;j++){
-                        if(parents[j] === a[i])
-                            loop = true; //don't go down the same path twice
-                    }
-                    aProperties.push(i); // collect a's properties
-
-                    if (!loop && ! innerEquiv(a[i], b[i])) {
-                        eq = false;
-                        break;
-                    }
-                }
-
-                callers.pop(); // unstack, we are done
-                parents.pop();
-
-                for (i in b) {
-                    bProperties.push(i); // collect b's properties
-                }
-
-                // Ensures identical properties name
-                return eq && innerEquiv(aProperties.sort(), bProperties.sort());
-            }
-        };
-    }();
-
-    innerEquiv = function () { // can take multiple arguments
-        var args = Array.prototype.slice.apply(arguments);
-        if (args.length < 2) {
-            return true; // end transition
-        }
-
-        return (function (a, b) {
-            if (a === b) {
-                return true; // catch the most you can
-            } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) {
-                return false; // don't lose time with error prone cases
-            } else {
-                return bindCallbacks(a, callbacks, [b, a]);
-            }
-
-        // apply transition with (1..n) arguments
-        })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));
-    };
-
-    return innerEquiv;
-
-}();
-
-/**
- * jsDump
- * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
- * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)
- * Date: 5/15/2008
- * @projectDescription Advanced and extensible data dumping for Javascript.
- * @version 1.0.0
- * @author Ariel Flesler
- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
- */
-QUnit.jsDump = (function() {
-       function quote( str ) {
-               return '"' + str.toString().replace(/"/g, '\\"') + '"';
-       };
-       function literal( o ) {
-               return o + '';  
-       };
-       function join( pre, arr, post ) {
-               var s = jsDump.separator(),
-                       base = jsDump.indent(),
-                       inner = jsDump.indent(1);
-               if ( arr.join )
-                       arr = arr.join( ',' + s + inner );
-               if ( !arr )
-                       return pre + post;
-               return [ pre, inner + arr, base + post ].join(s);
-       };
-       function array( arr ) {
-               var i = arr.length,     ret = Array(i);                                 
-               this.up();
-               while ( i-- )
-                       ret[i] = this.parse( arr[i] );                          
-               this.down();
-               return join( '[', ret, ']' );
-       };
-       
-       var reName = /^function (\w+)/;
-       
-       var jsDump = {
-               parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance
-                       var     parser = this.parsers[ type || this.typeOf(obj) ];
-                       type = typeof parser;                   
-                       
-                       return type == 'function' ? parser.call( this, obj ) :
-                                  type == 'string' ? parser :
-                                  this.parsers.error;
-               },
-               typeOf:function( obj ) {
-                       var type;
-                       if ( obj === null ) {
-                               type = "null";
-                       } else if (typeof obj === "undefined") {
-                               type = "undefined";
-                       } else if (QUnit.is("RegExp", obj)) {
-                               type = "regexp";
-                       } else if (QUnit.is("Date", obj)) {
-                               type = "date";
-                       } else if (QUnit.is("Function", obj)) {
-                               type = "function";
-                       } else if (obj.setInterval && obj.document && !obj.nodeType) {
-                               type = "window";
-                       } else if (obj.nodeType === 9) {
-                               type = "document";
-                       } else if (obj.nodeType) {
-                               type = "node";
-                       } else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
-                               type = "array";
-                       } else {
-                               type = typeof obj;
-                       }
-                       return type;
-               },
-               separator:function() {
-                       return this.multiline ? this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
-               },
-               indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
-                       if ( !this.multiline )
-                               return '';
-                       var chr = this.indentChar;
-                       if ( this.HTML )
-                               chr = chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');
-                       return Array( this._depth_ + (extra||0) ).join(chr);
-               },
-               up:function( a ) {
-                       this._depth_ += a || 1;
-               },
-               down:function( a ) {
-                       this._depth_ -= a || 1;
-               },
-               setParser:function( name, parser ) {
-                       this.parsers[name] = parser;
-               },
-               // The next 3 are exposed so you can use them
-               quote:quote, 
-               literal:literal,
-               join:join,
-               //
-               _depth_: 1,
-               // This is the list of parsers, to modify them, use jsDump.setParser
-               parsers:{
-                       window: '[Window]',
-                       document: '[Document]',
-                       error:'[ERROR]', //when no parser is found, shouldn't happen
-                       unknown: '[Unknown]',
-                       'null':'null',
-                       undefined:'undefined',
-                       'function':function( fn ) {
-                               var ret = 'function',
-                                       name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
-                               if ( name )
-                                       ret += ' ' + name;
-                               ret += '(';
-                               
-                               ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join('');
-                               return join( ret, this.parse(fn,'functionCode'), '}' );
-                       },
-                       array: array,
-                       nodelist: array,
-                       arguments: array,
-                       object:function( map ) {
-                               var ret = [ ];
-                               this.up();
-                               for ( var key in map )
-                                       ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) );
-                               this.down();
-                               return join( '{', ret, '}' );
-                       },
-                       node:function( node ) {
-                               var open = this.HTML ? '&lt;' : '<',
-                                       close = this.HTML ? '&gt;' : '>';
-                                       
-                               var tag = node.nodeName.toLowerCase(),
-                                       ret = open + tag;
-                                       
-                               for ( var a in this.DOMAttrs ) {
-                                       var val = node[this.DOMAttrs[a]];
-                                       if ( val )
-                                               ret += ' ' + a + '=' + this.parse( val, 'attribute' );
-                               }
-                               return ret + close + open + '/' + tag + close;
-                       },
-                       functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
-                               var l = fn.length;
-                               if ( !l ) return '';                            
-                               
-                               var args = Array(l);
-                               while ( l-- )
-                                       args[l] = String.fromCharCode(97+l);//97 is 'a'
-                               return ' ' + args.join(', ') + ' ';
-                       },
-                       key:quote, //object calls it internally, the key part of an item in a map
-                       functionCode:'[code]', //function calls it internally, it's the content of the function
-                       attribute:quote, //node calls it internally, it's an html attribute value
-                       string:quote,
-                       date:quote,
-                       regexp:literal, //regex
-                       number:literal,
-                       'boolean':literal
-               },
-               DOMAttrs:{//attributes to dump from nodes, name=>realName
-                       id:'id',
-                       name:'name',
-                       'class':'className'
-               },
-               HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
-               indentChar:'   ',//indentation unit
-               multiline:false //if true, items in a collection, are separated by a \n, else just a space.
-       };
-
-       return jsDump;
-})();
-
-})(this);
diff --git a/addon/js_upload/file-uploader/tests/qunit/test/index.html b/addon/js_upload/file-uploader/tests/qunit/test/index.html
deleted file mode 100644 (file)
index 8a9f865..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-       <title>QUnit Test Suite</title>
-       <link rel="stylesheet" href="../qunit/qunit.css" type="text/css" media="screen">
-       <script type="text/javascript" src="../qunit/qunit.js"></script>
-       <script type="text/javascript" src="test.js"></script>
-       <script type="text/javascript" src="same.js"></script>
-</head>
-<body>
-       <h1 id="qunit-header">QUnit Test Suite</h1>
-       <h2 id="qunit-banner"></h2>
-       <div id="qunit-testrunner-toolbar"></div>
-       <h2 id="qunit-userAgent"></h2>
-       <ol id="qunit-tests"></ol>
-</body>
-</html>
diff --git a/addon/js_upload/file-uploader/tests/qunit/test/same.js b/addon/js_upload/file-uploader/tests/qunit/test/same.js
deleted file mode 100644 (file)
index 8f1b563..0000000
+++ /dev/null
@@ -1,1423 +0,0 @@
-module("equiv");
-
-
-test("Primitive types and constants", function () {
-    equals(QUnit.equiv(null, null), true, "null");
-    equals(QUnit.equiv(null, {}), false, "null");
-    equals(QUnit.equiv(null, undefined), false, "null");
-    equals(QUnit.equiv(null, 0), false, "null");
-    equals(QUnit.equiv(null, false), false, "null");
-    equals(QUnit.equiv(null, ''), false, "null");
-    equals(QUnit.equiv(null, []), false, "null");
-
-    equals(QUnit.equiv(undefined, undefined), true, "undefined");
-    equals(QUnit.equiv(undefined, null), false, "undefined");
-    equals(QUnit.equiv(undefined, 0), false, "undefined");
-    equals(QUnit.equiv(undefined, false), false, "undefined");
-    equals(QUnit.equiv(undefined, {}), false, "undefined");
-    equals(QUnit.equiv(undefined, []), false, "undefined");
-    equals(QUnit.equiv(undefined, ""), false, "undefined");
-
-    // Nan usually doest not equal to Nan using the '==' operator.
-    // Only isNaN() is able to do it.
-    equals(QUnit.equiv(0/0, 0/0), true, "NaN"); // NaN VS NaN
-    equals(QUnit.equiv(1/0, 2/0), true, "Infinity"); // Infinity VS Infinity
-    equals(QUnit.equiv(-1/0, 2/0), false, "-Infinity, Infinity"); // -Infinity VS Infinity
-    equals(QUnit.equiv(-1/0, -2/0), true, "-Infinity, -Infinity"); // -Infinity VS -Infinity
-    equals(QUnit.equiv(0/0, 1/0), false, "NaN, Infinity"); // Nan VS Infinity
-    equals(QUnit.equiv(1/0, 0/0), false, "NaN, Infinity"); // Nan VS Infinity
-    equals(QUnit.equiv(0/0, null), false, "NaN");
-    equals(QUnit.equiv(0/0, undefined), false, "NaN");
-    equals(QUnit.equiv(0/0, 0), false, "NaN");
-    equals(QUnit.equiv(0/0, false), false, "NaN");
-    equals(QUnit.equiv(0/0, function () {}), false, "NaN");
-    equals(QUnit.equiv(1/0, null), false, "NaN, Infinity");
-    equals(QUnit.equiv(1/0, undefined), false, "NaN, Infinity");
-    equals(QUnit.equiv(1/0, 0), false, "NaN, Infinity");
-    equals(QUnit.equiv(1/0, 1), false, "NaN, Infinity");
-    equals(QUnit.equiv(1/0, false), false, "NaN, Infinity");
-    equals(QUnit.equiv(1/0, true), false, "NaN, Infinity");
-    equals(QUnit.equiv(1/0, function () {}), false, "NaN, Infinity");
-
-    equals(QUnit.equiv(0, 0), true, "number");
-    equals(QUnit.equiv(0, 1), false, "number");
-    equals(QUnit.equiv(1, 0), false, "number");
-    equals(QUnit.equiv(1, 1), true, "number");
-    equals(QUnit.equiv(1.1, 1.1), true, "number");
-    equals(QUnit.equiv(0.0000005, 0.0000005), true, "number");
-    equals(QUnit.equiv(0, ''), false, "number");
-    equals(QUnit.equiv(0, '0'), false, "number");
-    equals(QUnit.equiv(1, '1'), false, "number");
-    equals(QUnit.equiv(0, false), false, "number");
-    equals(QUnit.equiv(1, true), false, "number");
-
-    equals(QUnit.equiv(true, true), true, "boolean");
-    equals(QUnit.equiv(true, false), false, "boolean");
-    equals(QUnit.equiv(false, true), false, "boolean");
-    equals(QUnit.equiv(false, 0), false, "boolean");
-    equals(QUnit.equiv(false, null), false, "boolean");
-    equals(QUnit.equiv(false, undefined), false, "boolean");
-    equals(QUnit.equiv(true, 1), false, "boolean");
-    equals(QUnit.equiv(true, null), false, "boolean");
-    equals(QUnit.equiv(true, undefined), false, "boolean");
-
-    equals(QUnit.equiv('', ''), true, "string");
-    equals(QUnit.equiv('a', 'a'), true, "string");
-    equals(QUnit.equiv("foobar", "foobar"), true, "string");
-    equals(QUnit.equiv("foobar", "foo"), false, "string");
-    equals(QUnit.equiv('', 0), false, "string");
-    equals(QUnit.equiv('', false), false, "string");
-    equals(QUnit.equiv('', null), false, "string");
-    equals(QUnit.equiv('', undefined), false, "string");
-    
-    // Short annotation VS new annotation
-    equals(QUnit.equiv(0, new Number()), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Number(), 0), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(1, new Number(1)), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Number(1), 1), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Number(0), 1), false, "short annotation VS new annotation");
-    equals(QUnit.equiv(0, new Number(1)), false, "short annotation VS new annotation");
-
-    equals(QUnit.equiv(new String(), ""), true, "short annotation VS new annotation");
-    equals(QUnit.equiv("", new String()), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new String("My String"), "My String"), true, "short annotation VS new annotation");
-    equals(QUnit.equiv("My String", new String("My String")), true, "short annotation VS new annotation");
-    equals(QUnit.equiv("Bad String", new String("My String")), false, "short annotation VS new annotation");
-    equals(QUnit.equiv(new String("Bad String"), "My String"), false, "short annotation VS new annotation");
-
-    equals(QUnit.equiv(false, new Boolean()), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Boolean(), false), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(true, new Boolean(true)), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Boolean(true), true), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(true, new Boolean(1)), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(false, new Boolean(false)), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Boolean(false), false), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(false, new Boolean(0)), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(true, new Boolean(false)), false, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Boolean(false), true), false, "short annotation VS new annotation");
-
-    equals(QUnit.equiv(new Object(), {}), true, "short annotation VS new annotation");
-    equals(QUnit.equiv({}, new Object()), true, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Object(), {a:1}), false, "short annotation VS new annotation");
-    equals(QUnit.equiv({a:1}, new Object()), false, "short annotation VS new annotation");
-    equals(QUnit.equiv({a:undefined}, new Object()), false, "short annotation VS new annotation");
-    equals(QUnit.equiv(new Object(), {a:undefined}), false, "short annotation VS new annotation");
-});
-
-test("Objects Basics.", function() {
-    equals(QUnit.equiv({}, {}), true);
-    equals(QUnit.equiv({}, null), false);
-    equals(QUnit.equiv({}, undefined), false);
-    equals(QUnit.equiv({}, 0), false);
-    equals(QUnit.equiv({}, false), false);
-
-    // This test is a hard one, it is very important
-    // REASONS:
-    //      1) They are of the same type "object"
-    //      2) [] instanceof Object is true
-    //      3) Their properties are the same (doesn't exists)
-    equals(QUnit.equiv({}, []), false);
-
-    equals(QUnit.equiv({a:1}, {a:1}), true);
-    equals(QUnit.equiv({a:1}, {a:"1"}), false);
-    equals(QUnit.equiv({a:[]}, {a:[]}), true);
-    equals(QUnit.equiv({a:{}}, {a:null}), false);
-    equals(QUnit.equiv({a:1}, {}), false);
-    equals(QUnit.equiv({}, {a:1}), false);
-
-    // Hard ones
-    equals(QUnit.equiv({a:undefined}, {}), false);
-    equals(QUnit.equiv({}, {a:undefined}), false);
-    equals(QUnit.equiv(
-        {
-            a: [{ bar: undefined }]
-        },
-        {
-            a: [{ bat: undefined }]
-        }
-    ), false);
-});
-
-
-test("Arrays Basics.", function() {
-
-    equals(QUnit.equiv([], []), true);
-
-    // May be a hard one, can invoke a crash at execution.
-    // because their types are both "object" but null isn't
-    // like a true object, it doesn't have any property at all.
-    equals(QUnit.equiv([], null), false);
-
-    equals(QUnit.equiv([], undefined), false);
-    equals(QUnit.equiv([], false), false);
-    equals(QUnit.equiv([], 0), false);
-    equals(QUnit.equiv([], ""), false);
-
-    // May be a hard one, but less hard
-    // than {} with [] (note the order)
-    equals(QUnit.equiv([], {}), false);
-
-    equals(QUnit.equiv([null],[]), false);
-    equals(QUnit.equiv([undefined],[]), false);
-    equals(QUnit.equiv([],[null]), false);
-    equals(QUnit.equiv([],[undefined]), false);
-    equals(QUnit.equiv([null],[undefined]), false);
-    equals(QUnit.equiv([[]],[[]]), true);
-    equals(QUnit.equiv([[],[],[]],[[],[],[]]), true);
-    equals(QUnit.equiv(
-                            [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
-                            [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]),
-                            true);
-    equals(QUnit.equiv(
-                            [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
-                            [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]), // shorter
-                            false);
-    equals(QUnit.equiv(
-                            [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],
-                            [[],[],[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]), // deepest element not an array
-                            false);
-
-    // same multidimensional
-    equals(QUnit.equiv(
-                            [1,2,3,4,5,6,7,8,9, [
-                                1,2,3,4,5,6,7,8,9, [
-                                    1,2,3,4,5,[
-                                        [6,7,8,9, [
-                                            [
-                                                1,2,3,4,[
-                                                    2,3,4,[
-                                                        1,2,[
-                                                            1,2,3,4,[
-                                                                1,2,3,4,5,6,7,8,9,[
-                                                                    0
-                                                                ],1,2,3,4,5,6,7,8,9
-                                                            ],5,6,7,8,9
-                                                        ],4,5,6,7,8,9
-                                                    ],5,6,7,8,9
-                                                ],5,6,7
-                                            ]
-                                        ]
-                                    ]
-                                ]
-                            ]]],
-                            [1,2,3,4,5,6,7,8,9, [
-                                1,2,3,4,5,6,7,8,9, [
-                                    1,2,3,4,5,[
-                                        [6,7,8,9, [
-                                            [
-                                                1,2,3,4,[
-                                                    2,3,4,[
-                                                        1,2,[
-                                                            1,2,3,4,[
-                                                                1,2,3,4,5,6,7,8,9,[
-                                                                    0
-                                                                ],1,2,3,4,5,6,7,8,9
-                                                            ],5,6,7,8,9
-                                                        ],4,5,6,7,8,9
-                                                    ],5,6,7,8,9
-                                                ],5,6,7
-                                            ]
-                                        ]
-                                    ]
-                                ]
-                            ]]]),
-                            true, "Multidimensional");
-
-    // different multidimensional
-    equals(QUnit.equiv(
-                            [1,2,3,4,5,6,7,8,9, [
-                                1,2,3,4,5,6,7,8,9, [
-                                    1,2,3,4,5,[
-                                        [6,7,8,9, [
-                                            [
-                                                1,2,3,4,[
-                                                    2,3,4,[
-                                                        1,2,[
-                                                            1,2,3,4,[
-                                                                1,2,3,4,5,6,7,8,9,[
-                                                                    0
-                                                                ],1,2,3,4,5,6,7,8,9
-                                                            ],5,6,7,8,9
-                                                        ],4,5,6,7,8,9
-                                                    ],5,6,7,8,9
-                                                ],5,6,7
-                                            ]
-                                        ]
-                                    ]
-                                ]
-                            ]]],
-                            [1,2,3,4,5,6,7,8,9, [
-                                1,2,3,4,5,6,7,8,9, [
-                                    1,2,3,4,5,[
-                                        [6,7,8,9, [
-                                            [
-                                                1,2,3,4,[
-                                                    2,3,4,[
-                                                        1,2,[
-                                                            '1',2,3,4,[                 // string instead of number
-                                                                1,2,3,4,5,6,7,8,9,[
-                                                                    0
-                                                                ],1,2,3,4,5,6,7,8,9
-                                                            ],5,6,7,8,9
-                                                        ],4,5,6,7,8,9
-                                                    ],5,6,7,8,9
-                                                ],5,6,7
-                                            ]
-                                        ]
-                                    ]
-                                ]
-                            ]]]),
-                            false, "Multidimensional");
-
-    // different multidimensional
-    equals(QUnit.equiv(
-                            [1,2,3,4,5,6,7,8,9, [
-                                1,2,3,4,5,6,7,8,9, [
-                                    1,2,3,4,5,[
-                                        [6,7,8,9, [
-                                            [
-                                                1,2,3,4,[
-                                                    2,3,4,[
-                                                        1,2,[
-                                                            1,2,3,4,[
-                                                                1,2,3,4,5,6,7,8,9,[
-                                                                    0
-                                                                ],1,2,3,4,5,6,7,8,9
-                                                            ],5,6,7,8,9
-                                                        ],4,5,6,7,8,9
-                                                    ],5,6,7,8,9
-                                                ],5,6,7
-                                            ]
-                                        ]
-                                    ]
-                                ]
-                            ]]],
-                            [1,2,3,4,5,6,7,8,9, [
-                                1,2,3,4,5,6,7,8,9, [
-                                    1,2,3,4,5,[
-                                        [6,7,8,9, [
-                                            [
-                                                1,2,3,4,[
-                                                    2,3,[                   // missing an element (4)
-                                                        1,2,[
-                                                            1,2,3,4,[
-                                                                1,2,3,4,5,6,7,8,9,[
-                                                                    0
-                                                                ],1,2,3,4,5,6,7,8,9
-                                                            ],5,6,7,8,9
-                                                        ],4,5,6,7,8,9
-                                                    ],5,6,7,8,9
-                                                ],5,6,7
-                                            ]
-                                        ]
-                                    ]
-                                ]
-                            ]]]),
-                            false, "Multidimensional");
-});
-
-test("Functions.", function() {
-    var f0 = function () {};
-    var f1 = function () {};
-
-    // f2 and f3 have the same code, formatted differently
-    var f2 = function () {var i = 0;};
-    var f3 = function () {
-        var i = 0 // this comment and no semicoma as difference
-    };
-
-    equals(QUnit.equiv(function() {}, function() {}), false, "Anonymous functions"); // exact source code
-    equals(QUnit.equiv(function() {}, function() {return true;}), false, "Anonymous functions");
-
-    equals(QUnit.equiv(f0, f0), true, "Function references"); // same references
-    equals(QUnit.equiv(f0, f1), false, "Function references"); // exact source code, different references
-    equals(QUnit.equiv(f2, f3), false, "Function references"); // equivalent source code, different references
-    equals(QUnit.equiv(f1, f2), false, "Function references"); // different source code, different references
-    equals(QUnit.equiv(function() {}, true), false);
-    equals(QUnit.equiv(function() {}, undefined), false);
-    equals(QUnit.equiv(function() {}, null), false);
-    equals(QUnit.equiv(function() {}, {}), false);
-});
-
-
-test("Date instances.", function() {
-    // Date, we don't need to test Date.parse() because it returns a number.
-    // Only test the Date instances by setting them a fix date.
-    // The date use is midnight January 1, 1970
-    
-    var d1 = new Date();
-    d1.setTime(0); // fix the date
-
-    var d2 = new Date();
-    d2.setTime(0); // fix the date
-
-    var d3 = new Date(); // The very now
-
-    // Anyway their types differs, just in case the code fails in the order in which it deals with date
-    equals(QUnit.equiv(d1, 0), false); // d1.valueOf() returns 0, but d1 and 0 are different
-    // test same values date and different instances equality
-    equals(QUnit.equiv(d1, d2), true);
-    // test different date and different instances difference
-    equals(QUnit.equiv(d1, d3), false);
-});
-
-
-test("RegExp.", function() {
-    // Must test cases that imply those traps:
-    // var a = /./;
-    // a instanceof Object;        // Oops
-    // a instanceof RegExp;        // Oops
-    // typeof a === "function";    // Oops, false in IE and Opera, true in FF and Safari ("object")
-
-    // Tests same regex with same modifiers in different order
-    var r = /foo/;
-    var r5 = /foo/gim;
-    var r6 = /foo/gmi;
-    var r7 = /foo/igm;
-    var r8 = /foo/img;
-    var r9 = /foo/mig;
-    var r10 = /foo/mgi;
-    var ri1 = /foo/i;
-    var ri2 = /foo/i;
-    var rm1 = /foo/m;
-    var rm2 = /foo/m;
-    var rg1 = /foo/g;
-    var rg2 = /foo/g;
-
-    equals(QUnit.equiv(r5, r6), true, "Modifier order");
-    equals(QUnit.equiv(r5, r7), true, "Modifier order");
-    equals(QUnit.equiv(r5, r8), true, "Modifier order");
-    equals(QUnit.equiv(r5, r9), true, "Modifier order");
-    equals(QUnit.equiv(r5, r10), true, "Modifier order");
-    equals(QUnit.equiv(r, r5), false, "Modifier");
-
-    equals(QUnit.equiv(ri1, ri2), true, "Modifier");
-    equals(QUnit.equiv(r, ri1), false, "Modifier");
-    equals(QUnit.equiv(ri1, rm1), false, "Modifier");
-    equals(QUnit.equiv(r, rm1), false, "Modifier");
-    equals(QUnit.equiv(rm1, ri1), false, "Modifier");
-    equals(QUnit.equiv(rm1, rm2), true, "Modifier");
-    equals(QUnit.equiv(rg1, rm1), false, "Modifier");
-    equals(QUnit.equiv(rm1, rg1), false, "Modifier");
-    equals(QUnit.equiv(rg1, rg2), true, "Modifier");
-
-    // Different regex, same modifiers
-    var r11 = /[a-z]/gi;
-    var r13 = /[0-9]/gi; // oops! different
-    equals(QUnit.equiv(r11, r13), false, "Regex pattern");
-
-    var r14 = /0/ig;
-    var r15 = /"0"/ig; // oops! different
-    equals(QUnit.equiv(r14, r15), false, "Regex pattern");
-
-    var r1 = /[\n\r\u2028\u2029]/g;
-    var r2 = /[\n\r\u2028\u2029]/g;
-    var r3 = /[\n\r\u2028\u2028]/g; // differs from r1
-    var r4 = /[\n\r\u2028\u2029]/;  // differs from r1
-
-    equals(QUnit.equiv(r1, r2), true, "Regex pattern");
-    equals(QUnit.equiv(r1, r3), false, "Regex pattern");
-    equals(QUnit.equiv(r1, r4), false, "Regex pattern");
-
-    // More complex regex
-    var regex1 = "^[-_.a-z0-9]+@([-_a-z0-9]+\\.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
-    var regex2 = "^[-_.a-z0-9]+@([-_a-z0-9]+\\.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
-    // regex 3 is different: '.' not escaped
-    var regex3 = "^[-_.a-z0-9]+@([-_a-z0-9]+.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
-
-    var r21 = new RegExp(regex1);
-    var r22 = new RegExp(regex2);
-    var r23 = new RegExp(regex3); // diff from r21, not same pattern
-    var r23a = new RegExp(regex3, "gi"); // diff from r23, not same modifier
-    var r24a = new RegExp(regex3, "ig"); // same as r23a
-
-    equals(QUnit.equiv(r21, r22), true, "Complex Regex");
-    equals(QUnit.equiv(r21, r23), false, "Complex Regex");
-    equals(QUnit.equiv(r23, r23a), false, "Complex Regex");
-    equals(QUnit.equiv(r23a, r24a), true, "Complex Regex");
-
-    // typeof r1 is "function" in some browsers and "object" in others so we must cover this test
-    var re = / /;
-    equals(QUnit.equiv(re, function () {}), false, "Regex internal");
-    equals(QUnit.equiv(re, {}), false, "Regex internal");
-});
-
-
-test("Complex Objects.", function() {
-
-    function fn1() {
-        return "fn1";
-    }
-    function fn2() {
-        return "fn2";
-    }
-    
-    // Try to invert the order of some properties to make sure it is covered.
-    // It can failed when properties are compared between unsorted arrays.
-    equals(QUnit.equiv(
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                a: 3.14159,
-                b: false,
-                c: {
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    r: "r",
-                                    s: [1,2,3],
-                                    t: undefined,
-                                    u: 0,
-                                    v: {
-                                        w: {
-                                            x: {
-                                                y: "Yahoo!",
-                                                z: null
-                                            }
-                                        }
-                                    }
-                                },
-                                q: [],
-                                p: 1/0,
-                                o: 99
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    d: 0,
-                    i: true,
-                    h: "false"
-                }
-            },
-            e: undefined,
-            g: "",
-            h: "h",
-            f: {},
-            i: []
-        },
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                b: false,
-                a: 3.14159,
-                c: {
-                    d: 0,
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    r: "r",
-                                    t: undefined,
-                                    u: 0,
-                                    s: [1,2,3],
-                                    v: {
-                                        w: {
-                                            x: {
-                                                z: null,
-                                                y: "Yahoo!"
-                                            }
-                                        }
-                                    }
-                                },
-                                o: 99,
-                                p: 1/0,
-                                q: []
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    i: true,
-                    h: "false"
-                }
-            },
-            e: undefined,
-            g: "",
-            f: {},
-            h: "h",
-            i: []
-        }
-    ), true);
-
-    equals(QUnit.equiv(
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                a: 3.14159,
-                b: false,
-                c: {
-                    d: 0,
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    //r: "r",   // different: missing a property
-                                    s: [1,2,3],
-                                    t: undefined,
-                                    u: 0,
-                                    v: {
-                                        w: {
-                                            x: {
-                                                y: "Yahoo!",
-                                                z: null
-                                            }
-                                        }
-                                    }
-                                },
-                                o: 99,
-                                p: 1/0,
-                                q: []
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    h: "false",
-                    i: true
-                }
-            },
-            e: undefined,
-            f: {},
-            g: "",
-            h: "h",
-            i: []
-        },
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                a: 3.14159,
-                b: false,
-                c: {
-                    d: 0,
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    r: "r",
-                                    s: [1,2,3],
-                                    t: undefined,
-                                    u: 0,
-                                    v: {
-                                        w: {
-                                            x: {
-                                                y: "Yahoo!",
-                                                z: null
-                                            }
-                                        }
-                                    }
-                                },
-                                o: 99,
-                                p: 1/0,
-                                q: []
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    h: "false",
-                    i: true
-                }
-            },
-            e: undefined,
-            f: {},
-            g: "",
-            h: "h",
-            i: []
-        }
-    ), false);
-
-    equals(QUnit.equiv(
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                a: 3.14159,
-                b: false,
-                c: {
-                    d: 0,
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    r: "r",
-                                    s: [1,2,3],
-                                    t: undefined,
-                                    u: 0,
-                                    v: {
-                                        w: {
-                                            x: {
-                                                y: "Yahoo!",
-                                                z: null
-                                            }
-                                        }
-                                    }
-                                },
-                                o: 99,
-                                p: 1/0,
-                                q: []
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    h: "false",
-                    i: true
-                }
-            },
-            e: undefined,
-            f: {},
-            g: "",
-            h: "h",
-            i: []
-        },
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                a: 3.14159,
-                b: false,
-                c: {
-                    d: 0,
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    r: "r",
-                                    s: [1,2,3],
-                                    //t: undefined,                 // different: missing a property with an undefined value
-                                    u: 0,
-                                    v: {
-                                        w: {
-                                            x: {
-                                                y: "Yahoo!",
-                                                z: null
-                                            }
-                                        }
-                                    }
-                                },
-                                o: 99,
-                                p: 1/0,
-                                q: []
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    h: "false",
-                    i: true
-                }
-            },
-            e: undefined,
-            f: {},
-            g: "",
-            h: "h",
-            i: []
-        }
-    ), false);
-
-    equals(QUnit.equiv(
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                a: 3.14159,
-                b: false,
-                c: {
-                    d: 0,
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    r: "r",
-                                    s: [1,2,3],
-                                    t: undefined,
-                                    u: 0,
-                                    v: {
-                                        w: {
-                                            x: {
-                                                y: "Yahoo!",
-                                                z: null
-                                            }
-                                        }
-                                    }
-                                },
-                                o: 99,
-                                p: 1/0,
-                                q: []
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    h: "false",
-                    i: true
-                }
-            },
-            e: undefined,
-            f: {},
-            g: "",
-            h: "h",
-            i: []
-        },
-        {
-            a: 1,
-            b: null,
-            c: [{}],
-            d: {
-                a: 3.14159,
-                b: false,
-                c: {
-                    d: 0,
-                    e: fn1,
-                    f: [[[]]],
-                    g: {
-                        j: {
-                            k: {
-                                n: {
-                                    r: "r",
-                                    s: [1,2,3],
-                                    t: undefined,
-                                    u: 0,
-                                    v: {
-                                        w: {
-                                            x: {
-                                                y: "Yahoo!",
-                                                z: null
-                                            }
-                                        }
-                                    }
-                                },
-                                o: 99,
-                                p: 1/0,
-                                q: {}           // different was []
-                            },
-                            l: undefined,
-                            m: null
-                        }
-                    },
-                    h: "false",
-                    i: true
-                }
-            },
-            e: undefined,
-            f: {},
-            g: "",
-            h: "h",
-            i: []
-        }
-    ), false);
-
-    var same1 = {
-        a: [
-            "string", null, 0, "1", 1, {
-                prop: null,
-                foo: [1,2,null,{}, [], [1,2,3]],
-                bar: undefined
-            }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
-        ],
-        unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
-        b: "b",
-        c: fn1
-    };
-
-    var same2 = {
-        a: [
-            "string", null, 0, "1", 1, {
-                prop: null,
-                foo: [1,2,null,{}, [], [1,2,3]],
-                bar: undefined
-            }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
-        ],
-        unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
-        b: "b",
-        c: fn1
-    };
-
-    var diff1 = {
-        a: [
-            "string", null, 0, "1", 1, {
-                prop: null,
-                foo: [1,2,null,{}, [], [1,2,3,4]], // different: 4 was add to the array
-                bar: undefined
-            }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
-        ],
-        unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
-        b: "b",
-        c: fn1
-    };
-
-    var diff2 = {
-        a: [
-            "string", null, 0, "1", 1, {
-                prop: null,
-                foo: [1,2,null,{}, [], [1,2,3]],
-                newprop: undefined, // different: newprop was added
-                bar: undefined
-            }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
-        ],
-        unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
-        b: "b",
-        c: fn1
-    };
-
-    var diff3 = {
-        a: [
-            "string", null, 0, "1", 1, {
-                prop: null,
-                foo: [1,2,null,{}, [], [1,2,3]],
-                bar: undefined
-            }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ α" // different: missing last char
-        ],
-        unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
-        b: "b",
-        c: fn1
-    };
-
-    var diff4 = {
-        a: [
-            "string", null, 0, "1", 1, {
-                prop: null,
-                foo: [1,2,undefined,{}, [], [1,2,3]], // different: undefined instead of null
-                bar: undefined
-            }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
-        ],
-        unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
-        b: "b",
-        c: fn1
-    };
-
-    var diff5 = {
-        a: [
-            "string", null, 0, "1", 1, {
-                prop: null,
-                foo: [1,2,null,{}, [], [1,2,3]],
-                bat: undefined // different: property name not "bar"
-            }, 3, "Hey!", "Κάνε πάντα γνωρίζουμε ας των, μηχανής επιδιόρθωσης επιδιορθώσεις ώς μια. Κλπ ας"
-        ],
-        unicode: "老 汉语中存在 港澳和海外的华人圈中 贵州 我去了书店 现在尚有争",
-        b: "b",
-        c: fn1
-    };
-
-    equals(QUnit.equiv(same1, same2), true);
-    equals(QUnit.equiv(same2, same1), true);
-    equals(QUnit.equiv(same2, diff1), false);
-    equals(QUnit.equiv(diff1, same2), false);
-
-    equals(QUnit.equiv(same1, diff1), false);
-    equals(QUnit.equiv(same1, diff2), false);
-    equals(QUnit.equiv(same1, diff3), false);
-    equals(QUnit.equiv(same1, diff3), false);
-    equals(QUnit.equiv(same1, diff4), false);
-    equals(QUnit.equiv(same1, diff5), false);
-    equals(QUnit.equiv(diff5, diff1), false);
-});
-
-
-test("Complex Arrays.", function() {
-
-    function fn() {
-    }
-
-    equals(QUnit.equiv(
-                [1, 2, 3, true, {}, null, [
-                    {
-                        a: ["", '1', 0]
-                    },
-                    5, 6, 7
-                ], "foo"],
-                [1, 2, 3, true, {}, null, [
-                    {
-                        a: ["", '1', 0]
-                    },
-                    5, 6, 7
-                ], "foo"]),
-            true);
-
-    equals(QUnit.equiv(
-                [1, 2, 3, true, {}, null, [
-                    {
-                        a: ["", '1', 0]
-                    },
-                    5, 6, 7
-                ], "foo"],
-                [1, 2, 3, true, {}, null, [
-                    {
-                        b: ["", '1', 0]         // not same property name
-                    },
-                    5, 6, 7
-                ], "foo"]),
-            false);
-
-    var a = [{
-        b: fn,
-        c: false,
-        "do": "reserved word",
-        "for": {
-            ar: [3,5,9,"hey!", [], {
-                ar: [1,[
-                    3,4,6,9, null, [], []
-                ]],
-                e: fn,
-                f: undefined
-            }]
-        },
-        e: 0.43445
-    }, 5, "string", 0, fn, false, null, undefined, 0, [
-        4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
-    ], [], [[[], "foo", null, {
-        n: 1/0,
-        z: {
-            a: [3,4,5,6,"yep!", undefined, undefined],
-            b: {}
-        }
-    }, {}]]];
-
-    equals(QUnit.equiv(a,
-            [{
-                b: fn,
-                c: false,
-                "do": "reserved word",
-                "for": {
-                    ar: [3,5,9,"hey!", [], {
-                        ar: [1,[
-                            3,4,6,9, null, [], []
-                        ]],
-                        e: fn,
-                        f: undefined
-                    }]
-                },
-                e: 0.43445
-            }, 5, "string", 0, fn, false, null, undefined, 0, [
-                4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
-            ], [], [[[], "foo", null, {
-                n: 1/0,
-                z: {
-                    a: [3,4,5,6,"yep!", undefined, undefined],
-                    b: {}
-                }
-            }, {}]]]), true);
-
-    equals(QUnit.equiv(a,
-            [{
-                b: fn,
-                c: false,
-                "do": "reserved word",
-                "for": {
-                    ar: [3,5,9,"hey!", [], {
-                        ar: [1,[
-                            3,4,6,9, null, [], []
-                        ]],
-                        e: fn,
-                        f: undefined
-                    }]
-                },
-                e: 0.43445
-            }, 5, "string", 0, fn, false, null, undefined, 0, [
-                4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[2]]]], "3"], {}, 1/0    // different: [[[[[2]]]]] instead of [[[[[3]]]]]
-            ], [], [[[], "foo", null, {
-                n: 1/0,
-                z: {
-                    a: [3,4,5,6,"yep!", undefined, undefined],
-                    b: {}
-                }
-            }, {}]]]), false);
-
-    equals(QUnit.equiv(a,
-            [{
-                b: fn,
-                c: false,
-                "do": "reserved word",
-                "for": {
-                    ar: [3,5,9,"hey!", [], {
-                        ar: [1,[
-                            3,4,6,9, null, [], []
-                        ]],
-                        e: fn,
-                        f: undefined
-                    }]
-                },
-                e: 0.43445
-            }, 5, "string", 0, fn, false, null, undefined, 0, [
-                4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
-            ], [], [[[], "foo", null, {
-                n: -1/0,                                                                // different, -Infinity instead of Infinity
-                z: {
-                    a: [3,4,5,6,"yep!", undefined, undefined],
-                    b: {}
-                }
-            }, {}]]]), false);
-
-    equals(QUnit.equiv(a,
-            [{
-                b: fn,
-                c: false,
-                "do": "reserved word",
-                "for": {
-                    ar: [3,5,9,"hey!", [], {
-                        ar: [1,[
-                            3,4,6,9, null, [], []
-                        ]],
-                        e: fn,
-                        f: undefined
-                    }]
-                },
-                e: 0.43445
-            }, 5, "string", 0, fn, false, null, undefined, 0, [
-                4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
-            ], [], [[[], "foo", {                                                       // different: null is missing
-                n: 1/0,
-                z: {
-                    a: [3,4,5,6,"yep!", undefined, undefined],
-                    b: {}
-                }
-            }, {}]]]), false);
-
-    equals(QUnit.equiv(a,
-            [{
-                b: fn,
-                c: false,
-                "do": "reserved word",
-                "for": {
-                    ar: [3,5,9,"hey!", [], {
-                        ar: [1,[
-                            3,4,6,9, null, [], []
-                        ]],
-                        e: fn
-                                                                                // different: missing property f: undefined
-                    }]
-                },
-                e: 0.43445
-            }, 5, "string", 0, fn, false, null, undefined, 0, [
-                4,5,6,7,8,9,11,22,33,44,55,"66", null, [], [[[[[3]]]], "3"], {}, 1/0
-            ], [], [[[], "foo", null, {
-                n: 1/0,
-                z: {
-                    a: [3,4,5,6,"yep!", undefined, undefined],
-                    b: {}
-                }
-            }, {}]]]), false);
-});
-
-
-test("Prototypal inheritance", function() {
-    function Gizmo(id) {
-        this.id = id;
-    }
-
-    function Hoozit(id) {
-        this.id = id;
-    }
-    Hoozit.prototype = new Gizmo();
-
-    var gizmo = new Gizmo("ok");
-    var hoozit = new Hoozit("ok");
-
-    // Try this test many times after test on instances that hold function
-    // to make sure that our code does not mess with last object constructor memoization.
-    equals(QUnit.equiv(function () {}, function () {}), false);
-
-    // Hoozit inherit from Gizmo
-    // hoozit instanceof Hoozit; // true
-    // hoozit instanceof Gizmo; // true
-    equals(QUnit.equiv(hoozit, gizmo), true);
-
-    Gizmo.prototype.bar = true; // not a function just in case we skip them
-
-    // Hoozit inherit from Gizmo
-    // They are equivalent
-    equals(QUnit.equiv(hoozit, gizmo), true);
-
-    // Make sure this is still true !important
-    // The reason for this is that I forgot to reset the last
-    // caller to where it were called from.
-    equals(QUnit.equiv(function () {}, function () {}), false);
-
-    // Make sure this is still true !important
-    equals(QUnit.equiv(hoozit, gizmo), true);
-
-    Hoozit.prototype.foo = true; // not a function just in case we skip them
-
-    // Gizmo does not inherit from Hoozit
-    // gizmo instanceof Gizmo; // true
-    // gizmo instanceof Hoozit; // false
-    // They are not equivalent
-    equals(QUnit.equiv(hoozit, gizmo), false);
-
-    // Make sure this is still true !important
-    equals(QUnit.equiv(function () {}, function () {}), false);
-});
-
-
-test("Instances", function() {
-    function A() {} 
-    var a1 = new A(); 
-    var a2 = new A(); 
-
-    function B() {
-        this.fn = function () {};
-    } 
-    var b1 = new B(); 
-    var b2 = new B(); 
-
-    equals(QUnit.equiv(a1, a2), true, "Same property, same constructor");
-
-    // b1.fn and b2.fn are functions but they are different references
-    // But we decided to skip function for instances.
-    equals(QUnit.equiv(b1, b2), true, "Same property, same constructor");
-    equals(QUnit.equiv(a1, b1), false, "Same properties but different constructor"); // failed
-
-    function Car(year) {
-        var privateVar = 0;
-        this.year = year;
-        this.isOld = function() {
-            return year > 10;
-        };
-    }
-
-    function Human(year) {
-        var privateVar = 1;
-        this.year = year;
-        this.isOld = function() {
-            return year > 80;
-        };
-    }
-
-    var car = new Car(30);
-    var carSame = new Car(30);
-    var carDiff = new Car(10);
-    var human = new Human(30);
-
-    var diff = {
-        year: 30
-    };
-
-    var same = {
-        year: 30,
-        isOld: function () {}
-    };
-
-    equals(QUnit.equiv(car, car), true);
-    equals(QUnit.equiv(car, carDiff), false);
-    equals(QUnit.equiv(car, carSame), true);
-    equals(QUnit.equiv(car, human), false);
-});
-
-
-test("Complex Instances Nesting (with function value in literals and/or in nested instances)", function() {
-    function A(fn) {
-        this.a = {};
-        this.fn = fn;
-        this.b = {a: []};
-        this.o = {};
-        this.fn1 = fn;
-    }
-    function B(fn) {
-        this.fn = fn;
-        this.fn1 = function () {};
-        this.a = new A(function () {});
-    }
-
-    function fnOutside() {
-    }
-
-    function C(fn) {
-        function fnInside() {
-        }
-        this.x = 10;
-        this.fn = fn;
-        this.fn1 = function () {};
-        this.fn2 = fnInside;
-        this.fn3 = {
-            a: true,
-            b: fnOutside // ok make reference to a function in all instances scope
-        };
-        this.o1 = {};
-
-        // This function will be ignored.
-        // Even if it is not visible for all instances (e.g. locked in a closures),
-        // it is from a  property that makes part of an instance (e.g. from the C constructor)
-        this.b1 = new B(function () {});
-        this.b2 = new B({
-            x: {
-                b2: new B(function() {})
-            }
-        });
-    }
-
-    function D(fn) {
-        function fnInside() {
-        }
-        this.x = 10;
-        this.fn = fn;
-        this.fn1 = function () {};
-        this.fn2 = fnInside;
-        this.fn3 = {
-            a: true,
-            b: fnOutside, // ok make reference to a function in all instances scope
-
-            // This function won't be ingored.
-            // It isn't visible for all C insances
-            // and it is not in a property of an instance. (in an Object instances e.g. the object literal)
-            c: fnInside
-        };
-        this.o1 = {};
-
-        // This function will be ignored.
-        // Even if it is not visible for all instances (e.g. locked in a closures),
-        // it is from a  property that makes part of an instance (e.g. from the C constructor)
-        this.b1 = new B(function () {});
-        this.b2 = new B({
-            x: {
-                b2: new B(function() {})
-            }
-        });
-    }
-
-    function E(fn) {
-        function fnInside() {
-        }
-        this.x = 10;
-        this.fn = fn;
-        this.fn1 = function () {};
-        this.fn2 = fnInside;
-        this.fn3 = {
-            a: true,
-            b: fnOutside // ok make reference to a function in all instances scope
-        };
-        this.o1 = {};
-
-        // This function will be ignored.
-        // Even if it is not visible for all instances (e.g. locked in a closures),
-        // it is from a  property that makes part of an instance (e.g. from the C constructor)
-        this.b1 = new B(function () {});
-        this.b2 = new B({
-            x: {
-                b1: new B({a: function() {}}),
-                b2: new B(function() {})
-            }
-        });
-    }
-
-
-    var a1 = new A(function () {});
-    var a2 = new A(function () {});
-    equals(QUnit.equiv(a1, a2), true);
-
-    equals(QUnit.equiv(a1, a2), true); // different instances
-
-    var b1 = new B(function () {});
-    var b2 = new B(function () {});
-    equals(QUnit.equiv(a1, a2), true);
-
-    var c1 = new C(function () {});
-    var c2 = new C(function () {});
-    equals(QUnit.equiv(c1, c2), true);
-
-    var d1 = new D(function () {});
-    var d2 = new D(function () {});
-    equals(QUnit.equiv(d1, d2), false);
-
-    var e1 = new E(function () {});
-    var e2 = new E(function () {});
-    equals(QUnit.equiv(e1, e2), false);
-
-});
-
-
-test('object with references to self wont loop', function(){
-    var circularA = {
-        abc:null
-    }, circularB = {
-        abc:null
-    };
-    circularA.abc = circularA;
-    circularB.abc = circularB;
-    equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object (ambigous test)");
-    
-    circularA.def = 1;
-    circularB.def = 1;
-    equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object (ambigous test)");
-    
-    circularA.def = 1;
-    circularB.def = 0;
-    equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on object (unambigous test)");
-});
-
-test('array with references to self wont loop', function(){
-    var circularA = [], 
-        circularB = [];
-    circularA.push(circularA);
-    circularB.push(circularB);
-    equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on array (ambigous test)");
-    
-    circularA.push( 'abc' );
-    circularB.push( 'abc' );
-    equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on array (ambigous test)");
-    
-    circularA.push( 'hello' );
-    circularB.push( 'goodbye' );
-    equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on array (unambigous test)");
-});
-
-test('mixed object/array with references to self wont loop', function(){
-    var circularA = [{abc:null}], 
-        circularB = [{abc:null}];
-    circularA[0].abc = circularA;
-    circularB[0].abc = circularB;
-    
-    circularA.push(circularA);
-    circularB.push(circularB);
-    equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object/array (ambigous test)");
-    
-    circularA[0].def = 1;
-    circularB[0].def = 1;
-    equals(QUnit.equiv(circularA, circularB), true, "Should not repeat test on object/array (ambigous test)");
-    
-    circularA[0].def = 1;
-    circularB[0].def = 0;
-    equals(QUnit.equiv(circularA, circularB), false, "Should not repeat test on object/array (unambigous test)");
-});
-
-
-test("Test that must be done at the end because they extend some primitive's prototype", function() {
-    // Try that a function looks like our regular expression.
-    // This tests if we check that a and b are really both instance of RegExp
-    Function.prototype.global = true;
-    Function.prototype.multiline = true;
-    Function.prototype.ignoreCase = false;
-    Function.prototype.source = "my regex";
-    var re = /my regex/gm;
-    equals(QUnit.equiv(re, function () {}), false, "A function that looks that a regex isn't a regex");
-    // This test will ensures it works in both ways, and ALSO especially that we can make differences
-    // between RegExp and Function constructor because typeof on a RegExpt instance is "function"
-    equals(QUnit.equiv(function () {}, re), false, "Same conversely, but ensures that function and regexp are distinct because their constructor are different");
-});
-
diff --git a/addon/js_upload/file-uploader/tests/qunit/test/test.js b/addon/js_upload/file-uploader/tests/qunit/test/test.js
deleted file mode 100644 (file)
index 8eb5213..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-test("module without setup/teardown (default)", function() {
-       expect(1);
-       ok(true);
-});
-
-test("expect in test", 3, function() {
-       ok(true);
-       ok(true);
-       ok(true);
-});
-
-test("expect in test", 1, function() {
-       ok(true);
-});
-
-module("setup test", {
-       setup: function() {
-               ok(true);
-       }
-});
-
-test("module with setup", function() {
-       expect(2);
-       ok(true);
-});
-
-var state;
-
-module("setup/teardown test", {
-       setup: function() {
-               state = true;
-               ok(true);
-       },
-       teardown: function() {
-               ok(true);
-       }
-});
-
-test("module with setup/teardown", function() {
-       expect(3);
-       ok(true);
-});
-
-module("setup/teardown test 2");
-
-test("module without setup/teardown", function() {
-       expect(1);
-       ok(true);
-});
-
-if (typeof setTimeout !== 'undefined') {
-state = 'fail';
-
-module("teardown and stop", {
-       teardown: function() {
-               equals(state, "done", "Test teardown.");
-       }
-});
-
-test("teardown must be called after test ended", function() {
-       expect(1);
-       stop();
-       setTimeout(function() {
-               state = "done";
-               start();
-       }, 13);
-});
-} // end setTimeout tests
-
-if (typeof asyncTest !== 'undefined') {
-module("asyncTest");
-
-asyncTest("asyncTest", function() {
-       expect(2);
-       ok(true);
-       setTimeout(function() {
-               state = "done";
-               ok(true);
-               start();
-       }, 13);
-});
-
-asyncTest("asyncTest", 2, function() {
-       ok(true);
-       setTimeout(function() {
-               state = "done";
-               ok(true);
-               start();
-       }, 13);
-});
-} // end asyncTest tests
-
-module("save scope", {
-       setup: function() {
-               this.foo = "bar";
-       },
-       teardown: function() {
-               same(this.foo, "bar");
-       }
-});
-test("scope check", function() {
-       expect(2);
-       same(this.foo, "bar");
-});
-
-module("simple testEnvironment setup", {
-       foo: "bar",
-       bugid: "#5311" // example of meta-data
-});
-test("scope check", function() {
-       same(this.foo, "bar");
-});
-test("modify testEnvironment",function() {
-       this.foo="hamster";
-});
-test("testEnvironment reset for next test",function() {
-       same(this.foo, "bar");
-});
-
-module("testEnvironment with object", {
-       options:{
-               recipe:"soup",
-               ingredients:["hamster","onions"]
-       }
-});
-test("scope check", function() {
-       same(this.options, {recipe:"soup",ingredients:["hamster","onions"]}) ;
-});
-test("modify testEnvironment",function() {
-       // since we do a shallow copy, the testEnvironment can be modified
-       this.options.ingredients.push("carrots");
-});
-test("testEnvironment reset for next test",function() {
-       same(this.options, {recipe:"soup",ingredients:["hamster","onions","carrots"]}, "Is this a bug or a feature? Could do a deep copy") ;
-});
-
-
-module("testEnvironment tests");
-
-function makeurl() {
-  var testEnv = QUnit.current_testEnvironment;
-  var url = testEnv.url || 'http://example.com/search';
-  var q   = testEnv.q   || 'a search test';
-  return url + '?q='+encodeURIComponent(q);
-}
-
-test("makeurl working",function() {
-       equals( QUnit.current_testEnvironment, this, 'The current testEnvironment is global');
-  equals( makeurl(), 'http://example.com/search?q=a%20search%20test', 'makeurl returns a default url if nothing specified in the testEnvironment');
-});
-
-module("testEnvironment with makeurl settings",{
-  url:'http://google.com/',
-  q:'another_search_test'
-});
-test("makeurl working with settings from testEnvironment",function() {
-  equals( makeurl(), 'http://google.com/?q=another_search_test', 'rather than passing arguments, we use test metadata to form the url');
-});
-test("each test can extend the module testEnvironment", {
-       q:'hamstersoup'
-}, function() {
-       equals( makeurl(), 'http://google.com/?q=hamstersoup', 'url from module, q from test'); 
-});
-
-module("jsDump");
-test("jsDump output", function() {
-       equals( QUnit.jsDump.parse([1, 2]), "[ 1, 2 ]" );
-       equals( QUnit.jsDump.parse({top: 5, left: 0}), "{ \"top\": 5, \"left\": 0 }" );
-       equals( QUnit.jsDump.parse(document.getElementById("qunit-header")), "<h1 id=\"qunit-header\"></h1>" );
-       equals( QUnit.jsDump.parse(document.getElementsByTagName("h1")), "[ <h1 id=\"qunit-header\"></h1> ]" );
-})
diff --git a/addon/js_upload/file-uploader/tests/sample-files/1imagelonglonglonglonglonglongname.gif b/addon/js_upload/file-uploader/tests/sample-files/1imagelonglonglonglonglonglongname.gif
deleted file mode 100644 (file)
index 6fba776..0000000
Binary files a/addon/js_upload/file-uploader/tests/sample-files/1imagelonglonglonglonglonglongname.gif and /dev/null differ
diff --git a/addon/js_upload/file-uploader/tests/sample-files/2larger.txt b/addon/js_upload/file-uploader/tests/sample-files/2larger.txt
deleted file mode 100644 (file)
index bb54dd7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/sample-files/3empty.txt b/addon/js_upload/file-uploader/tests/sample-files/3empty.txt
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/addon/js_upload/file-uploader/tests/sample-files/4text.txt b/addon/js_upload/file-uploader/tests/sample-files/4text.txt
deleted file mode 100644 (file)
index ea7ada1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-satastastast
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/sample-files/5text.txt b/addon/js_upload/file-uploader/tests/sample-files/5text.txt
deleted file mode 100644 (file)
index ea7ada1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-satastastast
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/sample-files/6text.txt b/addon/js_upload/file-uploader/tests/sample-files/6text.txt
deleted file mode 100644 (file)
index ea7ada1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-satastastast
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/sample-files/7small.txt b/addon/js_upload/file-uploader/tests/sample-files/7small.txt
deleted file mode 100644 (file)
index 2f259b7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-s
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/sample-files/8text.txt b/addon/js_upload/file-uploader/tests/sample-files/8text.txt
deleted file mode 100644 (file)
index ea7ada1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-satastastast
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/separate-file-list.htm b/addon/js_upload/file-uploader/tests/separate-file-list.htm
deleted file mode 100644 (file)
index 4241429..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-       <link href="../client/fileuploader.css" rel="stylesheet" type="text/css">       
-</head>
-<body>         
-       
-       <div id="demo"></div>
-       <ul id="separate-list"></ul>
-    
-    <script src="../client/fileuploader.js" type="text/javascript"></script>
-    <script>        
-        function createUploader(){            
-            var uploader = new qq.FileUploader({
-                element: document.getElementById('demo'),
-                listElement: document.getElementById('separate-list'),
-                action: '../client/do-nothing.htm'
-            });           
-        }        
-        window.onload = createUploader;     
-    </script>    
-</body>
-</html>
\ No newline at end of file
diff --git a/addon/js_upload/file-uploader/tests/test-acceptance.htm b/addon/js_upload/file-uploader/tests/test-acceptance.htm
deleted file mode 100644 (file)
index 985c20b..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>  
-    <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
-    
-    <!-- test iwth jquery ui dialog -->
-    <link href="jquery-ui/ui-lightness/jquery-ui-1.8.4.custom.css" rel="stylesheet" type="text/css" media="screen" />
-    <script src="jquery-ui/jquery-ui-1.8.4.custom.min.js" type="text/javascript"></script>
-
-    <link href="qunit/qunit/qunit.css" rel="stylesheet" type="text/css" media="screen" />
-    <script src="qunit/qunit/qunit.js" type="text/javascript"></script>
-    
-    <link href="../client/fileuploader.css" rel="stylesheet" type="text/css"> 
-    <script src="../client/fileuploader.js" type="text/javascript" ></script>
-    <script>
-
-jQuery(function(){    
-    $("#dialog").dialog();
-        
-    asyncTest("qq.FileUploader", function() {
-        expect(10);
-        
-        var submitFileName, submitId;
-               
-        var uploader = new qq.FileUploader({
-            element: document.getElementById('file-uploader'),
-            action: 'action-acceptance.php',
-            params: {
-                one: 'value1',
-                two: 'value2'
-            },
-            allowedExtensions: ['txt', 'val', 'webm'], 
-            sizeLimit: 9 * 1024, 
-            minSizeLimit: 10,
-            onSubmit: function(id, fileName){
-                if (fileName == '5text.txt'){
-                    submitId = id;
-                    submitFileName = fileName; 
-                } else if (fileName == '6text.txt'){
-                    uploader.setParams({'new':'newvalue'});  
-                    
-                    same(uploader.getInProgress(), 0, 'getFilesInProgress');                    
-                    
-                    setTimeout(function(){
-                        same(uploader.getInProgress(), 1, 'getFilesInProgress');
-                    }, 1);                                                                                                                   
-                } else if (fileName == '8text.txt'){
-                    
-                    setTimeout(function(){
-                        same(uploader.getInProgress(), 0, 'all uploads should have finished');
-                        start(); // check test results    
-                    }, 1000);
-                    
-                    return false;
-                }
-            },
-            onComplete: function(id, fileName, responseJSON){
-
-                if (fileName == '4text.txt'){
-                    same(responseJSON, {}, 'should be empty if server returned malformed json');
-                } else if (fileName == '5text.txt'){
-                    same(submitId, id, "id in both callbacks match");
-                    same(submitFileName, fileName, "filename in both callbacks match");    
-                    ok(responseJSON.one === 'value1' && responseJSON.two === 'value2', "server received default params");
-                    same(responseJSON.fileName, fileName, "filename in onComplete correct");
-                } else if (fileName == '6text.txt'){                    
-                    ok(responseJSON['new'] === 'newvalue' && responseJSON.one == null, "server received new params");                    
-                    same(uploader.getInProgress(), 0, 'upload should have finished');                                                            
-                } else if (fileName == '8text.txt'){
-                    ok(false, "upload should be cancelled by returning false in onSubmit");                    
-                }                                                                                
-            }
-        });           
-    });
-});
-    </script>  
-</head>
-<body> 
-    <h1 id="qunit-header">File uploader tests</h1> 
-    <h2 id="qunit-banner"></h2> 
-    <h2 id="qunit-userAgent"></h2> 
-    <ol id="qunit-tests"></ol>
-
-    <p>select files in sample-files dir, following order</p>
-    <ol>
-        <li>select 1imagelong...long.gif, invalid ext error should appear</li>        
-        <li>select 2larger.txt, invalid size message should appear (in FF3.6+,Safari4+,Chrome without doing request)</li>
-        <li>select 3empty.txt, invalid size message should appear (in FF3.6+,Safari4+,Chrome without doing request)</li>
-        <li>select 4text.txt, uploaded file should be marked as failed (server returns jsgkdfgu4eyij)</li>             
-        <li>select 5text.txt, callback argument tests</li>        
-        <li>select 6text.txt, setParams, isUploading</li>
-        <li>select 7small.txt, too small size message should appear (in FF3.6+,Safari4+,Chrome without doing request)</li>
-        <li>select 8text.txt, returning false in onSubmit cancells upload, file should not be added to list</li>        
-        <li>
-            In FF,Chrome, select all files using drag-and-drop, only 1 error should appear.            
-        </li>
-    </ol>
-    
-    <div id="dialog" title="Basic dialog">
-        File uploader inside a dialog
-        <div id="file-uploader"></div>        
-    </div>               
-</body> 
-</html>
-
-
diff --git a/addon/js_upload/file-uploader/tests/test-drop-zone.htm b/addon/js_upload/file-uploader/tests/test-drop-zone.htm
deleted file mode 100644 (file)
index d7f0acc..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-    <style>
-        .drop-zone {height:100px; width:256px; background:gray; margin:20px;}
-    </style>  
-    <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
-    <script src="../client/fileuploader.js" type="text/javascript" ></script>    
-    <script>
-    
-function createDropZone(selector){
-    var element = $(selector)[0];  
-          
-    new qq.UploadDropZone({
-        element: element,
-        onEnter: function(){
-            console.log('enter')
-            $(element).css('background', 'green');
-        },
-        onLeave: function(){
-            console.log('leave')
-        },
-        onLeaveNotDescendants: function(){
-            console.log('onLeaveNotDescendants')
-            $(element).css('background', 'gray');
-        },
-        onDrop: function(e){
-            $(element).css('background', 'gray');
-            console.log('drop');
-            console.log(e.dataTransfer.files);
-        } 
-    });    
-}    
-
-jQuery(function(){
-    createDropZone('#drop-zone1');
-    createDropZone('#drop-zone2');                
-});
-
-    </script>      
-</head>
-<body> 
-    <div id="drop-zone1" class="drop-zone"><p>drop-zone1</p></div>
-    <div id="drop-zone2" class="drop-zone"><p>drop-zone2</p></div>          
-</body> 
-</html>
-
-
diff --git a/addon/js_upload/file-uploader/tests/test-handler-queue.htm b/addon/js_upload/file-uploader/tests/test-handler-queue.htm
deleted file mode 100644 (file)
index 52e3b3a..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>  
-    <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
-    
-    <link href="qunit/qunit/qunit.css" rel="stylesheet" type="text/css" media="screen" />
-    <script src="qunit/qunit/qunit.js" type="text/javascript"></script>
-    
-    <script src="../client/fileuploader.js" type="text/javascript" ></script>
-    <script>
-jQuery(function(){
-
-    function getHandler(){
-        if(qq.UploadHandlerXhr.isSupported()){           
-            return qq.UploadHandlerXhr;                        
-        } else {
-            return qq.UploadHandlerForm;
-        }
-    }    
-
-    asyncTest("upload", function() {                                      
-            expect(2);
-                            
-            var data = {stringOne: 'rtdfghdfhfh',stringTwo: 'dfsgsdfgsdg',stringThree: 'dfsgfhdfhdg'};
-            var savedId;
-                                                    
-            var uploadHandler = new (getHandler())({
-                action: 'action-handler-queue-test.php',
-                maxConnections: 1,
-                onComplete: function(id, fileName, response){
-                    if (!response.success){
-                        ok(false, 'server did not receive file')
-                        return;    
-                    }
-                    
-                    delete response.success;
-                    delete response.qqfile;
-                    
-                    same(response, data, 'server received file and data');                                                              
-                }
-            });
-                
-                
-            $('#testinput1, #testinput2').change(upload);    
-            
-            function upload(){
-                setTimeout(start, 9000);
-                
-                var file = this;
-                if (uploadHandler instanceof qq.UploadHandlerXhr){
-                    file = this.files[0];
-                }
-                var id = uploadHandler.add(file);        
-                uploadHandler.upload(id, data);                
-            }
-            
-            
-    });
-});
-    </script>  
-</head>
-<body> 
-    <h1 id="qunit-header">File uploader tests</h1> 
-    <h2 id="qunit-banner"></h2> 
-    <h2 id="qunit-userAgent"></h2> 
-    <ol id="qunit-tests"></ol>
-
-        
-    <p>
-        Please select a file for each input below,
-        should be less than 4 sec, between selection.
-    </p>
-
-    
-    <input id="testinput1" type="file">
-    <input id="testinput2" type="file">
-        
-</body> 
-</html>
-
-
diff --git a/addon/js_upload/file-uploader/tests/test-upload-handlers.htm b/addon/js_upload/file-uploader/tests/test-upload-handlers.htm
deleted file mode 100644 (file)
index 9cf74fe..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head> 
-       <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
-       
-       <link href="qunit/qunit/qunit.css" rel="stylesheet" type="text/css" media="screen" />
-       <script src="qunit/qunit/qunit.js" type="text/javascript"></script>
-       
-       <script src="../client/fileuploader.js" type="text/javascript" ></script>
-       <script>
-
-jQuery(function(){
-
-    module('qq');
-
-    test("contains", function(){
-        var el1 = document.createElement('div');
-        var el2 = document.createElement('div');
-        var el3 = document.createElement('div');
-        el1.appendChild(el2);
-        el2.appendChild(el3);
-        
-        var el4 = document.createElement('div');
-        
-        ok(qq.contains(el1,el1));
-        ok(qq.contains(el1,el2));
-        ok(qq.contains(el1,el3));
-        ok(!qq.contains(el1,el4));
-        ok(!qq.contains(el3,el2));
-    }); 
-        
-    test("hasClass, addClass, removeClass", function(){
-        var element = document.createElement('div');
-        qq.addClass(element, 'some-class');
-        ok(!qq.hasClass(element, 'some'), 'dash in class name');
-    });
-
-    test("children", function(){
-        same(qq.children(document.createElement('div')), [], 'empty');
-        var element = document.createElement('div');
-        element.innerHTML = 'asdasd<div>text</div><span>asdas</span>asdasd';
-        same(qq.children(element).length, 2);
-    });
-        
-    test("getByClass", function(){
-        var element = document.createElement('div');
-        element.style.display = 'none';
-        element.innerHTML = '<div class="class"><div class="someclass class"></div></div><span></span><div class="test"></div><div class="class"></div>';
-        document.body.appendChild(element);
-        
-        var outside = document.createElement('div');
-        outside.className = 'outside class';
-        document.body.appendChild(outside);
-        
-        same(qq.getByClass(document, 'class').length, 4, 'in document');
-        same(qq.getByClass(element, 'class').length, 3, 'in test div');
-        
-        qq.remove(element);
-        qq.remove(outside);     
-    }); 
-
-    test("obj2url", function(){
-        var tests = [
-          {title:'empty',                   obj:{}, expect:''},
-          {title:'general json',            obj:{a:'b',c:'d',e:'f'}, expect:'a=b&c=d&e=f'},
-          {title:'general json',            obj:{a:1,b:2,c:3,d:4}, expect:'a=1&b=2&c=3&d=4'},
-          {title:'general json array',      obj:{a:[1,2,3,4]}, expect:'a[0]=1&a[1]=2&a[2]=3&a[3]=4'},
-          {title:'complex json',            obj:{a:'b',c:'d',e:['f',{g:'h',i:['j',{k:'l',m:'n'}],
-                                                 o:undefined,p:true,q:false}]}, 
-                                            expect:'a=b&c=d&'
-                                                  +'e[0]=f&'
-                                                  +'e[1][g]=h&'
-                                                  +'e[1][i][0]=j&'
-                                                  +'e[1][i][1][k]=l&'
-                                                  +'e[1][i][1][m]=n&'
-                                                  +'e[1][o]=undefined&'
-                                                  +'e[1][p]=true&'
-                                                  +'e[1][q]=false'},
-          {title:'function',                obj:{a:function(){return 'b';}}, expect:'a=b'},
-          {title:'function no return',      obj:{a:function(){},undefined:'b'}, expect:'a=undefined'},
-          {title:'null',                    obj:{a:null}, expect:'a=null'},
-          {title:'prevent double encoding', obj:{a:[1,2,3],'b[]':[4,5,6],'c[d]':[7,8,9]}, 
-                                            expect:'a[0]=1&a[1]=2&a[2]=3&'
-                                                  +'b[]=4&b[]=5&b[]=6&'
-                                                  +'c[d][0]=7&c[d][1]=8&c[d][2]=9'},
-          {title:'spaces',                  obj:{a:'All your base are belong to us'}, 
-                                            expect:'a=All+your+base+are+belong+to+us'},
-          {title:'undefined simple',        obj:{undefined:undefined}, expect:''},
-          {title:'undefined complex',       obj:{undefined:undefined,
-                                                 a:{undefined:undefined},
-                                                 b:[{undefined:'c'},undefined,{d:'e'}]}, 
-                                            expect:'b[1]=undefined&b[2][d]=e'},
-          {title:'prefix url no params',    obj:{a:'b'}, 
-                                            prefix:'http://any.url', 
-                                            expect:'http://any.url?a=b'},
-          {title:'prefix url trailing ?',   obj:{a:'b'}, 
-                                            prefix:'http://any.url?', 
-                                            expect:'http://any.url?a=b'},
-          {title:'prefix url param',        obj:{a:'b'}, prefix:'http://any.url?foo', 
-                                            expect:'http://any.url?foo&a=b'},
-          {title:'prefix url param=value',  obj:{a:'b'}, 
-                                            prefix:'http://any.url?foo=bar', 
-                                            expect:'http://any.url?foo=bar&a=b'},
-          {title:'prefix url multi param',  obj:{a:'b'}, 
-                                            prefix:'http://any.url?foo=bar&bla=blub', 
-                                            expect:'http://any.url?foo=bar&bla=blub&a=b'},
-          {title:'prefix url array param',  obj:{a:'b',c:'d'}, 
-                                            prefix:'http://any.url?foo[0]=bla&foo[1]=blub', 
-                                            expect:'http://any.url?foo[0]=bla&foo[1]=blub&a=b&c=d'} 
-        ];
-        
-        for (var i = 0, l = tests.length; i<l; i++) {
-          //console.log('------------------ obj2url-test'+(i+1)+': '+tests[i].title);
-          //console.log('object: '+tests[i].obj);
-          //console.log('prefix: '+tests[i].prefix); 
-          var result = '';
-          if (tests[i].prefix) {
-            result = qq.obj2url(tests[i].obj, tests[i].prefix);
-          } else {
-            result = qq.obj2url(tests[i].obj);
-          }
-          //console.log('result: '+result);
-          same(decodeURIComponent(result), tests[i].expect, tests[i].title);
-        }
-    }); 
-    
-       
-       var uploadTimeout = 700,
-               loadTimeout = 300;
-       
-    if (qq.UploadHandlerXhr.isSupported()){
-        $('.handlerform').remove();    
-    } else {                   
-       //
-       module('qq.UploadHandlerForm');
-       //
-       
-       asyncTest("_getIframeContentJSON", function() {                                         
-               expect(3);
-               setTimeout(start, loadTimeout);         
-               
-               var exampleObject = {
-                 "example" : "&amp;a&lt;computer networks&gt;, to download means to receive data to a local system from a remote system, or to initiate such a data transfer. Examples of a remote system from which a download might be performed include a webserver, FTP server, email server, or other similar systems. A download can mean either any file that is offered for downloading or that has been downloaded, or the process of receiving such a file.The inverse operation, uploading, can refer to the sending of data from a local system to a remote system such as a server or another client with the intent that the remote system should store a copy of the data being transferred, or the initiation of such a process. The words first came into popular usage among computer users with the increased popularity of Bulletin Board Systems (BBSs), facilitated by the widespread distribution and implementation of dial-up access the in the 1970s",
-                 "sub" : {
-                   "arr": [10,20,30],
-                   "boo": false    
-                 }
-               };
-       
-               var testedFn = qq.UploadHandlerForm.prototype._getIframeContentJSON;            
-               
-               // IE 7,8 doesn't support application-javascript, application-json, text-javascript, text-plain
-               // as a response type, it also doesn't file load event when iframe loads page with 404 header           
-               createIframe('iframe-content-tests/somepage.php', function(iframe){
-                       same(testedFn(iframe), {}, "Server didn't return valid JSON object");
-               });             
-               createIframe('iframe-content-tests/text-html.php', function(iframe){
-                       same(testedFn(iframe), exampleObject, "text-html");
-               });                     
-               
-               // test larger response (>4k)
-               //http://www.coderholic.com/firefox-4k-xml-node-limit/
-            createIframe('iframe-content-tests/text-html-large.php', function(iframe){
-                same(testedFn(iframe).length, 5000, ">4k");
-            });         
-                               
-               
-               function createIframe(src, onLoad){
-                       var iframe = document.createElement('iframe');                  
-                       qq.attach(iframe, 'load', function(){
-                               onLoad(iframe);
-                               
-                               setTimeout(function(){
-                                       qq.remove(iframe);      
-                               }, 1);                                          
-                       });
-                       iframe.src = src;
-                       document.body.appendChild(iframe);                              
-               }               
-       });
-    
-        test("upload, cancel with empty input", function(){
-            expect(1);
-    
-            var uploadHandlerForm = new qq.UploadHandlerForm({
-                action: 'action-slow-response.php',
-                onComplete: function(id, fileName, response){
-                    ok(false, 'onComplete should not run, the request should be cancelled');
-                }
-            });
-                
-            var input = document.createElement('input');
-            var id = uploadHandlerForm.add(input);        
-            uploadHandlerForm.cancel(id);
-            
-            try {
-                // should fail
-                uploadHandlerForm.upload(id);
-            } catch (err){
-                ok(true, "wasn't uploaded after cancelling")            
-            };        
-            
-        });
-        
-       asyncTest("upload", function() {                                
-               expect(4);              
-                               
-               var data = {stringOne: 'rtdfghdfhfh',stringTwo: 'dfsgsdfgsdg',stringThree: 'dfsgfhdfhdg'};
-               var savedId;
-                                                                                               
-               var uploadHandler = new qq.UploadHandlerForm({
-                       action: 'action-handler-test.php',
-                       onComplete: function(id, fileName, response){                                                                                       
-                           ok(savedId == id, 'proper id in callback');                     
-                           same(fileName, uploadHandler.getName(id), 'getName method');
-                           
-                           data.fileName = fileName;                                           
-                               same(response, data, 'server received file and correct params, filenames match');
-                       }
-               });
-                       
-               var input = document.getElementById('testinput1');
-               qq.attach(input, 'change', function(){
-                       setTimeout(start, uploadTimeout);
-                                                                               
-                       savedId = uploadHandler.add(input);                     
-                       ok(savedId != null, 'id returned by add');
-                       
-                       uploadHandler.upload(savedId, data);
-               });
-       });
-       
-       asyncTest("cancel", function() {                                
-               var uploadHandlerForm = new qq.UploadHandlerForm({
-                       action: 'action-slow-response.php',
-                       onComplete: function(id, fileName, response){
-                               ok(false, 'onComplete should not run, the request should be cancelled');
-                       }
-               });
-                       
-               var input = document.getElementById('testinput2');
-               qq.attach(input, 'change', function(){
-                       var id = uploadHandlerForm.add(input);
-                       uploadHandlerForm.upload(id);
-                       uploadHandlerForm.cancel(id);
-                       start();
-               });
-       });     
-                       
-       test("check that forms and iframes were removed after use", function(){
-               same($('form,iframe').length, 0, 'check that forms and iframes were removed after use');
-       });
-       
-        asyncTest('going back', function(){
-            setTimeout(function(){
-                var goBack = confirm("checking that the history wasn't changed, the page will go back to previous now");
-                if (goBack){
-                   window.history.back();
-                   
-                   start();
-                   ok(false, "the page didn't change (fails in Opera)");
-                }              
-            }, 1000);               
-        });            
-       
-       }
-       
-    if (!qq.UploadHandlerXhr.isSupported()){
-        $('.handlerxhr').remove();    
-    } else {
-        //      
-        module('qq.UploadHandlerXhr');
-        //
-       
-       asyncTest("upload", function() {                
-           expect(9);
-               
-               var data = {stringOne: 'rtdfghdfhfh',stringTwo: 'dfsgsdfgsdg',stringThree: 'dfsgfhdfhdg'};
-               var onProgressCalled = false;
-               var expectedId, expectedName;
-                                                                                                               
-               var uploadHandler = new qq.UploadHandlerXhr({
-                       action: 'action-handler-test.php',
-                       onProgress: function(id, fileName, loaded, total){
-                               if (!onProgressCalled) {
-                                       onProgressCalled = true;
-                                       
-                                       same(id, expectedId, 'progress event fired with correct id param');
-                                       same(fileName, expectedName, 'progress event fired with correct fileName param')                                        
-                                       ok(loaded <= total && total > 0, 'progress event fired with possible loaded and total');
-                                       
-                                       same(total, uploadHandler.getSize(id), 'getSize method');                                       
-                               }
-                       },
-                       onComplete: function(id, fileName, response){                               
-                    same(id, expectedId, 'progress event fired with correct id param');
-                    same(fileName, expectedName, 'progress event fired with correct fileName param')
-                                                               
-                               data.fileName = fileName;
-                    data.qqfile = fileName;
-
-                               same(response, data, 'server received passed params, filenames match');
-                               
-                               same(fileName, uploadHandler.getName(id), 'getName method');                                     
-                       }
-               });
-                       
-               var input = document.getElementById('handlerxhr1');
-               
-               qq.attach(input, 'change', function(){
-                       setTimeout(start, uploadTimeout);
-                                                                               
-                       var id = uploadHandler.add(input.files[0]);
-                       ok(id != null, 'id returned by add');
-                       
-                       expectedId = id;
-                       expectedName = input.files[0].name || input.files[0].fileName;                          
-                       if (!expectedName){
-                           ok(false, 'false value as a file name used');
-                       }
-                       
-                       uploadHandler.upload(id, data);
-                       
-                       qq.remove(input);                       
-               });
-       });         
-               
-       asyncTest("cancel", function() {                                                
-               var uploadHandler = new qq.UploadHandlerXhr({
-                       action: 'action-slow-response.php',
-                       onComplete: function(id, fileName, response){
-                               ok(false, 'onComplete should not run, the request should be cancelled');
-                       }
-               });
-                       
-               var input = document.getElementById('handlerxhr2');
-               if (!input){
-                       // input removed because uploading via XHR is not supported
-                       return;
-               }
-               
-               qq.attach(input, 'change', function(){                                          
-                       var id = uploadHandler.add(input.files[0]);
-                       uploadHandler.upload(id);
-                       uploadHandler.cancel(id);
-                       
-                       start();                        
-                       qq.remove(input);                                                               
-               });
-       });             
-       }       
-});
-       </script>  
-</head>
-<body> 
-       <h1 id="qunit-header">File uploader tests</h1> 
-       <h2 id="qunit-banner"></h2> 
-       <h2 id="qunit-userAgent"></h2> 
-       <ol id="qunit-tests"></ol>
-       
-       <p>
-           Open this page via https connection, and make sure that loading bar is not acting strange after all tests are run.
-           Back button test fails in Opera. 
-       </p>
-       
-       <p>Please select a file for each input below (in order)</p>
-
-    <p>qq.FileUploader</p>
-    <div id="fileuploader1"></div>
-       
-       <p>qq.UploadHandlerForm</p>
-       <input class="handlerform" id="testinput1" type="file">
-       <input class="handlerform" id="testinput2" type="file">
-
-       <p>qq.UploadHandlerXhr</p>      
-       <input class="handlerxhr" id="handlerxhr1" type="file">
-       <input class="handlerxhr" id="handlerxhr2" type="file">  
-               
-</body> 
-</html>
-
-
diff --git a/addon/js_upload/js_upload.php b/addon/js_upload/js_upload.php
deleted file mode 100644 (file)
index 1996b85..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-<?php
-
-/**
- * Name: JS Uploader
- * Description: JavaScript photo/image uploader. Uses Valum 'qq' Uploader.
- * Version: 1.0
- * Author: Chris Case <http://friendika.openmindspace.org/profile/chris_case>
- */
-
-/**
- *
- * JavaScript Photo/Image Uploader
- *
- * Uses Valum 'qq' Uploader. 
- * Module Author: Chris Case
- *
- */
-
-
-function js_upload_install() {
-       register_hook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form');
-       register_hook('photo_post_init',   'addon/js_upload/js_upload.php', 'js_upload_post_init');
-       register_hook('photo_post_file',   'addon/js_upload/js_upload.php', 'js_upload_post_file');
-       register_hook('photo_post_end',    'addon/js_upload/js_upload.php', 'js_upload_post_end');
-}
-
-
-function js_upload_uninstall() {
-       unregister_hook('photo_upload_form', 'addon/js_upload/js_upload.php', 'js_upload_form');
-       unregister_hook('photo_post_init',   'addon/js_upload/js_upload.php', 'js_upload_post_init');
-       unregister_hook('photo_post_file',   'addon/js_upload/js_upload.php', 'js_upload_post_file');
-       unregister_hook('photo_post_end',    'addon/js_upload/js_upload.php', 'js_upload_post_end');
-}
-
-
-function js_upload_form(&$a,&$b) {
-
-       $b['default_upload'] = false;
-
-       $b['addon_text'] .= '<link href="' . $a->get_baseurl() . '/addon/js_upload/file-uploader/client/fileuploader.css" rel="stylesheet" type="text/css">';
-       $b['addon_text'] .= '<script src="' . $a->get_baseurl() . '/addon/js_upload/file-uploader/client/fileuploader.js" type="text/javascript"></script>';
-   
-       $upload_msg = t('Upload a file');
-       $drop_msg = t('Drop files here to upload');
-       $cancel = t('Cancel');
-       $failed = t('Failed');
-
-       $b['addon_text'] .= <<< EOT
-       
- <div id="file-uploader-demo1">                
-  <noscript>                   
-   <p>Please enable JavaScript to use file uploader.</p>
-   <!-- or put a simple form for upload here -->
-  </noscript> 
- </div>
-
-<script type="text/javascript">
-var uploader = null;       
-function getSelected(opt) {
-            var selected = new Array();
-            var index = 0;
-            for (var intLoop = 0; intLoop < opt.length; intLoop++) {
-               if ((opt[intLoop].selected) ||
-                   (opt[intLoop].checked)) {
-                  index = selected.length;
-                  //selected[index] = new Object;
-                  selected[index] = opt[intLoop].value;
-                  //selected[index] = intLoop;
-               }
-            }
-            return selected;
-         } 
-function createUploader() {
-       uploader = new qq.FileUploader({
-               element: document.getElementById('file-uploader-demo1'),
-               action: '{$b['post_url']}',
-
-        template: '<div class="qq-uploader">' + 
-                '<div class="qq-upload-drop-area"><span>$drop_msg</span></div>' +
-                '<div class="qq-upload-button">$upload_msg</div>' +
-                '<ul class="qq-upload-list"></ul>' + 
-             '</div>',
-
-        // template for one item in file list
-        fileTemplate: '<li>' +
-                '<span class="qq-upload-file"></span>' +
-                '<span class="qq-upload-spinner"></span>' +
-                '<span class="qq-upload-size"></span>' +
-                '<a class="qq-upload-cancel" href="#">$cancel</a>' +
-                '<span class="qq-upload-failed-text">$failed</span>' +
-            '</li>',        
-
-               debug: true,
-               onSubmit: function(id,filename) {
-                       if (typeof acl!="undefined"){
-                               uploader.setParams( {
-                                       newalbum                :       document.getElementById('photos-upload-newalbum').value,
-                                       album                   :       document.getElementById('photos-upload-album-select').value,
-                                       group_allow             :       acl.allow_gid.join(','),
-                                       contact_allow   :       acl.allow_cid.join(','),
-                                       group_deny              :       acl.deny_gid.join(','),
-                                       contact_deny    :       acl.deny_cid.join(',')
-                               });
-                       } else {
-                               uploader.setParams( {
-                                       newalbum                :       document.getElementById('photos-upload-newalbum').value,
-                                       album                   :       document.getElementById('photos-upload-album-select').value,
-                                       group_allow             :       getSelected(document.getElementById('group_allow')).join(','),
-                                       contact_allow   :       getSelected(document.getElementById('contact_allow')).join(','),
-                                       group_deny              :       getSelected(document.getElementById('group_deny')).join(','),
-                                       contact_deny    :       getSelected(document.getElementById('contact_deny')).join(',')
-                               });
-                       }
-               }
-       });           
-}
-
-
-// in your app create uploader as soon as the DOM is ready
-// don't wait for the window to load  
-window.onload = createUploader;     
-
-
-</script>
-EOT;
-
-
-}
-
-function js_upload_post_init(&$a,&$b) {
-
-       // list of valid extensions, ex. array("jpeg", "xml", "bmp")
-
-       $allowedExtensions = array("jpeg","gif","png","jpg");
-
-       // max file size in bytes
-
-       $sizeLimit = get_config('system','maximagesize'); //6 * 1024 * 1024;
-
-       $uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
-
-       $result = $uploader->handleUpload();
-
-
-       // to pass data through iframe you will need to encode all html tags
-       $a->data['upload_jsonresponse'] =  htmlspecialchars(json_encode($result), ENT_NOQUOTES);
-
-       if(isset($result['error'])) {
-               logger('mod/photos.php: photos_post(): error uploading photo: ' . $result['error'] , 'LOGGER_DEBUG');
-               echo json_encode($result);
-               killme();
-       }
-
-       $a->data['upload_result'] = $result;
-
-}
-
-function js_upload_post_file(&$a,&$b) {
-
-       $result = $a->data['upload_result'];
-
-       $b['src']               = $result['path'];
-       $b['filename']  = $result['filename'];
-       $b['filesize']  = filesize($b['src']);
-
-}
-
-
-function js_upload_post_end(&$a,&$b) {
-
-logger('upload_post_end');
-       if(x($a->data,'upload_jsonresponse')) {
-               echo $a->data['upload_jsonresponse'];
-               killme();
-       }
-
-}
-
-
-/**
- * Handle file uploads via XMLHttpRequest
- */
-class qqUploadedFileXhr {
-
-       private $pathnm = '';
-
-    /**
-     * Save the file in the temp dir.
-     * @return boolean TRUE on success
-     */
-    function save() {    
-        $input = fopen("php://input", "r");
-        $this->pathnm = tempnam(sys_get_temp_dir(),'frn');
-               $temp = fopen($this->pathnm,"w");
-        $realSize = stream_copy_to_stream($input, $temp);
-
-        fclose($input);
-               fclose($temp);
-        
-        if ($realSize != $this->getSize()){            
-            return false;
-        }
-        return true;
-    }
-
-       function getPath() {
-               return $this->pathnm;
-       }
-
-    function getName() {
-        return $_GET['qqfile'];
-    }
-
-    function getSize() {
-        if (isset($_SERVER["CONTENT_LENGTH"])){
-            return (int)$_SERVER["CONTENT_LENGTH"];            
-        } else {
-            throw new Exception('Getting content length is not supported.');
-        }      
-    }   
-}
-
-/**
- * Handle file uploads via regular form post (uses the $_FILES array)
- */
-
-class qqUploadedFileForm {  
-
-
-    /**
-     * Save the file to the specified path
-     * @return boolean TRUE on success
-     */
-
-
-    function save() {
-        return true;
-    }
-
-       function getPath() {
-               return $_FILES['qqfile']['tmp_name'];
-       }
-
-    function getName() {
-        return $_FILES['qqfile']['name'];
-    }
-    function getSize() {
-        return $_FILES['qqfile']['size'];
-    }
-}
-
-class qqFileUploader {
-    private $allowedExtensions = array();
-    private $sizeLimit = 10485760;
-    private $file;
-
-    function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){        
-        $allowedExtensions = array_map("strtolower", $allowedExtensions);
-            
-        $this->allowedExtensions = $allowedExtensions;        
-        $this->sizeLimit = $sizeLimit;
-        
-        if (isset($_GET['qqfile'])) {
-            $this->file = new qqUploadedFileXhr();
-        } elseif (isset($_FILES['qqfile'])) {
-            $this->file = new qqUploadedFileForm();
-        } else {
-            $this->file = false; 
-        }
-
-    }
-    
-    
-    private function toBytes($str){
-        $val = trim($str);
-        $last = strtolower($str[strlen($str)-1]);
-        switch($last) {
-            case 'g': $val *= 1024;
-            case 'm': $val *= 1024;
-            case 'k': $val *= 1024;        
-        }
-        return $val;
-    }
-    
-    /**
-     * Returns array('success'=>true) or array('error'=>'error message')
-     */
-    function handleUpload(){
-        
-        if (!$this->file){
-            return array('error' => t('No files were uploaded.'));
-        }
-        
-        $size = $this->file->getSize();
-        
-        if ($size == 0) {
-            return array('error' => t('Uploaded file is empty'));
-        }
-        
-//        if ($size > $this->sizeLimit) {
-
-//            return array('error' => t('Uploaded file is too large'));
-//        }
-        
-
-               $maximagesize = get_config('system','maximagesize');
-
-               if(($maximagesize) && ($size > $maximagesize)) {
-                       return array('error' => t('Image exceeds size limit of ') . $maximagesize );
-
-               }
-
-        $pathinfo = pathinfo($this->file->getName());
-        $filename = $pathinfo['filename'];
-
-        $ext = $pathinfo['extension'];
-
-        if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
-            $these = implode(', ', $this->allowedExtensions);
-            return array('error' => t('File has an invalid extension, it should be one of ') . $these . '.');
-        }
-        
-        if ($this->file->save()){
-            return array(
-                               'success'=>true,
-                               'path' => $this->file->getPath(), 
-                               'filename' => $filename . '.' . $ext
-                       );
-        } else {
-            return array(
-                               'error'=> t('Upload was cancelled, or server error encountered'),
-                               'path' => $this->file->getPath(), 
-                               'filename' => $filename . '.' . $ext
-                       );
-        }
-        
-    }    
-}
diff --git a/addon/ldapauth/README b/addon/ldapauth/README
deleted file mode 100644 (file)
index cf28ef1..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Authenticate a user against an LDAP directory
-Useful for Windows Active Directory and other LDAP-based organisations
-to maintain a single password across the organisation.
-
-Optionally authenticates only if a member of a given group in the directory.
-
-The person must have registered with Friendika using the normal registration 
-procedures in order to have a Friendika user record, contact, and profile.
-
-Note when using with Windows Active Directory: you may need to set TLS_CACERT in your site
-ldap.conf file to the signing cert for your LDAP server. 
-
-The required configuration options for this module may be set in the .htconfig.php file
-e.g.:
-
-$a->config['ldapauth']['ldap_server'] = 'host.example.com';
-...etc.
diff --git a/addon/ldapauth/ldapauth.php b/addon/ldapauth/ldapauth.php
deleted file mode 100644 (file)
index 7230302..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/**
- * Name: LDAP Authenticate
- * Description: Authenticate a user against an LDAP directory
- * Version: 1.0
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- */
-/**
- * Friendika addon
- * 
- * Module: LDAP Authenticate
- *
- * Authenticate a user against an LDAP directory
- * Useful for Windows Active Directory and other LDAP-based organisations
- * to maintain a single password across the organisation.
- *
- * Optionally authenticates only if a member of a given group in the directory.
- *
- * The person must have registered with Friendika using the normal registration 
- * procedures in order to have a Friendika user record, contact, and profile.
- *
- * Note when using with Windows Active Directory: you may need to set TLS_CACERT in your site
- * ldap.conf file to the signing cert for your LDAP server. 
- * 
- * The required configuration options for this module may be set in the .htconfig.php file
- * e.g.:
- *
- * $a->config['ldapauth']['ldap_server'] = 'host.example.com';
- * ...etc.
- *
- */
-
-
-
-function ldapauth_install() {
-       register_hook('authenticate', 'addon/ldapauth/ldapauth.php', 'ldapauth_hook_authenticate');
-}
-
-
-function ldapauth_uninstall() {
-       unregister_hook('authenticate', 'addon/ldapauth/ldapauth.php', 'ldapauth_hook_authenticate');
-}
-
-
-function ldapauth_hook_authenticate($a,&$b) {
-       if(ldapauth_authenticate($b['username'],$b['password'])) {
-               $results = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1",
-                               dbesc($b['username'])
-               );
-               if(count($results)) {
-                               $b['user_record'] = $results[0];
-                               $b['authenticated'] = 1;
-               }
-       }
-       return;
-}
-
-
-function ldapauth_authenticate($username,$password) {
-
-    $ldap_server   = get_config('ldapauth','ldap_server');
-    $ldap_binddn   = get_config('ldapauth','ldap_binddn');
-    $ldap_bindpw   = get_config('ldapauth','ldap_bindpw');
-    $ldap_searchdn = get_config('ldapauth','ldap_searchdn');
-    $ldap_userattr = get_config('ldapauth','ldap_userattr');
-    $ldap_group    = get_config('ldapauth','ldap_group');
-
-    if(! ((strlen($password))
-            && (function_exists('ldap_connect'))
-            && (strlen($ldap_server))))
-            return false;
-
-    $connect = @ldap_connect($ldap_server);
-
-    if(! $connect)
-        return false;
-
-    @ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION,3);
-    @ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
-    if((@ldap_bind($connect,$ldap_binddn,$ldap_bindpw)) === false) {
-        return false;
-    }
-
-    $res = @ldap_search($connect,$ldap_searchdn, $ldap_userattr . '=' . $username);
-
-    if(! $res) {
-        return false;
-    }
-
-    $id = @ldap_first_entry($connect,$res);
-
-    if(! $id) {
-        return false;
-    }
-
-    $dn = @ldap_get_dn($connect,$id);
-
-    if(! @ldap_bind($connect,$dn,$password))
-        return false;
-
-    if(! strlen($ldap_group))
-        return true;
-
-    $r = @ldap_compare($connect,$ldap_group,'member',$dn);
-    if ($r === -1) {
-        $err = @ldap_error($connect);
-        $eno = @ldap_errno($connect);
-        @ldap_close($connect);
-
-        if ($eno === 32) {
-            logger("ldapauth: access control group Does Not Exist");
-            return false;
-        }
-        elseif ($eno === 16) {
-            logger('ldapauth: membership attribute does not exist in access control group');
-            return false;
-        }
-        else {
-            logger('ldapauth: error: ' . $err);
-            return false;
-        }
-    }
-    elseif ($r === false) {
-        @ldap_close($connect);
-        return false;
-    }
-
-    return true;
-}
diff --git a/addon/oembed/oembed.js b/addon/oembed/oembed.js
deleted file mode 100644 (file)
index f8e9574..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-function oembed(){
-       var reply = prompt("$oembed_message:");
-       if(reply && reply.length) { 
-                 tinyMCE.execCommand('mceInsertRawHTML',false, "[embed]"+reply+"[/embed]" );
-       }
-}
diff --git a/addon/oembed/oembed.php b/addon/oembed/oembed.php
deleted file mode 100644 (file)
index 880e499..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Name: OEmbed
- * Description: OEmbed is a format for allowing an embedded representation of a URL on third party sites http://www.oembed.com/
- * Version: 1.2
- * Author: Fabio Comuni <http://kirgroup.com/profile/fabrix>
- */
-
-require_once('include/oembed.php');
-
-function oembed_install() {
-       register_hook('jot_tool', 'addon/oembed/oembed.php', 'oembed_hook_jot_tool');
-       register_hook('page_header', 'addon/oembed/oembed.php', 'oembed_hook_page_header');
-       register_hook('plugin_settings', 'addon/oembed/oembed.php', 'oembed_settings'); 
-       register_hook('plugin_settings_post', 'addon/oembed/oembed.php', 'oembed_settings_post');
-}
-
-function oembed_uninstall() {
-       unregister_hook('jot_tool', 'addon/oembed/oembed.php', 'oembed_hook_jot_tool');
-       unregister_hook('page_header', 'addon/oembed/oembed.php', 'oembed_hook_page_header');
-       unregister_hook('plugin_settings', 'addon/oembed/oembed.php', 'oembed_settings'); 
-       unregister_hook('plugin_settings_post', 'addon/oembed/oembed.php', 'oembed_settings_post');
-}
-
-function oembed_settings_post($a,$b){
-    if(! local_user())
-               return;
-       if (x($_POST,'oembed-submit')){
-               set_pconfig(local_user(), 'oembed', 'use_for_youtube', (x($_POST,'oembed_use_for_youtube')? intval($_POST['oembed_use_for_youtube']):0));
-               info( t('OEmbed settings updated') . EOL);
-       }
-}
-
-function oembed_settings(&$a,&$o) {
-    if(! local_user())
-               return;
-       $uofy = intval(get_pconfig(local_user(), 'oembed', 'use_for_youtube' ));
-
-       $t = file_get_contents( dirname(__file__). "/settings.tpl" );
-       $o .= replace_macros($t, array(
-               '$submit' => t('Submit'),
-               '$title' => "OEmbed",
-               '$useoembed' => array('oembed_use_for_youtube', t('Use OEmbed for YouTube videos'), $uofy, ""),
-       ));
-       
-}
-
-
-function oembed_hook_page_header($a, &$b){
-       $a->page['htmlhead'] .= sprintf('<script src="%s/oembed/oembed.js"></script>', $a->get_baseurl());
-}
-
-
-function oembed_hook_jot_tool($a, &$b) {
-       $b .= '
-       <div class="tool-wrapper" style="display: $visitor;" >
-         <img class="tool-link" src="addon/oembed/oembed.png" alt="Embed" title="Embed" onclick="oembed();" />
-       </div> 
-       ';
-}
-
-
-function oembed_module() {
-       return;
-}
-
-function oembed_init(&$a) {
-       if ($a->argv[1]=='oembed.js'){
-               $tpl = file_get_contents('addon/oembed/oembed.js');
-               echo replace_macros($tpl, array(
-                       '$oembed_message' =>  t('URL to embed:'),
-               ));
-       }
-       
-       if ($a->argv[1]=='b2h'){
-               $url = array( "", trim(hex2bin($_GET['url'])));
-               echo oembed_replacecb($url);
-       }
-       
-       if ($a->argv[1]=='h2b'){
-               $text = trim(hex2bin($_GET['text']));
-               echo oembed_html2bbcode($text);
-       }
-       
-       killme();
-       
-}
-
-?>
diff --git a/addon/oembed/oembed.png b/addon/oembed/oembed.png
deleted file mode 100644 (file)
index 6fc3794..0000000
Binary files a/addon/oembed/oembed.png and /dev/null differ
diff --git a/addon/oembed/settings.tpl b/addon/oembed/settings.tpl
deleted file mode 100644 (file)
index 5a65ef8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="settings-block">
-       <h3 class="settings-heading">$title</h3>
-       {{ inc field_checkbox.tpl with $field=$useoembed }}{{ endinc }}
-       <div class="settings-submit-wrapper">
-               <input type="submit" value="$submit" class="settings-submit" name="oembed-submit" />
-       </div>
-</div>
diff --git a/addon/piwik/README b/addon/piwik/README
deleted file mode 100644 (file)
index 20b78b5..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-____ Piwik Plugin ____
-by Tobias Diekershoff
-   tobias.diekershoff(at)gmx.net
-
-This addon allows you to embed the code necessary for the FLOSS webanalytics
-tool piwik into the Friendika pages.
-
-Online version of this Document: http://ur1.ca/35m2x
-
-___ Requirements ___
-
-To use this plugin you need a "piwik":http://piwik.org installation.
-
-___ Where to find ___
-
-In the Friendika git repository @/addon/piwik/piwik.php@ and a CSS file for
-styling the opt-out notice.
-
-___ Configuration ___
-
-Open the .htconfig.php file and add "piwik" to the list of activated addons. 
-    $a->config['system']['addon'] = "piwik, ..."
-You have to add 3 more configuration variables for the addon:
-
-$a->config['piwik']['baseurl'] = 'example.com/piwik/';
-$a->config['piwik']['sideid'] = '1';
-$a->config['piwik']['optout'] = true;
-
-The *baseurl* points to your piwik installation. Use the absolute path,
-remember trailing slashes but ignore the protocol (http/s) part of the URL.
-Change the *sideid* parameter to whatever ID you want to use for tracking your
-Friendika installation. The *optout* parameter (true|false) defines whether or
-not a short notice about the utilization of piwik will be displayed on every
-page of your Friendika site (at the bottom of the page with some spacing to the
-other content). Part of the note is a link that allows the visitor to set an
-_opt-out_ cookie which will prevent visits from that user be tracked by piwik.
-
-Currently the optional notice states the following:
-
-    This website is tracked using the Piwik analytics tool. If you do not want
-    that your visits are logged this way you can set a cookie to prevent Piwik
-    from tracking further visits of the site (opt-out).
-
diff --git a/addon/piwik/admin.tpl b/addon/piwik/admin.tpl
deleted file mode 100644 (file)
index 0edd062..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-{{ inc field_input.tpl with $field=$baseurl }}{{ endinc }}
-{{ inc field_input.tpl with $field=$siteid }}{{ endinc }}
-{{ inc field_checkbox.tpl with $field=$optout }}{{ endinc }}
-<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
diff --git a/addon/piwik/piwik.css b/addon/piwik/piwik.css
deleted file mode 100644 (file)
index bb43b67..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#piwik-optout-link {
-       padding: 100px 50px;
-       text-align: justify;
-       font-size: 0.85em;
-}
-#piwik-code-block {
-       display: none;
-}
diff --git a/addon/piwik/piwik.php b/addon/piwik/piwik.php
deleted file mode 100644 (file)
index 890309d..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * Name: Piwik Analytics
- * Description: Piwik Analytics Plugin for Friendika
- * Version: 1.0
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
- */
-
-/*   Piwik Analytics Plugin for Friendika
- *
- *   Author: Tobias Diekershoff
- *           tobias.diekershoff@gmx.net
- *
-*   License: 3-clause BSD license
- *
- *   Configuration:
- *     Add the following two lines to your .htconfig.php file:
- *
- *     $a->config['piwik']['baseurl'] = 'www.example.com/piwik/';
- *     $a->config['piwik']['siteid'] = '1';
- *     $a->config['piwik']['optout'] = true;  // set to false to disable
- *
- *     Change the siteid to the ID that the Piwik tracker for your Friendika
- *     installation has. Alter the baseurl to fit your needs, don't care
- *     about http/https but beware to put the trailing / at the end of your
- *     setting.
- *
- *     Documentation see http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Piwik_Plugin
- */
-
-function piwik_install() {
-       register_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics');
-
-        logger("installed piwik plugin");
-}
-
-function piwik_uninstall() {
-       unregister_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics');
-
-        logger("uninstalled piwik plugin");
-}
-
-function piwik_analytics($a,&$b) {
-
-       /*
-        *   styling of every HTML block added by this plugin is done in the
-        *   associated CSS file. We just have to tell Friendika to get it
-        *   into the page header.
-        */
-       $a->page['htmlhead'] .= '<link rel="stylesheet"  type="text/css" href="' . $a->get_baseurl() . '/addon/piwik/piwik.css' . '" media="all" />' . "\r\n";
-
-       /*
-        *   Get the configuration variables from the .htconfig file.
-        */
-       $baseurl = get_config('piwik','baseurl');
-       $siteid  = get_config('piwik','siteid');
-       $optout  = get_config('piwik','optout');
-
-       /*
-        *   Add the Piwik code for the site.
-        */
-       $b .= "<div id='piwik-code-block'> <!-- Piwik -->\r\n <script type=\"text/javascript\">\r\n var pkBaseURL = ((\"https:\" == document.location.protocol) ? \"https://".$baseurl."\" : \"http://".$baseurl."\");\r\n document.write(unescape(\"%3Cscript src='\" + pkBaseURL + \"piwik.js' type='text/javascript'%3E%3C/script%3E\"));\r\n </script>\r\n<script type=\"text/javascript\">\r\n try {\r\n var piwikTracker = Piwik.getTracker(pkBaseURL + \"piwik.php\", ".$siteid.");\r\n piwikTracker.trackPageView();\r\n piwikTracker.enableLinkTracking();\r\n }\r\n catch( err ) {}\r\n </script>\r\n<noscript><p><img src=\"http://".$baseurl."/piwik.php?idsite=".$siteid."\" style=\"border:0\" alt=\"\" /></p></noscript>\r\n <!-- End Piwik Tracking Tag --> </div>";
-       /*
-        *   If the optout variable is set to true then display the notice
-        *   otherwise just include the above code into the page.
-        */
-       if ($optout) {
-            $b .= "<div id='piwik-optout-link'>";
-            $b .= t("This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool.");
-            $b .= " ";
-            $the_url =  "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut";
-            $b .= sprintf(t("If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."), $the_url);
-            $b .= "</div>";
-       }
-
-}
-function piwik_plugin_admin (&$a, &$o) {
-    $t = file_get_contents( dirname(__file__)."/admin.tpl");
-    $o = replace_macros( $t, array(
-            '$submit' => t('Submit'),
-            '$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), ''),
-            '$siteid' => array('siteid', t('Site ID'), get_config('piwik','siteid' ), ''),
-            '$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''),
-        ));
-}
-function piwik_plugin_admin_post (&$a) {
-    $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : '');
-    $id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : '');
-    $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : '');
-    set_config('piwik', 'baseurl', $url);
-    set_config('piwik', 'siteid', $id);
-    set_config('piwik', 'optout', $optout);
-    info( t('Settings updated.'). EOL);
-}
diff --git a/addon/poormancron/poormancron.php b/addon/poormancron/poormancron.php
deleted file mode 100644 (file)
index bbe023c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/**
- * Name: Poor Man Cron
- * Description: Execute updates on pageviews, without the need of commandline php
- * Version: 1.2
- * Author: Fabio Comuni <http://kirgroup.com/profile/fabrix>
- */
-
-function poormancron_install() {
-       // check for command line php
-       $a = get_app();
-       $ex = Array();
-       $ex[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
-       $ex[1] = dirname(dirname(dirname(__file__)))."/testargs.php";
-       $ex[2] = "test";
-       $out = exec(implode(" ", $ex));
-       if ($out==="test") {
-               set_config('poormancron','usecli',1);
-               logger("poormancron will use cli php");
-       } else {
-               set_config('poormancron','usecli',0);
-               logger("poormancron will NOT use cli php");
-       }
-       
-       register_hook('page_end', 'addon/poormancron/poormancron.php', 'poormancron_hook');
-       register_hook('proc_run', 'addon/poormancron/poormancron.php','poormancron_procrun');
-       logger("installed poormancron");
-}
-
-function poormancron_uninstall() {
-       unregister_hook('page_end', 'addon/poormancron/poormancron.php', 'poormancron_hook');
-       unregister_hook('proc_run', 'addon/poormancron/poormancron.php','poormancron_procrun');
-       logger("removed poormancron");
-}
-
-
-
-function poormancron_hook(&$a,&$b) {
-    $now = time();
-    $lastupdate = get_config('poormancron', 'lastupdate');
-
-    // 300 secs, 5 mins
-    if (!$lastupdate || ($now-$lastupdate)>300) {
-        set_config('poormancron','lastupdate', $now);
-        proc_run('php',"include/poller.php");
-    }
-}
-
-function poormancron_procrun(&$a, &$arr) {
-       if (get_config('poormancron','usecli')==1) return;
-       $argv = $arr['args'];
-       $arr['run_cmd'] = false;
-       logger("poormancron procrun ".implode(", ",$argv));
-       array_shift($argv);
-       $argc = count($argv);
-       logger("poormancron procrun require_once ".basename($argv[0]));
-       require_once(basename($argv[0]));
-       $funcname=str_replace(".php", "", basename($argv[0]))."_run";
-  
-       $funcname($argv, $argc);
-}
-
-
-?>
diff --git a/addon/randplace/randplace.css b/addon/randplace/randplace.css
deleted file mode 100644 (file)
index bd7af6d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-#randplace-enable-label {
-       float: left;
-       width: 200px;
-       margin-bottom: 25px;
-}
-
-#randplace-checkbox {
-       float: left;
-}
-
-
diff --git a/addon/randplace/randplace.php b/addon/randplace/randplace.php
deleted file mode 100644 (file)
index bae8e7c..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * Name: Random place
- * Description: Sample Friendika plugin/addon. Set a random place when posting.
- * Version: 1.0
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- * 
- * 
- * 
- *
- * Addons are registered with the system in the
- * .htconfig.php file.
- *
- * $a->config['system']['addon'] = 'plugin1,plugin2,etc.';
- *
- * When registration is detected, the system calls the plugin
- * name_install() function, located in 'addon/name/name.php',
- * where 'name' is the name of the addon.
- * If the addon is removed from the configuration list, the 
- * system will call the name_uninstall() function.
- *
- */
-
-
-function randplace_install() {
-
-       /**
-        * 
-        * Our demo plugin will attach in three places.
-        * The first is just prior to storing a local post.
-        *
-        */
-
-       register_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook');
-
-       /**
-        *
-        * Then we'll attach into the plugin settings page, and also the 
-        * settings post hook so that we can create and update
-        * user preferences.
-        *
-        */
-
-       register_hook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings');
-       register_hook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
-
-       logger("installed randplace");
-}
-
-
-function randplace_uninstall() {
-
-       /**
-        *
-        * uninstall unregisters any hooks created with register_hook
-        * during install. It may also delete configuration settings
-        * and any other cleanup.
-        *
-        */
-
-       unregister_hook('post_local',    'addon/randplace/randplace.php', 'randplace_post_hook');
-       unregister_hook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings');
-       unregister_hook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
-
-
-       logger("removed randplace");
-}
-
-
-
-function randplace_post_hook($a, &$item) {
-
-       /**
-        *
-        * An item was posted on the local system.
-        * We are going to look for specific items:
-        *      - A status post by a profile owner
-        *      - The profile owner must have allowed our plugin
-        *
-        */
-
-       logger('randplace invoked');
-
-       if(! local_user())   /* non-zero if this is a logged in user of this system */
-               return;
-
-       if(local_user() != $item['uid'])    /* Does this person own the post? */
-               return;
-
-       if($item['parent'])   /* If the item has a parent, this is a comment or something else, not a status post. */
-               return;
-
-       /* Retrieve our personal config setting */
-
-       $active = get_pconfig(local_user(), 'randplace', 'enable');
-
-       if(! $active)
-               return;
-
-       /**
-        *
-        * OK, we're allowed to do our stuff.
-        * Here's what we are going to do:
-        * load the list of timezone names, and use that to generate a list of world cities.
-        * Then we'll pick one of those at random and put it in the "location" field for the post.
-        *
-        */
-
-       $cities = array();
-       $zones = timezone_identifiers_list();
-       foreach($zones as $zone) {
-               if((strpos($zone,'/')) && (! stristr($zone,'US/')) && (! stristr($zone,'Etc/')))
-                       $cities[] = str_replace('_', ' ',substr($zone,strpos($zone,'/') + 1));
-       }
-
-       if(! count($cities))
-               return;
-       $city = array_rand($cities,1);
-       $item['location'] = $cities[$city];
-
-       return;
-}
-
-
-
-
-/**
- *
- * Callback from the settings post function.
- * $post contains the $_POST array.
- * We will make sure we've got a valid user account
- * and if so set our configuration setting for this person.
- *
- */
-
-function randplace_settings_post($a,$post) {
-       if(! local_user())
-               return;
-       set_pconfig(local_user(),'randplace','enable',intval($_POST['randplace']));
-}
-
-
-/**
- *
- * Called from the Plugin Setting form. 
- * Add our own settings info to the page.
- *
- */
-
-
-
-function randplace_settings(&$a,&$s) {
-
-       if(! local_user())
-               return;
-
-       /* Add our stylesheet to the page so we can make our settings look nice */
-
-       $a->page['htmlhead'] .= '<link rel="stylesheet"  type="text/css" href="' . $a->get_baseurl() . '/addon/randplace/randplace.css' . '" media="all" />' . "\r\n";
-
-       /* Get the current state of our config variable */
-
-       $enabled = get_pconfig(local_user(),'randplace','enable');
-
-       $checked = (($enabled) ? ' checked="checked" ' : '');
-
-       /* Add some HTML to the existing form */
-
-       $s .= '<div class="settings-block">';
-       $s .= '<h3>' . t('Randplace Settings') . '</h3>';
-       $s .= '<div id="randplace-enable-wrapper">';
-       $s .= '<label id="randplace-enable-label" for="randplace-checkbox">' . t('Enable Randplace Plugin') . '</label>';
-       $s .= '<input id="randplace-checkbox" type="checkbox" name="randplace" value="1" ' . $checked . '/>';
-       $s .= '</div><div class="clear"></div>';
-
-       /* provide a submit button */
-
-       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
-
-}
diff --git a/addon/sniper/100x100.gif b/addon/sniper/100x100.gif
deleted file mode 100644 (file)
index 3370830..0000000
Binary files a/addon/sniper/100x100.gif and /dev/null differ
diff --git a/addon/sniper/100x100.jpg b/addon/sniper/100x100.jpg
deleted file mode 100644 (file)
index 315bd66..0000000
Binary files a/addon/sniper/100x100.jpg and /dev/null differ
diff --git a/addon/sniper/100x75.jpg b/addon/sniper/100x75.jpg
deleted file mode 100644 (file)
index 693e7c9..0000000
Binary files a/addon/sniper/100x75.jpg and /dev/null differ
diff --git a/addon/sniper/100x80.jpg b/addon/sniper/100x80.jpg
deleted file mode 100644 (file)
index 594391e..0000000
Binary files a/addon/sniper/100x80.jpg and /dev/null differ
diff --git a/addon/sniper/120x90hotshotsniper.jpg b/addon/sniper/120x90hotshotsniper.jpg
deleted file mode 100644 (file)
index 52d0f00..0000000
Binary files a/addon/sniper/120x90hotshotsniper.jpg and /dev/null differ
diff --git a/addon/sniper/125x125.jpg b/addon/sniper/125x125.jpg
deleted file mode 100644 (file)
index 047a505..0000000
Binary files a/addon/sniper/125x125.jpg and /dev/null differ
diff --git a/addon/sniper/140x90.jpg b/addon/sniper/140x90.jpg
deleted file mode 100644 (file)
index e98df44..0000000
Binary files a/addon/sniper/140x90.jpg and /dev/null differ
diff --git a/addon/sniper/150x150.jpg b/addon/sniper/150x150.jpg
deleted file mode 100644 (file)
index 225d1e9..0000000
Binary files a/addon/sniper/150x150.jpg and /dev/null differ
diff --git a/addon/sniper/160x86.gif b/addon/sniper/160x86.gif
deleted file mode 100644 (file)
index da72f3e..0000000
Binary files a/addon/sniper/160x86.gif and /dev/null differ
diff --git a/addon/sniper/180x135.jpg b/addon/sniper/180x135.jpg
deleted file mode 100644 (file)
index 6fdfaf3..0000000
Binary files a/addon/sniper/180x135.jpg and /dev/null differ
diff --git a/addon/sniper/250x180.jpg b/addon/sniper/250x180.jpg
deleted file mode 100644 (file)
index 41fbe9f..0000000
Binary files a/addon/sniper/250x180.jpg and /dev/null differ
diff --git a/addon/sniper/300x200.jpg b/addon/sniper/300x200.jpg
deleted file mode 100644 (file)
index 0aeef9a..0000000
Binary files a/addon/sniper/300x200.jpg and /dev/null differ
diff --git a/addon/sniper/300x300.jpg b/addon/sniper/300x300.jpg
deleted file mode 100644 (file)
index d4d4f27..0000000
Binary files a/addon/sniper/300x300.jpg and /dev/null differ
diff --git a/addon/sniper/32x32.jpg b/addon/sniper/32x32.jpg
deleted file mode 100644 (file)
index 8b4c209..0000000
Binary files a/addon/sniper/32x32.jpg and /dev/null differ
diff --git a/addon/sniper/335x185.jpg b/addon/sniper/335x185.jpg
deleted file mode 100644 (file)
index 9bb38c1..0000000
Binary files a/addon/sniper/335x185.jpg and /dev/null differ
diff --git a/addon/sniper/60x60.jpg b/addon/sniper/60x60.jpg
deleted file mode 100644 (file)
index 4ad7257..0000000
Binary files a/addon/sniper/60x60.jpg and /dev/null differ
diff --git a/addon/sniper/64x64.gif b/addon/sniper/64x64.gif
deleted file mode 100644 (file)
index cbb89e6..0000000
Binary files a/addon/sniper/64x64.gif and /dev/null differ
diff --git a/addon/sniper/70x45.jpg b/addon/sniper/70x45.jpg
deleted file mode 100644 (file)
index b722a5a..0000000
Binary files a/addon/sniper/70x45.jpg and /dev/null differ
diff --git a/addon/sniper/70x60.jpg b/addon/sniper/70x60.jpg
deleted file mode 100644 (file)
index 5815219..0000000
Binary files a/addon/sniper/70x60.jpg and /dev/null differ
diff --git a/addon/sniper/73x80.jpg b/addon/sniper/73x80.jpg
deleted file mode 100644 (file)
index 9f6753e..0000000
Binary files a/addon/sniper/73x80.jpg and /dev/null differ
diff --git a/addon/sniper/75x57.jpg b/addon/sniper/75x57.jpg
deleted file mode 100644 (file)
index 54753f1..0000000
Binary files a/addon/sniper/75x57.jpg and /dev/null differ
diff --git a/addon/sniper/80x60.jpg b/addon/sniper/80x60.jpg
deleted file mode 100644 (file)
index dfd0b37..0000000
Binary files a/addon/sniper/80x60.jpg and /dev/null differ
diff --git a/addon/sniper/80x70.jpg b/addon/sniper/80x70.jpg
deleted file mode 100644 (file)
index 2f416fa..0000000
Binary files a/addon/sniper/80x70.jpg and /dev/null differ
diff --git a/addon/sniper/80x80hotshotsniper.jpg b/addon/sniper/80x80hotshotsniper.jpg
deleted file mode 100644 (file)
index db26ff6..0000000
Binary files a/addon/sniper/80x80hotshotsniper.jpg and /dev/null differ
diff --git a/addon/sniper/81x67.jpg b/addon/sniper/81x67.jpg
deleted file mode 100644 (file)
index 0a4d7fd..0000000
Binary files a/addon/sniper/81x67.jpg and /dev/null differ
diff --git a/addon/sniper/description_etc.txt b/addon/sniper/description_etc.txt
deleted file mode 100644 (file)
index bda05ff..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Description:\r
-\r
-Shoot the targets with your sniper rifle!\r
-\r
-Instructions:\r
-\r
-Use your mouse to aim and shoot. Press R or Shift to Reload Press Space to use your Scope.\r
-\r
-Dimensions:\r
-\r
-620x480
\ No newline at end of file
diff --git a/addon/sniper/hotshotsniper.html b/addon/sniper/hotshotsniper.html
deleted file mode 100644 (file)
index 8a39b0b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
-<head>\r
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
-<title>hotshotsniper</title>\r
-</head>\r
-<body bgcolor="#000000">\r
-<!--url's used in the movie-->\r
-<!--text used in the movie-->\r
-<!-- saved from url=(0013)about:internet -->\r
-<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="620" height="480" id="hotshotsniper" align="middle">\r
-<param name="allowScriptAccess" value="sameDomain" />\r
-<param name="movie" value="hotshotsniper.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><embed src="hotshotsniper.swf" quality="high" bgcolor="#000000" width="620" height="480" name="hotshotsniper" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />\r
-</object>\r
-</body>\r
-</html>\r
diff --git a/addon/sniper/hotshotsniper.swf b/addon/sniper/hotshotsniper.swf
deleted file mode 100644 (file)
index b03284a..0000000
Binary files a/addon/sniper/hotshotsniper.swf and /dev/null differ
diff --git a/addon/sniper/sniper.php b/addon/sniper/sniper.php
deleted file mode 100644 (file)
index d431a24..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Name: Sniper App
- * Description: Example of flash game application
- * Version: 1.0
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- */
-
-/**
- * Demo plugin for adding various types of Flash games to Friendika.
- * In this case we're using "Hot Shot Sniper" by FlashGames247
- */
-
-
-function sniper_install() {
-    register_hook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu');
-}
-
-function sniper_uninstall() {
-    unregister_hook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu');
-
-}
-
-function sniper_app_menu($a,&$b) {
-    $b['app_menu'] .= '<div class="app-title"><a href="sniper">Hot Shot Sniper</a></div>';
-}
-
-
-function sniper_module() {}
-
-function sniper_content(&$a) {
-
-$baseurl = $a->get_baseurl() . '/addon/sniper';
-
-$o .= <<< EOT
-<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="620" height="480" id="hotshotsniper" align="middle">
-<param name="allowScriptAccess" value="sameDomain" />
-<param name="movie" value="$baseurl/hotshotsniper.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><embed src="$baseurl/hotshotsniper.swf" quality="high" bgcolor="#000000" width="620" height="480" name="hotshotsniper" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
-</object>
-EOT;
-
-return $o;
-}
diff --git a/addon/statusnet/README b/addon/statusnet/README
deleted file mode 100644 (file)
index 8d5e272..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-____ StatusNet Plugin ____
-by Tobias Diekershoff
-   tobias.diekershoff(at)gmx.net
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! This addon is currently in under development. If you have any problem    !!
-!! with it, please contact the Author.                                      !!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-With this addon to Friendika you can give your user the possibility to post
-their public messages to any StatusNet instance like identi.ca for example. The
-messages will be strapped their rich context and shortened to to the character
-limit of the StatusNet instance in question if necessary. If shortening of the
-message was performed a link will be added to the notice pointing to the
-original message on your server.
-
-There is a similar plugin to forward public messages to Twitter Twitter Plugin.
-
-Online version of this document: http://ur1.ca/35mpb
-
-___ Requirements ___
-
-Due to the distributed nature of the StatusNet network, each user who wishes to
-forward public messages to a StatusNet account has get the OAuth credentials
-for themselves, which makes this addon a little bit more user unfriendly then
-the Twitter Plugin is. Nothing to geeky though!
-
-The inclusion of a shorturl for the original posting in cases when the message
-was longer then the maximal allowed notice length requires it, that you have
-PHP5+ and curl on your server.
-Where to find
-
-In the Friendika git repository /addon/statusnet/, this directory contains all
-required PHP files (including the Twitter OAuth library [1] by Abraham Williams,
-MIT licensed and the Slinky library [2] by Beau Lebens, BSD license), a CSS file
-for styling of the user configuration and an image to Sign in with StatusNet.
-
-[1] https://github.com/abraham/twitteroauth
-[2] http://dentedreality.com.au/projects/slinky
-
-___ Configuration ___
-
-__ Global Configuration __
-
-To activate this addon add statusnet to the list of active addons in your
-.htconfig.php file 
-    $a->config['system']['addon'] = "statusnet, ...".
-
-__ User Configuration __
-
-When the addon is activated the user has to aquire three things in order to
-connect to the StatusNet account of choice.
- * the base URL for the StatusNet API, for identi.ca this is
-   https://identi.ca/api/
- * OAuth Consumer key & secret
-
-To get the OAuth Consumer key pair the user has to (a) ask her Friendika admin
-if a pair already exists or (b) has to register the Friendika server as a
-client application on the StatusNet server. This can be done from the account
-settings under "Connect -> Connections -> Register an OAuth client application
--> Register new application".
-
-During the registration of the OAuth client remember the following:
- * there is no callback url
- * register a desktop client
- * with read & write access
- * the Source URL should be the URL of your Friendika server
-
-After the required credentials for the application are stored in the
-configuration you have to actually connect your Friendika account with
-StatusNet. To do so follow the Sign in with StatusNet button, allow the access
-and copy the security code into the addon configuration. Friendika will then
-try to acquire the final OAuth credentials from the API, if successful the
-addon settings will allow you to select to post your public messages to your
-StatusNet account.
diff --git a/addon/statusnet/admin.tpl b/addon/statusnet/admin.tpl
deleted file mode 100644 (file)
index b40adf3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-{{ for $sites as $s }}
-       {{ inc field_input.tpl with $field=$s.sitename }}{{ endinc }}
-       {{ inc field_input.tpl with $field=$s.apiurl }}{{ endinc }}
-       {{ inc field_input.tpl with $field=$s.secret }}{{ endinc }}
-       {{ inc field_input.tpl with $field=$s.key }}{{ endinc }}
-       {{ if $s.delete }}
-               {{ inc field_checkbox.tpl with $field=$s.delete }}{{ endinc }}
-               <hr>
-       {{ else }}
-               <p>Fill this form to add a new site</p>
-       {{ endif }}
-       
-{{ endfor }}
-
-
-<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
diff --git a/addon/statusnet/signinwithstatusnet.png b/addon/statusnet/signinwithstatusnet.png
deleted file mode 100644 (file)
index a33998d..0000000
Binary files a/addon/statusnet/signinwithstatusnet.png and /dev/null differ
diff --git a/addon/statusnet/statusnet.css b/addon/statusnet/statusnet.css
deleted file mode 100644 (file)
index 6c1347f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-#statusnet-avatar {
-       float: left;
-       width: 48px;
-       height: 48px;
-       padding: 2px;
-}
-#statusnet-info-block {
-       height: 52px;
-       vertical-align: middle;
-}
-#statusnet-disconnect-label {
-       float: left;
-       width: 250px;
-       margin-bottom: 25px;
-}
-#statusnet-default-label {
-       float: left;
-       width: 250px;
-       margin-bottom: 25px;
-}
-
-#statusnet-disconnect {
-       float: left;
-}
-
-#statusnet-enable-label {
-       float: left;
-       width: 250px;
-       margin-bottom: 5px;
-}
-
-#statusnet-checkbox {
-       float: left;
-}
-
-#statusnet-pin-label {
-       float: left;
-       width: 250px;
-       margin-bottom: 25px;
-}
-#statusnet-pin {
-       float: left;
-}
-
-
-#statusnet-consumerkey-label {
-       float: left;
-       width: 250px;
-       margin-bottom: 8px;
-}
-#statusnet-consumerkey {
-       float: left;
-       margin-bottom: 8px;
-}
-#statusnet-consumersecret-label {
-       float: left;
-       width: 250px;
-       margin-bottom: 8px;
-}
-#statusnet-consumersecret {
-       float: left;
-       margin-bottom: 8px;
-}
-#statusnet-baseapi-label {
-       float: left;
-       width: 250px;
-       margin-bottom: 25px;
-}
-#statusnet-baseapi {
-       float: left;
-       margin-bottom: 8px;
-}
diff --git a/addon/statusnet/statusnet.php b/addon/statusnet/statusnet.php
deleted file mode 100644 (file)
index 2f02ded..0000000
+++ /dev/null
@@ -1,475 +0,0 @@
-<?php
-/**
- * Name: StatusNet Connector
- * Version: 1.0.2
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
- */
-/*   StatusNet Plugin for Friendika
- *
- *   Author: Tobias Diekershoff
- *           tobias.diekershoff@gmx.net
- *
- *   License:3-clause BSD license
- *
- *   Configuration:
- *     To activate the plugin itself add it to the $a->config['system']['addon']
- *     setting. After this, your user can configure their Twitter account settings
- *     from "Settings -> Plugin Settings".
- *
- *     Requirements: PHP5, curl [Slinky library]
- *
- *     Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/StatusNet_Plugin
- */
-
-/*   __TODO__
- *
- *   - what about multimedia content?
- *     so far we just strip HTML tags from the message
- */
-
-
-/***
- * We have to alter the TwitterOAuth class a little bit to work with any StatusNet
- * installation abroad. Basically it's only make the API path variable and be happy.
- *
- * Thank you guys for the Twitter compatible API!
- */
-
-require_once('library/twitteroauth.php');
-
-class StatusNetOAuth extends TwitterOAuth {
-    function get_maxlength() {
-        $config = $this->get($this->host . 'statusnet/config.json');
-        return $config->site->textlimit;
-    }
-    function accessTokenURL()  { return $this->host.'oauth/access_token'; }
-    function authenticateURL() { return $this->host.'oauth/authenticate'; } 
-    function authorizeURL() { return $this->host.'oauth/authorize'; }
-    function requestTokenURL() { return $this->host.'oauth/request_token'; }
-    function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
-        parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
-        $this->host = $apipath;
-    }
-  /**
-   * Make an HTTP request
-   *
-   * @return API results
-   *
-   * Copied here from the twitteroauth library and complemented by applying the proxy settings of friendika
-   */
-  function http($url, $method, $postfields = NULL) {
-    $this->http_info = array();
-    $ci = curl_init();
-    /* Curl settings */
-    $prx = get_config('system','proxy');
-    logger('Proxy SN: '.$prx);
-    if(strlen($prx)) {
-        curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
-        curl_setopt($ci, CURLOPT_PROXY, $prx);
-        $prxusr = get_config('system','proxyuser');
-        if(strlen($prxusr))
-            curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
-    }
-    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
-    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
-    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
-    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
-    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
-    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
-    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
-    curl_setopt($ci, CURLOPT_HEADER, FALSE);
-
-    switch ($method) {
-      case 'POST':
-        curl_setopt($ci, CURLOPT_POST, TRUE);
-        if (!empty($postfields)) {
-          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
-        }
-        break;
-      case 'DELETE':
-        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
-        if (!empty($postfields)) {
-          $url = "{$url}?{$postfields}";
-        }
-    }
-
-    curl_setopt($ci, CURLOPT_URL, $url);
-    $response = curl_exec($ci);
-    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
-    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
-    $this->url = $url;
-    curl_close ($ci);
-    return $response;
-  }
-}
-
-function statusnet_install() {
-       //  we need some hooks, for the configuration and for sending tweets
-       register_hook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); 
-       register_hook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post');
-       register_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook');
-       register_hook('jot_networks',    'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
-       logger("installed statusnet");
-}
-
-
-function statusnet_uninstall() {
-       unregister_hook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); 
-       unregister_hook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post');
-       unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook');
-       unregister_hook('jot_networks',    'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
-}
-
-function statusnet_jot_nets(&$a,&$b) {
-       if(! local_user())
-               return;
-
-       $statusnet_post = get_pconfig(local_user(),'statusnet','post');
-       if(intval($statusnet_post) == 1) {
-               $statusnet_defpost = get_pconfig(local_user(),'statusnet','post_by_default');
-               $selected = ((intval($statusnet_defpost) == 1) ? ' checked="checked" ' : '');
-               $b .= '<div class="profile-jot-net"><input type="checkbox" name="statusnet_enable"' . $selected . 'value="1" /> ' 
-                       . t('Post to StatusNet') . '</div>';    
-       }
-}
-
-
-
-
-function statusnet_settings_post ($a,$post) {
-       if(! local_user())
-           return;
-       // don't check statusnet settings if statusnet submit button is not clicked
-       if (!x($_POST,'statusnet-submit')) return;
-       
-       if (isset($_POST['statusnet-disconnect'])) {
-            /***
-             * if the statusnet-disconnect checkbox is set, clear the statusnet configuration
-             * TODO can we revoke the access tokens at Twitter and do we need to do so?
-             */
-            del_pconfig( local_user(), 'statusnet', 'consumerkey'  );
-            del_pconfig( local_user(), 'statusnet', 'consumersecret' );
-            del_pconfig( local_user(), 'statusnet', 'post' );
-            del_pconfig( local_user(), 'statusnet', 'post_by_default' );
-            del_pconfig( local_user(), 'statusnet', 'oauthtoken' );
-            del_pconfig( local_user(), 'statusnet', 'oauthsecret' );
-            del_pconfig( local_user(), 'statusnet', 'baseapi' );
-       } else {
-            if (isset($_POST['statusnet-preconf-apiurl'])) {
-                /***
-                 * If the user used one of the preconfigured StatusNet server credentials
-                 * use them. All the data are available in the global config.
-                 * Check the API Url never the less and blame the admin if it's not working ^^
-                 */
-                $globalsn = get_config('statusnet', 'sites');
-                foreach ( $globalsn as $asn) {
-                    if ($asn['apiurl'] == $_POST['statusnet-preconf-apiurl'] ) {
-                        $apibase = $asn['apiurl'];
-                        $c = fetch_url( $apibase . 'statusnet/version.xml' );
-                        if (strlen($c) > 0) {
-                            set_pconfig(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey'] );
-                            set_pconfig(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret'] );
-                            set_pconfig(local_user(), 'statusnet', 'baseapi', $asn['apiurl'] );
-                        } else {
-                            notice( t('Please contact your site administrator.<br />The provided API URL is not valid.').EOL.$asn['apiurl'].EOL );
-                        }
-                    }
-                }
-                goaway($a->get_baseurl().'/settings/addon');
-            } else {
-            if (isset($_POST['statusnet-consumersecret'])) {
-                //  check if we can reach the API of the StatusNet server
-                //  we'll check the API Version for that, if we don't get one we'll try to fix the path but will
-                //  resign quickly after this one try to fix the path ;-)
-                $apibase = $_POST['statusnet-baseapi'];
-                $c = fetch_url( $apibase . 'statusnet/version.xml' );
-                if (strlen($c) > 0) {
-                    //  ok the API path is correct, let's save the settings
-                    set_pconfig(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']);
-                    set_pconfig(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']);
-                    set_pconfig(local_user(), 'statusnet', 'baseapi', $apibase );
-                } else {
-                    //  the API path is not correct, maybe missing trailing / ?
-                    $apibase = $apibase . '/';
-                    $c = fetch_url( $apibase . 'statusnet/version.xml' );
-                    if (strlen($c) > 0) {
-                        //  ok the API path is now correct, let's save the settings
-                        set_pconfig(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']);
-                        set_pconfig(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']);
-                        set_pconfig(local_user(), 'statusnet', 'baseapi', $apibase );
-                    } else {
-                        //  still not the correct API base, let's do noting
-                        notice( t('We could not contact the StatusNet API with the Path you entered.').EOL );
-                    }
-                }
-                goaway($a->get_baseurl().'/settings/addon');
-            } else {
-               if (isset($_POST['statusnet-pin'])) {
-                       //  if the user supplied us with a PIN from Twitter, let the magic of OAuth happen
-                       logger('got a StatusNet security code');
-                    $api     = get_pconfig(local_user(), 'statusnet', 'baseapi');
-                                       $ckey    = get_pconfig(local_user(), 'statusnet', 'consumerkey'  );
-                                       $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' );
-                                       //  the token and secret for which the PIN was generated were hidden in the settings
-                                       //  form as token and token2, we need a new connection to Twitter using these token
-                                       //  and secret to request a Access Token with the PIN
-                                       $connection = new StatusNetOAuth($api, $ckey, $csecret, $_POST['statusnet-token'], $_POST['statusnet-token2']);
-                                       $token   = $connection->getAccessToken( $_POST['statusnet-pin'] );
-                                       //  ok, now that we have the Access Token, save them in the user config
-                                       set_pconfig(local_user(),'statusnet', 'oauthtoken',  $token['oauth_token']);
-                                       set_pconfig(local_user(),'statusnet', 'oauthsecret', $token['oauth_token_secret']);
-                    set_pconfig(local_user(),'statusnet', 'post', 1);
-                    //  reload the Addon Settings page, if we don't do it see Bug #42
-                    goaway($a->get_baseurl().'/settings/addon');
-                               } else {
-                                       //  if no PIN is supplied in the POST variables, the user has changed the setting
-                                       //  to post a tweet for every new __public__ posting to the wall
-                                       set_pconfig(local_user(),'statusnet','post',intval($_POST['statusnet-enable']));
-                                       set_pconfig(local_user(),'statusnet','post_by_default',intval($_POST['statusnet-default']));
-                                       info( t('StatusNet settings updated.') . EOL);
-               }}}}
-}
-function statusnet_settings(&$a,&$s) {
-        if(! local_user())
-                return;
-        $a->page['htmlhead'] .= '<link rel="stylesheet"  type="text/css" href="' . $a->get_baseurl() . '/addon/statusnet/statusnet.css' . '" media="all" />' . "\r\n";
-       /***
-        * 1) Check that we have a base api url and a consumer key & secret
-        * 2) If no OAuthtoken & stuff is present, generate button to get some
-         *    allow the user to cancel the connection process at this step
-        * 3) Checkbox for "Send public notices (respect size limitation)
-        */
-        $api     = get_pconfig(local_user(), 'statusnet', 'baseapi');
-       $ckey    = get_pconfig(local_user(), 'statusnet', 'consumerkey' );
-       $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' );
-       $otoken  = get_pconfig(local_user(), 'statusnet', 'oauthtoken'  );
-       $osecret = get_pconfig(local_user(), 'statusnet', 'oauthsecret' );
-       $enabled = get_pconfig(local_user(), 'statusnet', 'post');
-       $checked = (($enabled) ? ' checked="checked" ' : '');
-       $defenabled = get_pconfig(local_user(),'statusnet','post_by_default');
-       $defchecked = (($defenabled) ? ' checked="checked" ' : '');
-       $s .= '<div class="settings-block">';
-       $s .= '<h3>'. t('StatusNet Posting Settings').'</h3>';
-
-       if ( (!$ckey) && (!$csecret) ) {
-               /***
-                * no consumer keys
-                 */
-            $globalsn = get_config('statusnet', 'sites');
-            /***
-             * lets check if we have one or more globally configured StatusNet
-             * server OAuth credentials in the configuration. If so offer them
-             * with a little explanation to the user as choice - otherwise
-             * ignore this option entirely.
-             */
-            if (! $globalsn == null) {
-                $s .= '<h4>' . t('Globally Available StatusNet OAuthKeys') . '</h4>';
-                $s .= '<p>'. t("There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance \x28see below\x29.") .'</p>';
-                $s .= '<div id="statusnet-preconf-wrapper">';
-                foreach ($globalsn as $asn) {
-                    $s .= '<input type="radio" name="statusnet-preconf-apiurl" value="'. $asn['apiurl'] .'">'. $asn['sitename'] .'<br />';
-                }
-                $s .= '<p></p><div class="clear"></div></div>';
-                $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="statusnet-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
-            }
-            $s .= '<h4>' . t('Provide your own OAuth Credentials') . '</h4>';
-            $s .= '<p>'. t('No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation.') .'</p>';
-            $s .= '<div id="statusnet-consumer-wrapper">';
-            $s .= '<label id="statusnet-consumerkey-label" for="statusnet-consumerkey">'. t('OAuth Consumer Key') .'</label>';
-            $s .= '<input id="statusnet-consumerkey" type="text" name="statusnet-consumerkey" size="35" /><br />';
-            $s .= '<div class="clear"></div>';
-            $s .= '<label id="statusnet-consumersecret-label" for="statusnet-consumersecret">'. t('OAuth Consumer Secret') .'</label>';
-            $s .= '<input id="statusnet-consumersecret" type="text" name="statusnet-consumersecret" size="35" /><br />';
-            $s .= '<div class="clear"></div>';
-            $s .= '<label id="statusnet-baseapi-label" for="statusnet-baseapi">'. t("Base API Path \x28remember the trailing /\x29") .'</label>';
-            $s .= '<input id="statusnet-baseapi" type="text" name="statusnet-baseapi" size="35" /><br />';
-            $s .= '<p></p><div class="clear"></div></div>';
-            $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="statusnet-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
-       } else {
-               /***
-                * ok we have a consumer key pair now look into the OAuth stuff
-                */
-               if ( (!$otoken) && (!$osecret) ) {
-                       /***
-                        * the user has not yet connected the account to statusnet
-                        * get a temporary OAuth key/secret pair and display a button with
-                        * which the user can request a PIN to connect the account to a
-                        * account at statusnet
-                        */
-                       $connection = new StatusNetOAuth($api, $ckey, $csecret);
-                       $request_token = $connection->getRequestToken('oob');
-                       $token = $request_token['oauth_token'];
-                       /***
-                        *  make some nice form
-                        */
-                       $s .= '<p>'. t('To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to StatusNet.') .'</p>';
-                       $s .= '<a href="'.$connection->getAuthorizeURL($token,False).'" target="_statusnet"><img src="addon/statusnet/signinwithstatusnet.png" alt="'. t('Log in with StatusNet') .'"></a>';
-                       $s .= '<div id="statusnet-pin-wrapper">';
-                       $s .= '<label id="statusnet-pin-label" for="statusnet-pin">'. t('Copy the security code from StatusNet here') .'</label>';
-                       $s .= '<input id="statusnet-pin" type="text" name="statusnet-pin" />';
-                       $s .= '<input id="statusnet-token" type="hidden" name="statusnet-token" value="'.$token.'" />';
-                       $s .= '<input id="statusnet-token2" type="hidden" name="statusnet-token2" value="'.$request_token['oauth_token_secret'].'" />';
-                       $s .= '</div><div class="clear"></div>';
-                       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="statusnet-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
-                       $s .= '<h4>'.t('Cancel Connection Process').'</h4>';
-                       $s .= '<div id="statusnet-cancel-wrapper">';
-                       $s .= '<p>'.t('Current StatusNet API is').': '.$api.'</p>';
-                       $s .= '<label id="statusnet-cancel-label" for="statusnet-cancel">'. t('Cancel StatusNet Connection') . '</label>';
-                       $s .= '<input id="statusnet-cancel" type="checkbox" name="statusnet-disconnect" value="1" />';
-                       $s .= '</div><div class="clear"></div>';
-                       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="statusnet-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
-               } else {
-                       /***
-                        *  we have an OAuth key / secret pair for the user
-                        *  so let's give a chance to disable the postings to statusnet
-                        */
-                       $connection = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
-                       $details = $connection->get('account/verify_credentials');
-                       $s .= '<div id="statusnet-info" ><img id="statusnet-avatar" src="'.$details->profile_image_url.'" /><p id="statusnet-info-block">'. t('Currently connected to: ') .'<a href="'.$details->statusnet_profile_url.'" target="_statusnet">'.$details->screen_name.'</a><br /><em>'.$details->description.'</em></p></div>';
-                       $s .= '<p>'. t('If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.') .'</p>';
-                       $s .= '<div id="statusnet-enable-wrapper">';
-                       $s .= '<label id="statusnet-enable-label" for="statusnet-checkbox">'. t('Allow posting to StatusNet') .'</label>';
-                       $s .= '<input id="statusnet-checkbox" type="checkbox" name="statusnet-enable" value="1" ' . $checked . '/>';
-                       $s .= '<div class="clear"></div>';
-                       $s .= '<label id="statusnet-default-label" for="statusnet-default">'. t('Send public postings to StatusNet by default') .'</label>';
-                       $s .= '<input id="statusnet-default" type="checkbox" name="statusnet-default" value="1" ' . $defchecked . '/>';
-                       $s .= '</div><div class="clear"></div>';
-
-                       $s .= '<div id="statusnet-disconnect-wrapper">';
-                        $s .= '<label id="statusnet-disconnect-label" for="statusnet-disconnect">'. t('Clear OAuth configuration') .'</label>';
-                        $s .= '<input id="statusnet-disconnect" type="checkbox" name="statusnet-disconnect" value="1" />';
-                       $s .= '</div><div class="clear"></div>';
-                       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="statusnet-submit" class="settings-submit" value="' . t('Submit') . '" /></div>'; 
-               }
-       }
-        $s .= '</div><div class="clear"></div></div>';
-}
-
-
-function statusnet_post_hook(&$a,&$b) {
-
-       /**
-        * Post to statusnet
-        */
-
-        logger('StatusNet post invoked');
-
-       if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (!$b['parent']) ) {
-
-               // Status.Net is not considered a private network
-               if($b['prvnets'])
-                       return;
-
-               load_pconfig(local_user(), 'statusnet');
-            
-               $api     = get_pconfig(local_user(), 'statusnet', 'baseapi');
-               $ckey    = get_pconfig(local_user(), 'statusnet', 'consumerkey'  );
-               $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' );
-               $otoken  = get_pconfig(local_user(), 'statusnet', 'oauthtoken'  );
-               $osecret = get_pconfig(local_user(), 'statusnet', 'oauthsecret' );
-
-               if($ckey && $csecret && $otoken && $osecret) {
-
-                       $statusnet_post = get_pconfig(local_user(),'statusnet','post');
-                       $statusnet_enable = (($statusnet_post && x($_POST,'statusnet_enable')) ? intval($_POST['statusnet_enable']) : 0);
-                       // if API is used, default to the chosen settings
-                       if($_POST['api_source'] && intval(get_pconfig(local_user(),'statusnet','post_by_default')))
-                               $statusnet_enable = 1;
-
-                       if($statusnet_enable && $statusnet_post) {
-                               require_once('include/bbcode.php');     
-                               $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
-                               $max_char = $dent->get_maxlength(); // max. length for a dent
-                               $msg = strip_tags(bbcode($b['body']));
-                                if ( strlen($msg) > $max_char) {
-                                        $shortlink = "";
-                                        require_once('library/slinky.php');
-                                        // post url = base url + /display/ + owner + post id
-                                        // we construct this from the Owner link and replace
-                                        // profile by display - this will cause an error when
-                                        // /profile/ is in the owner url twice but I don't
-                                        // think this will be very common...
-                                       $posturl = str_replace('/profile/','/display/',$b['owner-link']).'/'.$b['id'];
-                                       $slinky = new Slinky( $posturl );
-                                       // setup a cascade of shortening services
-                                       // try to get a short link from these services
-                                       // in the order ur1.ca, trim, id.gd, tinyurl
-                                       $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
-                                        $shortlink = $slinky->short();
-                                        // the new message will be shortened such that "... $shortlink"
-                                        // will fit into the character limit
-                                        $msg = substr($msg, 0, $max_char-strlen($shortlink)-4);
-                                        $msg .= '... ' . $shortlink;
-                                }
-                                // and now tweet it :-)
-                               if(strlen($msg))
-                                       $dent->post('statuses/update', array('status' => $msg));
-                       }
-               }
-    }
-}
-
-function statusnet_plugin_admin_post(&$a){
-       
-       $sites = array();
-       
-       foreach($_POST['sitename'] as $id=>$sitename){
-               $sitename=trim($sitename);
-               $apiurl=trim($_POST['apiurl'][$id]);
-               $secret=trim($_POST['secret'][$id]);
-               $key=trim($_POST['key'][$id]);
-               if ($sitename!="" &&
-                       $apiurl!="" &&
-                       $secret!="" &&
-                       $key!="" &&
-                       !x($_POST['delete'][$id])){
-                               
-                               $sites[] = Array(
-                                       'sitename' => $sitename,
-                                       'apiurl' => $apiurl,
-                                       'consumersecret' => $secret,
-                                       'consumerkey' => $key
-                               );
-               }
-       }
-       
-       $sites = set_config('statusnet','sites', $sites);
-       
-}
-
-function statusnet_plugin_admin(&$a, &$o){
-
-       $sites = get_config('statusnet','sites');
-       $sitesform=array();
-       if (is_array($sites)){
-               foreach($sites as $id=>$s){
-                       $sitesform[] = Array(
-                               'sitename' => Array("sitename[$id]", "Site name", $s['sitename'], ""),
-                               'apiurl' => Array("apiurl[$id]", "Api url", $s['apiurl'], ""),
-                               'secret' => Array("secret[$id]", "Secret", $s['consumersecret'], ""),
-                               'key' => Array("key[$id]", "Key", $s['consumerkey'], ""),
-                               'delete' => Array("delete[$id]", "Delete", False , "Check to delete this preset"),
-                       );
-               }
-       }
-       /* empty form to add new site */
-       $id++;
-       $sitesform[] = Array(
-               'sitename' => Array("sitename[$id]", t("Site name"), "", ""),
-               'apiurl' => Array("apiurl[$id]", t("API URL"), "", ""),
-               'secret' => Array("secret[$id]", t("Consumer Secret"), "", ""),
-               'key' => Array("key[$id]", t("Consumer Key"), "", ""),
-       );
-
-       
-       $t = file_get_contents( dirname(__file__). "/admin.tpl" );
-       $o = replace_macros($t, array(
-               '$submit' => t('Submit'),
-                                                       
-               '$sites' => $sitesform,
-               
-       ));
-       
-       
-}
diff --git a/addon/tictac/tictac.php b/addon/tictac/tictac.php
deleted file mode 100644 (file)
index d6cec08..0000000
+++ /dev/null
@@ -1,665 +0,0 @@
-<?php
-/**
- * Name: TicTac App
- * Description: The TicTacToe game application
- * Version: 1.0
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- */
-
-
-function tictac_install() {
-       register_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu');
-}
-
-function tictac_uninstall() {
-       unregister_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu');
-
-}
-
-function tictac_app_menu($a,&$b) {
-       $b['app_menu'] .= '<div class="app-title"><a href="tictac">' . t('Three Dimensional Tic-Tac-Toe') . '</a></div>'; 
-}
-
-
-function tictac_module() {
-       return;
-}
-
-
-
-
-
-function tictac_content(&$a) {
-
-       $o = '';
-
-  if($_POST['move']) {
-    $handicap = $a->argv[1];
-    $mefirst = $a->argv[2];
-    $dimen = $a->argv[3];
-    $yours = $a->argv[4];
-    $mine  = $a->argv[5];
-    
-    $yours .= $_POST['move'];
-  }
-  elseif($a->argc > 1) {
-    $handicap = $a->argv[1];
-    $dimen = 3;
-  }
-  else {
-   $dimen = 3;
-  }
-
-  $o .=  '<h3>' . t('3D Tic-Tac-Toe') . '</h3><br />';
-
-  $t = new tictac($dimen,$handicap,$mefirst,$yours,$mine);
-  $o .= $t->play();
-
-  $o .=  '<a href="tictac">' . t('New game') . '</a><br />';
-  $o .=  '<a href="tictac/1">' . t('New game with handicap') . '</a><br />';
-  $o .=  '<p>' . t('Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. ');
-  $o .= t('In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.');
-  $o .= '</p><p>'; 
-  $o .= t('The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.');
-  $o .= '</p>';
-
-  return $o;
-
-}
-
-class tictac {
-  private $dimen;
-  private $first_move = true;
-  private $handicap = 0;
-  private $yours;
-  private $mine;
-  private $winning_play;  
-  private $you;
-  private $me;
-  private $debug = 1;
-  private $crosses = array('011','101','110','112','121','211');
-
-/*
-    '001','010','011','012','021',
-    '101','110','111','112','121',
-    '201','210','211','212','221');
-*/
-
-  private $corners = array(
-    '000','002','020','022',
-    '200','202','220','222');
-
-  private $planes = array(
-    array('000','001','002','010','011','012','020','021','022'), // horiz 1
-    array('100','101','102','110','111','112','120','121','122'), // 2
-    array('200','201','202','210','211','212','220','221','222'), // 3
-    array('000','010','020','100','110','120','200','210','220'), // vert left
-    array('000','001','002','100','101','102','200','201','202'), // vert top
-    array('002','012','022','102','112','122','202','212','222'), // vert right
-    array('020','021','022','120','121','122','220','221','222'), // vert bot
-    array('010','011','012','110','111','112','210','211','212'), // left vertx
-    array('001','011','021','101','111','221','201','211','221'), // top vertx
-    array('000','001','002','110','111','112','220','221','222'), // diag top
-    array('020','021','022','110','111','112','200','201','202'), // diag bot
-    array('000','010','020','101','111','121','202','212','222'), // diag left
-    array('002','012','022','101','111','121','200','210','220'), // diag right
-    array('002','011','020','102','111','120','202','211','220'), // diag x
-    array('000','011','022','100','111','122','200','211','222')  // diag x
-    
-  );
-
-
-  private $winner = array(
-     array('000','001','002'),         // board 0 winners  - left corner across
-     array('000','010','020'),         // down
-     array('000','011','022'),         // diag
-     array('001','011','021'),         // middle-top down
-     array('010','011','012'),         // middle-left across
-     array('002','011','020'),         // right-top diag
-     array('002','012','022'),         // right-top down
-     array('020','021','022'),        // bottom-left across
-     array('100','101','102'),      // board 1 winners
-     array('100','110','120'),
-     array('100','111','122'),
-     array('101','111','121'),
-     array('110','111','112'),
-     array('102','111','120'),
-     array('102','112','122'),
-     array('120','121','122'),
-     array('200','201','202'),    // board 2 winners
-     array('200','210','220'),
-     array('200','211','222'),
-     array('201','211','221'),
-     array('210','211','212'),
-     array('202','211','220'),
-     array('202','212','222'),
-     array('220','221','222'),
-     array('000','100','200'),      // top-left corner 3d
-     array('000','101','202'),
-     array('000','110','220'),
-     array('000','111','222'),
-     array('001','101','201'),      // top-middle 3d
-     array('001','111','221'),
-     array('002','102','202'),      // top-right corner 3d
-     array('002','101','200'),
-     array('002','112','222'),
-     array('002','111','220'),
-     array('010','110','210'),      // left-middle 3d
-     array('010','111','212'),
-     array('011','111','211'),      // middle-middle 3d
-     array('012','112','212'),      // right-middle 3d
-     array('012','111','210'),
-     array('020','120','220'),      // bottom-left corner 3d
-     array('020','110','200'),
-     array('020','121','222'),
-     array('020','111','202'),
-     array('021','121','221'),      // bottom-middle 3d
-     array('021','111','201'),
-     array('022','122','222'),      // bottom-right corner 3d
-     array('022','121','220'),
-     array('022','112','202'),
-     array('022','111','200')
-
-  );
-
-  function __construct($dimen,$handicap,$mefirst,$yours,$mine) {
-    $this->dimen = 3;
-    $this->handicap = (($handicap) ? 1 : 0);
-    $this->mefirst = (($mefirst) ? 1 : 0);
-    $this->yours = str_replace('XXX','',$yours);
-    $this->mine  = $mine;
-    $this->you = $this->parse_moves('you');
-    $this->me  = $this->parse_moves('me');
-
-    if(strlen($yours))
-      $this->first_move = false;
-  }
-
-  function play() {
-
-     if($this->first_move) {
-       if(rand(0,1) == 1) {
-         $o .=  '<div class="error-message">' . t('You go first...') . '</div><br />';
-         $this->mefirst = 0;
-         $o .= $this->draw_board();
-         return $o;
-       }
-       $o .=  '<div class="error-message">' . t('I\'m going first this time...') . ' </div><br />';
-       $this->mefirst = 1;
-
-     }
-
-     if($this->check_youwin()) {
-       $o .=  '<div class="error-message">' . t('You won!') . '</div><br />';
-       $o .= $this->draw_board();
-       return $o;
-     }
-
-     if($this->fullboard())
-       $o .=  '<div class="error-message">' . t('"Cat" game!') . '</div><br />';
-
-     $move = $this->winning_move();
-     if(strlen($move)) {
-       $this->mine .= $move;
-       $this->me = $this->parse_moves('me');
-     }
-     else {
-       $move = $this->defensive_move();
-       if(strlen($move)) {
-         $this->mine .= $move;
-         $this->me = $this->parse_moves('me');
-       }
-       else {  
-         $move = $this->offensive_move();
-         if(strlen($move)) {
-           $this->mine .= $move;
-           $this->me = $this->parse_moves('me');
-         }
-       }
-     }
-
-     if($this->check_iwon())
-       $o .=  '<div class="error-message">' . t('I won!') . '</div><br />';
-     if($this->fullboard())
-       $o .=  '<div class="error-message">' . t('"Cat" game!') . '</div><br />';
-     $o .= $this->draw_board();
-       return $o;
-  }
-
-  function parse_moves($player) {
-    if($player == 'me')
-      $str = $this->mine;
-    if($player == 'you')
-      $str = $this->yours;
-    $ret = array();
-      while(strlen($str)) {
-         $ret[] = substr($str,0,3);
-         $str = substr($str,3);
-      }
-    return $ret;
-  }
-
-
-  function check_youwin() {
-    for($x = 0; $x < count($this->winner); $x ++) {
-      if(in_array($this->winner[$x][0],$this->you) && in_array($this->winner[$x][1],$this->you) && in_array($this->winner[$x][2],$this->you)) {
-        $this->winning_play = $this->winner[$x];
-        return true;
-      }
-    }
-    return false;
-  }
-  function check_iwon() {
-    for($x = 0; $x < count($this->winner); $x ++) {
-      if(in_array($this->winner[$x][0],$this->me) && in_array($this->winner[$x][1],$this->me) && in_array($this->winner[$x][2],$this->me)) {
-        $this->winning_play = $this->winner[$x];
-        return true;
-      }
-    }
-    return false;
-  }
-  function defensive_move() {
-
-    for($x = 0; $x < count($this->winner); $x ++) {
-      if(($this->handicap) && in_array('111',$this->winner[$x]))
-        continue;
-      if(in_array($this->winner[$x][0],$this->you) && in_array($this->winner[$x][1],$this->you) && (! in_array($this->winner[$x][2],$this->me)))
-        return($this->winner[$x][2]);
-      if(in_array($this->winner[$x][0],$this->you) && in_array($this->winner[$x][2],$this->you) && (! in_array($this->winner[$x][1],$this->me)))
-        return($this->winner[$x][1]);
-      if(in_array($this->winner[$x][1],$this->you) && in_array($this->winner[$x][2],$this->you) && (! in_array($this->winner[$x][0],$this->me)))
-        return($this->winner[$x][0]);
-     }
-     return '';
-  }
-
-function winning_move() {
-
-    for($x = 0; $x < count($this->winner); $x ++) {
-      if(($this->handicap) && in_array('111',$this->winner[$x]))
-        continue;
-      if(in_array($this->winner[$x][0],$this->me) && in_array($this->winner[$x][1],$this->me) && (! in_array($this->winner[$x][2],$this->you)))
-        return($this->winner[$x][2]);
-      if(in_array($this->winner[$x][0],$this->me) && in_array($this->winner[$x][2],$this->me) && (! in_array($this->winner[$x][1],$this->you)))
-        return($this->winner[$x][1]);
-      if(in_array($this->winner[$x][1],$this->me) && in_array($this->winner[$x][2],$this->me) && (! in_array($this->winner[$x][0],$this->you)))
-        return($this->winner[$x][0]);
-     }
-
-}
-
-  function offensive_move() {
-
-    shuffle($this->planes);
-    shuffle($this->winner);
-    shuffle($this->corners);
-    shuffle($this->crosses);
-
-    if(! count($this->me)) {
-      if($this->handicap) {
-        $p = $this->uncontested_plane();
-        foreach($this->corners as $c)
-          if((in_array($c,$p)) 
-            && (! $this->is_yours($c)) && (! $this->is_mine($c)))
-              return($c);
-      }
-      else {
-        if((! $this->marked_yours(1,1,1)) && (! $this->marked_mine(1,1,1)))
-          return '111';
-        $p = $this->uncontested_plane();
-        foreach($this->crosses as $c)
-          if((in_array($c,$p))
-            && (! $this->is_yours($c)) && (! $this->is_mine($c)))
-            return($c);
-      }
-    }
-
-    if($this->handicap) {
-      if(count($this->me) >= 1) {
-        if(count($this->get_corners($this->me)) == 1) {
-          if(in_array($this->me[0],$this->corners)) {
-            $p = $this->my_best_plane();
-            foreach($this->winner as $w) {
-              if((in_array($w[0],$this->you)) 
-              || (in_array($w[1],$this->you))
-              || (in_array($w[2],$this->you)))
-                continue;        
-              if(in_array($w[0],$this->corners) 
-                && in_array($w[2],$this->corners)
-                && in_array($w[0],$p) && in_array($w[2],$p)) {
-                  if($this->me[0] == $w[0])
-                    return($w[2]);
-                  elseif($this->me[0] == $w[2])
-                    return($w[0]);
-              }
-            }
-          }
-        }
-        else {
-          $r = $this->get_corners($this->me);
-          if(count($r) > 1) {
-            $w1 = array(); $w2 = array();
-            foreach($this->winner as $w) {
-              if(in_array('111',$w))
-                continue;
-              if(($r[0] == $w[0]) || ($r[0] == $w[2]))
-                $w1[] = $w;
-              if(($r[1] == $w[0]) || ($r[1] == $w[2]))
-                $w2[] = $w;
-            }
-            if(count($w1) && count($w2)) {
-              foreach($w1 as $a) {
-                foreach($w2 as $b) {
-                  if((in_array($a[0],$this->you)) 
-                  || (in_array($a[1],$this->you))
-                  || (in_array($a[2],$this->you))
-                  || (in_array($b[0],$this->you))
-                  || (in_array($b[1],$this->you))
-                  || (in_array($b[2],$this->you)))
-                    continue; 
-                  if(($a[0] == $b[0]) && ! $this->is_mine($a[0])) {
-                    return $a[0];
-                  }
-                  elseif(($a[2] == $b[2]) && ! $this->is_mine($a[2])) {
-                    return $a[2];
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-
- //&& (count($this->me) == 1) && (count($this->you) == 1)
- //     && in_array($this->you[0],$this->corners)
- //     && $this->is_neighbor($this->me[0],$this->you[0])) {
-
-      // Yuck. You foiled my plan. Since you obviously aren't playing to win, 
-      // I'll try again. You may keep me busy for a few rounds, but I'm 
-      // gonna' get you eventually.
-
-//      $p = $this->uncontested_plane();
- //     foreach($this->crosses as $c)
-   //     if(in_array($c,$p))
-     //     return($c);
-
-//    }
-
-
-    // find all the winners containing my points.
-    $mywinners = array();
-    foreach($this->winner as $w)
-      foreach($this->me as $m)
-        if((in_array($m,$w)) && (! in_array($w,$mywinners)))
-          $mywinners[] = $w;
-
-    // find all the rules where my points are in the center.
-      $trythese = array();
-      if(count($mywinners)) {
-        foreach($mywinners as $w) {
-          foreach($this->me as $m) {
-            if(($m == $w[1]) && ($this->uncontested_winner($w))
-              && (! in_array($w,$trythese)))
-            $trythese[] = $w;
-          }
-        }
-      }
-
-      $myplanes = array();
-      for($p = 0; $p < count($this->planes); $p ++) {
-        if($this->handicap && in_array('111',$this->planes[$p]))
-          continue;
-        foreach($this->me as $m)
-          if((in_array($m,$this->planes[$p])) 
-            && (! in_array($this->planes[$p],$myplanes)))
-              $myplanes[] = $this->planes[$p];
-      }
-      shuffle($myplanes);
-
-    // find all winners which share an endpoint, and which are uncontested
-      $candidates = array();
-      if(count($trythese) && count($myplanes)) {
-        foreach($trythese as $t) {
-          foreach($this->winner as $w) {
-            if(! $this->uncontested_winner($w))
-              continue;
-            if((in_array($t[0],$w)) || (in_array($t[2],$w))) {
-              foreach($myplanes as $p)
-                if(in_array($w[0],$p) && in_array($w[1],$p) && in_array($w[2],$p) && ($w[1] != $this->me[0]))
-                  if(! in_array($w,$candidates))
-                    $candidates[] = $w;
-            }
-          }
-        }
-      }
-
-      // Find out if we are about to force a win.
-      // Looking for two winning vectors with a common endpoint
-      // and where we own the middle of both - we are now going to 
-      // grab the endpoint. The game isn't yet over but we've already won.
-
-      if(count($candidates)) {
-        foreach($candidates as $c) {
-          if(in_array($c[1],$this->me)) {
-            // return endpoint
-            foreach($trythese as $t)
-              if($t[0] == $c[0])
-                return($t[0]);
-              elseif($t[2] == $c[2])
-                return($t[2]);
-          }
-       }
-
-       // find opponents planes
-      $yourplanes = array();
-      for($p = 0; $p < count($this->planes); $p ++) {
-        if($this->handicap && in_array('111',$this->planes[$p]))
-          continue;
-        if(in_array($this->you[0],$this->planes[$p]))
-          $yourplanes[] = $this->planes[$p];
-      }
-
-      shuffle($this->winner);
-      foreach($candidates as $c) {
-
-         // We now have a list of winning strategy vectors for our second point
-         // Pick one that will force you into defensive mode.
-         // Pick a point close to you so we don't risk giving you two
-         // in a row when you block us. That would force *us* into 
-         // defensive mode.
-         // We want:        or:         not:
-         //           X|O|     X| |       X| |
-         //            |O|     O|O|        |O|
-         //            | |      | |        |O|
-
-         if(count($this->you) == 1) {
-           foreach($this->winner as $w) {
-             if(in_array($this->me[0], $w) && in_array($c[1],$w) 
-               && $this->uncontested_winner($w) 
-               && $this->is_neighbor($this->you[0],$c[1])) {
-                 return($c[1]);
-             }  
-           }
-         }
-       }         
-
-       // You're somewhere else entirely or have made more than one move 
-       // - any strategy vector which puts you on the defense will have to do
-
-       foreach($candidates as $c) {
-         foreach($this->winner as $w) {
-           if(in_array($this->me[0], $w) && in_array($c[1],$w) 
-             && $this->uncontested_winner($w)) {
-                   return($c[1]);
-           }  
-         }
-       }
-     }
-
-    // worst case scenario, no strategy we can play, 
-    // just find an empty space and take it
-
-    for($x = 0; $x < $this->dimen; $x ++)
-      for($y = 0; $y < $this->dimen; $y ++)
-        for($z = 0; $z < $this->dimen; $z ++)
-          if((! $this->marked_yours($x,$y,$z)) 
-            && (! $this->marked_mine($x,$y,$z))) {
-            if($this->handicap && $x == 1 && $y == 1 && $z == 1)
-              continue;
-            return(sprintf("%d%d%d",$x,$y,$z));
-          }
-       
-  return '';
-  }
-
-  function marked_yours($x,$y,$z) {
-   $str = sprintf("%d%d%d",$x,$y,$z);
-   if(in_array($str,$this->you))
-     return true;
-   return false;
-  }
-
-  function marked_mine($x,$y,$z) {
-   $str = sprintf("%d%d%d",$x,$y,$z);
-   if(in_array($str,$this->me))
-     return true;
-   return false;
-  }
-
-  function is_yours($str) {
-   if(in_array($str,$this->you))
-     return true;
-   return false;
-  }
-
-  function is_mine($str) {
-   if(in_array($str,$this->me))
-     return true;
-   return false;
-  }
-
-  function get_corners($a) {
-    $total = array();
-    if(count($a))
-      foreach($a as $b)
-        if(in_array($b,$this->corners))
-          $total[] = $b;
-    return $total;
-  }
-
-  function uncontested_winner($w) {
-    if($this->handicap && in_array('111',$w))
-      return false;
-    $contested = false;
-    if(count($this->you)) {
-      foreach($this->you as $you)
-        if(in_array($you,$w))
-          $contested = true;
-    }
-    return (($contested) ? false : true);
-  }
-
-
-  function is_neighbor($p1,$p2) {
-   list($x1,$y1,$z1) = sscanf($p1, "%1d%1d%1d");
-   list($x2,$y2,$z2) = sscanf($p2, "%1d%1d%1d");
-
-   if((($x1 == $x2) || ($x1 == $x2+1) || ($x1 == $x2-1)) &&
-      (($y1 == $y2) || ($y1 == $y2+1) || ($y1 == $y2-1)) &&
-      (($z1 == $z2) || ($z1 == $z2+1) || ($z1 == $z2-1)))
-     return true;
-   return false;
-
-  }
-
-  function my_best_plane() {
-
-    $second_choice = array();
-    shuffle($this->planes);
-    for($p = 0; $p < count($this->planes); $p ++ ) {
-      $contested = 0;
-      if($this->handicap && in_array('111',$this->planes[$p]))
-        continue;
-      if(! in_array($this->me[0],$this->planes[$p]))
-        continue;
-      foreach($this->you as $m) {
-        if(in_array($m,$this->planes[$p]))
-          $contested ++;   
-      }
-      if(! $contested)
-        return($this->planes[$p]);
-      if($contested == 1)
-        $second_choice = $this->planes[$p];
-    }
-    return $second_choice;
-  }
-
-
-
-
-
-
-
-  function uncontested_plane() {
-    $freeplane = true;
-    shuffle($this->planes);
-    $pl = $this->planes;
-
-    for($p = 0; $p < count($pl); $p ++ ) {
-        if($this->handicap && in_array('111',$pl[$p]))
-          continue;
-       foreach($this->you as $m) {
-         if(in_array($m,$pl[$p]))   
-           $freeplane = false;         
-       }
-       if(! $freeplane) {
-         $freeplane = true;
-         continue;
-       }
-       if($freeplane)
-         return($pl[$p]);
-    }
-    return array();
-  }
-
-  function fullboard() {
-   return false;
-  }
-
-  function draw_board() {
-    if(! strlen($this->yours))
-      $this->yours = 'XXX';
-    $o .=  "<form action=\"tictac/{$this->handicap}/{$this->mefirst}/{$this->dimen}/{$this->yours}/{$this->mine}\" method=\"post\" />";
-    for($x = 0; $x < $this->dimen; $x ++) {
-      $o .=  '<table>';
-      for($y = 0; $y < $this->dimen; $y ++) {
-        $o .=  '<tr>';
-        for($z = 0; $z < $this->dimen; $z ++) {
-          $s = sprintf("%d%d%d",$x,$y,$z);
-          $winner = ((is_array($this->winning_play) && in_array($s,$this->winning_play)) ? " color: #FF0000; " : "");
-          $bordertop = (($y != 0) ? " border-top: 2px solid #000;" : "");
-          $borderleft = (($z != 0) ? " border-left: 2px solid #000;" : "");
-          if($this->handicap && $x == 1 && $y == 1 && $z == 1)
-            $o .=  "<td style=\"width: 25px; height: 25px; $bordertop $borderleft\" align=\"center\">&nbsp;</td>";                  
-          elseif($this->marked_yours($x,$y,$z))
-            $o .=  "<td style=\"width: 25px; height: 25px; $bordertop $borderleft $winner\" align=\"center\">X</td>";
-          elseif($this->marked_mine($x,$y,$z))
-            $o .=  "<td style=\"width: 25px; height: 25px; $bordertop $borderleft $winner\" align=\"center\">O</td>";
-          else {
-            $val = sprintf("%d%d%d",$x,$y,$z);
-            $o .=  "<td style=\"width: 25px; height: 25px; $bordertop $borderleft\" align=\"center\"><input type=\"checkbox\" name=\"move\" value=\"$val\" onclick=\"this.form.submit();\" /></td>";
-          }
-        }
-        $o .=  '</tr>';
-      }
-      $o .=  '</table><br />';
-    }
-    $o .=  '</form>';
-       return $o;
-
-  }
-
-
-}
-
diff --git a/addon/twitter/README b/addon/twitter/README
deleted file mode 100644 (file)
index a49fa5c..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-____ Twitter Plugin ____
-By Tobias Diekershoff
-   tobias.diekershoff(at)gmx.net
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!!   This addon is currently in under development. If you have any problem  !!
-!!   with it, please contact the Author.                                    !!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-With this addon to Friendika you can give your user the possibility to post
-their *public* messages to Twitter. The messages will be strapped their rich
-context and shortened to 140 characters length if necessary. If shortening of
-the message was performed a link will be added to the Tweet pointing to the
-original message on your server.
-
-There is a similar addon for forwarding public messages to
-"StatusNet":http://status.net [[StatusNet Plugin]].
-
-Online version of this document: http://ur1.ca/35mml
-
-___ Requirements ___
-
-To use this plugin you have to register your Friendika instance as an
-_client application_ for Twitter with _read and write_ access, we do not intend
-to use Twitter for login. The registration can be done at twitter.com/apps
-and you need to have a Twitter account to do so.
-
-After you registered the application you get an OAuth consumer key / secret
-pair that identifies your app, you will need them for configuration.
-
-The inclusion of a shorturl for the original posting in cases when the
-message was longer then 140 characters requires it, that you have *PHP5+* and
-*curl* on your server.
-
-___ Where to find ___
-
-In the Friendika git repository /addon/twitter/, this directory contains
-all required PHP files (including the Twitter OAuth library [1] by Abraham
-Williams, MIT licensed and the Slinky library [2] by Beau Lebens, BSD license),
-a CSS file for styling of the user configuration and an image to _Sign in with
-Twitter_.
-
-[1] https://github.com/abraham/twitteroauth
-[2] http://dentedreality.com.au/projects/slinky/
-
-___ Configuration ___
-
-__ Global Configuration __
-
-To activate this addon add @twitter@ to the list of active addons in your
-.htconfig.php file 
-    $a->config['system']['addon'] = "twitter, ..."
-Afterwards you need to add your OAuth consumer key / secret pair to it by
-adding the following to lines
-
-$a->config['twitter']['consumerkey'] = 'your consumer KEY here';
-$a->config['twitter']['consumersecret'] = 'your consumer SECRET here';
-
-When this is done your user can now configure their Twitter connection at
-"Settings -> Addon Settings" and enable the forwarding of their *public*
-messages to Twitter.
-
-__ User Configuration __
-
-When the OAuth consumer informations are correctly placed into the
-configuration file and a user visits the "Addon Settings" page they can now
-connect to Twitter. To do so one has to follow the _Sign in with Twitter_
-button (the page will be opened in a new browser window/tab) and get a PIN from
-Twitter. This PIN has to be entered on the settings page. After submitting the
-PIN the plugin will get OAuth credentials identifying this user from the
-Friendika account.
-
-If this first step was successful the Twitter configuration will be changed
-on the "Addon Settings" page displaying two check boxes. One to enable/disable
-the forwarding of *all public* postings to Twitter and one to clear the
-personal configuration from the Twitter credentials.
-
diff --git a/addon/twitter/admin.tpl b/addon/twitter/admin.tpl
deleted file mode 100644 (file)
index a83eb07..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-{{ inc field_input.tpl with $field=$consumerkey }}{{ endinc }}
-{{ inc field_input.tpl with $field=$consumersecret }}{{ endinc }}
-<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
diff --git a/addon/twitter/lighter.png b/addon/twitter/lighter.png
deleted file mode 100644 (file)
index 297bb03..0000000
Binary files a/addon/twitter/lighter.png and /dev/null differ
diff --git a/addon/twitter/twitter.css b/addon/twitter/twitter.css
deleted file mode 100644 (file)
index 899cfd1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-#twitter-avatar {
-       float: left;
-       width: 48px;
-       height: 48px;
-       padding: 2px;
-}
-#twitter-info-block {
-       height: 52px;
-       vertical-align: middle;
-}
-#twitter-disconnect-label {
-       float: left;
-       width: 200px;
-       margin-bottom: 25px;
-}
-
-#twitter-disconnect {
-       float: left;
-}
-#twitter-enable-label {
-       float: left;
-       width: 200px;
-       margin-bottom: 5px;
-}
-
-#twitter-checkbox {
-       float: left;
-}
-#twitter-pin-label {
-       float: left;
-       width: 200px;
-       margin-bottom: 25px;
-}
-
-#twitter-pin {
-       float: left;
-}
-
-
diff --git a/addon/twitter/twitter.php b/addon/twitter/twitter.php
deleted file mode 100644 (file)
index b1c8a0a..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-<?php
-/**
- * Name: Twitter Connector
- * Version: 1.0.1
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
- */
-
-
-/*   Twitter Plugin for Friendika
- *
- *   Author: Tobias Diekershoff
- *           tobias.diekershoff@gmx.net
- *
- *   License:3-clause BSD license
- *
- *   Configuration:
- *     To use this plugin you need a OAuth Consumer key pair (key & secret)
- *     you can get it from Twitter at https://twitter.com/apps
- *
- *     Register your Friendika site as "Client" application with "Read & Write" access
- *     we do not need "Twitter as login". When you've registered the app you get the
- *     OAuth Consumer key and secret pair for your application/site.
- *
- *     Add this key pair to your global .htconfig.php
- *
- *     $a->config['twitter']['consumerkey'] = 'your consumer_key here';
- *     $a->config['twitter']['consumersecret'] = 'your consumer_secret here';
- *
- *     To activate the plugin itself add it to the $a->config['system']['addon']
- *     setting. After this, your user can configure their Twitter account settings
- *     from "Settings -> Plugin Settings".
- *
- *     Requirements: PHP5, curl [Slinky library]
- *
- *     Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin
- */
-
-/*   __TODO__
- *
- *   - what about multimedia content?
- *     so far we just strip HTML tags from the message
- */
-
-function twitter_install() {
-       //  we need some hooks, for the configuration and for sending tweets
-       register_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); 
-       register_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
-       register_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
-       register_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets');
-       logger("installed twitter");
-}
-
-
-function twitter_uninstall() {
-       unregister_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); 
-       unregister_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
-       unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
-       unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets');
-}
-
-function twitter_jot_nets(&$a,&$b) {
-       if(! local_user())
-               return;
-
-       $tw_post = get_pconfig(local_user(),'twitter','post');
-       if(intval($tw_post) == 1) {
-               $tw_defpost = get_pconfig(local_user(),'twitter','post_by_default');
-               $selected = ((intval($tw_defpost) == 1) ? ' checked="checked" ' : '');
-               $b .= '<div class="profile-jot-net"><input type="checkbox" name="twitter_enable"' . $selected . 'value="1" /> ' 
-                       . t('Post to Twitter') . '</div>';      
-       }
-
-
-}
-
-function twitter_settings_post ($a,$post) {
-       if(! local_user())
-               return;
-       // don't check twitter settings if twitter submit button is not clicked 
-       if (!x($_POST,'twitter-submit')) return;
-       
-       if (isset($_POST['twitter-disconnect'])) {
-               /***
-                * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair
-                * from the user configuration
-                * TODO can we revoke the access tokens at Twitter and do we need to do so?
-                */
-               del_pconfig( local_user(), 'twitter', 'consumerkey'  );
-               del_pconfig( local_user(), 'twitter', 'consumersecret' );
-                del_pconfig( local_user(), 'twitter', 'post' );
-                del_pconfig( local_user(), 'twitter', 'post_by_default' );
-       } else {
-       if (isset($_POST['twitter-pin'])) {
-               //  if the user supplied us with a PIN from Twitter, let the magic of OAuth happen
-               logger('got a Twitter PIN');
-               require_once('library/twitteroauth.php');
-               $ckey    = get_config('twitter', 'consumerkey'  );
-               $csecret = get_config('twitter', 'consumersecret' );
-               //  the token and secret for which the PIN was generated were hidden in the settings
-               //  form as token and token2, we need a new connection to Twitter using these token
-               //  and secret to request a Access Token with the PIN
-               $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']);
-               $token   = $connection->getAccessToken( $_POST['twitter-pin'] );
-               //  ok, now that we have the Access Token, save them in the user config
-               set_pconfig(local_user(),'twitter', 'oauthtoken',  $token['oauth_token']);
-               set_pconfig(local_user(),'twitter', 'oauthsecret', $token['oauth_token_secret']);
-                set_pconfig(local_user(),'twitter', 'post', 1);
-                //  reload the Addon Settings page, if we don't do it see Bug #42
-                goaway($a->get_baseurl().'/settings/addon');
-       } else {
-               //  if no PIN is supplied in the POST variables, the user has changed the setting
-               //  to post a tweet for every new __public__ posting to the wall
-               set_pconfig(local_user(),'twitter','post',intval($_POST['twitter-enable']));
-                set_pconfig(local_user(),'twitter','post_by_default',intval($_POST['twitter-default']));
-                info( t('Twitter settings updated.') . EOL);
-       }}
-}
-function twitter_settings(&$a,&$s) {
-        if(! local_user())
-                return;
-        $a->page['htmlhead'] .= '<link rel="stylesheet"  type="text/css" href="' . $a->get_baseurl() . '/addon/twitter/twitter.css' . '" media="all" />' . "\r\n";
-       /***
-        * 1) Check that we have global consumer key & secret
-        * 2) If no OAuthtoken & stuff is present, generate button to get some
-        * 3) Checkbox for "Send public notices (140 chars only)
-        */
-       $ckey    = get_config('twitter', 'consumerkey' );
-       $csecret = get_config('twitter', 'consumersecret' );
-       $otoken  = get_pconfig(local_user(), 'twitter', 'oauthtoken'  );
-       $osecret = get_pconfig(local_user(), 'twitter', 'oauthsecret' );
-        $enabled = get_pconfig(local_user(), 'twitter', 'post');
-       $checked = (($enabled) ? ' checked="checked" ' : '');
-        $defenabled = get_pconfig(local_user(),'twitter','post_by_default');
-       $defchecked = (($defenabled) ? ' checked="checked" ' : '');
-
-       $s .= '<div class="settings-block">';
-       $s .= '<h3>'. t('Twitter Posting Settings') .'</h3>';
-
-       if ( (!$ckey) && (!$csecret) ) {
-               /***
-                * no global consumer keys
-                * display warning and skip personal config
-                */
-               $s .= '<p>'. t('No consumer key pair for Twitter found. Please contact your site administrator.') .'</p>';
-       } else {
-               /***
-                * ok we have a consumer key pair now look into the OAuth stuff
-                */
-               if ( (!$otoken) && (!$osecret) ) {
-                       /***
-                        * the user has not yet connected the account to twitter...
-                        * get a temporary OAuth key/secret pair and display a button with
-                        * which the user can request a PIN to connect the account to a
-                        * account at Twitter.
-                        */
-                       require_once('library/twitteroauth.php');
-                       $connection = new TwitterOAuth($ckey, $csecret);
-                       $request_token = $connection->getRequestToken();
-                       $token = $request_token['oauth_token'];
-                       /***
-                        *  make some nice form
-                        */
-                       $s .= '<p>'. t('At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter.') .'</p>';
-                       $s .= '<a href="'.$connection->getAuthorizeURL($token).'" target="_twitter"><img src="addon/twitter/lighter.png" alt="'.t('Log in with Twitter').'"></a>';
-                       $s .= '<div id="twitter-pin-wrapper">';
-                       $s .= '<label id="twitter-pin-label" for="twitter-pin">'. t('Copy the PIN from Twitter here') .'</label>';
-                       $s .= '<input id="twitter-pin" type="text" name="twitter-pin" />';
-                       $s .= '<input id="twitter-token" type="hidden" name="twitter-token" value="'.$token.'" />';
-                       $s .= '<input id="twitter-token2" type="hidden" name="twitter-token2" value="'.$request_token['oauth_token_secret'].'" />';
-            $s .= '</div><div class="clear"></div>';
-            $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="twitter-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
-               } else {
-                       /***
-                        *  we have an OAuth key / secret pair for the user
-                        *  so let's give a chance to disable the postings to Twitter
-                        */
-                        require_once('library/twitteroauth.php');
-                       $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
-                       $details = $connection->get('account/verify_credentials');
-                       $s .= '<div id="twitter-info" ><img id="twitter-avatar" src="'.$details->profile_image_url.'" /><p id="twitter-info-block">'. t('Currently connected to: ') .'<a href="https://twitter.com/'.$details->screen_name.'" target="_twitter">'.$details->screen_name.'</a><br /><em>'.$details->description.'</em></p></div>';
-                       $s .= '<p>'. t('If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.') .'</p>';
-                       $s .= '<div id="twitter-enable-wrapper">';
-                       $s .= '<label id="twitter-enable-label" for="twitter-checkbox">'. t('Allow posting to Twitter'). '</label>';
-                       $s .= '<input id="twitter-checkbox" type="checkbox" name="twitter-enable" value="1" ' . $checked . '/>';
-                        $s .= '<div class="clear"></div>';
-                        $s .= '<label id="twitter-default-label" for="twitter-default">'. t('Send public postings to Twitter by default') .'</label>';
-                        $s .= '<input id="twitter-default" type="checkbox" name="twitter-default" value="1" ' . $defchecked . '/>';
-                       $s .= '</div><div class="clear"></div>';
-
-                       $s .= '<div id="twitter-disconnect-wrapper">';
-                        $s .= '<label id="twitter-disconnect-label" for="twitter-disconnect">'. t('Clear OAuth configuration') .'</label>';
-                        $s .= '<input id="twitter-disconnect" type="checkbox" name="twitter-disconnect" value="1" />';
-                       $s .= '</div><div class="clear"></div>';
-                       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="twitter-submit" class="settings-submit" value="' . t('Submit') . '" /></div>'; 
-               }
-       }
-        $s .= '</div><div class="clear"></div></div>';
-}
-
-
-function twitter_post_hook(&$a,&$b) {
-
-       /**
-        * Post to Twitter
-        */
-
-        logger('twitter post invoked');
-
-       if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (! $b['parent']) ) {
-
-               // Twitter is not considered a private network
-               if($b['prvnets'])
-                       return;
-
-
-               load_pconfig(local_user(), 'twitter');
-
-               $ckey    = get_config('twitter', 'consumerkey'  );
-               $csecret = get_config('twitter', 'consumersecret' );
-               $otoken  = get_pconfig(local_user(), 'twitter', 'oauthtoken'  );
-               $osecret = get_pconfig(local_user(), 'twitter', 'oauthsecret' );
-
-               if($ckey && $csecret && $otoken && $osecret) {
-
-                       $twitter_post = intval(get_pconfig(local_user(),'twitter','post'));
-                       $twitter_enable = (($twitter_post && x($_POST,'twitter_enable')) ? intval($_POST['twitter_enable']) : 0);
-
-                       // if API is used, default to the chosen settings
-                       if($_POST['api_source'] && intval(get_pconfig(local_user(),'twitter','post_by_default')))
-                               $twitter_enable = 1;
-
-                       if($twitter_post && $twitter_enable) {
-                               logger('Posting to Twitter', LOGGER_DEBUG);
-                               require_once('library/twitteroauth.php');
-                               require_once('include/bbcode.php');     
-                               $tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
-                               $max_char = 140; // max. length for a tweet
-                               $msg = strip_tags(bbcode($b['body']));
-                               if ( strlen($msg) > $max_char) {
-                                       $shortlink = "";
-                                       require_once('library/slinky.php');
-                                       // post url = base url + /display/ + owner + post id
-                                       // we construct this from the Owner link and replace
-                                       // profile by display - this will cause an error when
-                                       // /profile/ is in the owner url twice but I don't
-                                       // think this will be very common...
-                                       $posturl = str_replace('/profile/','/display/',$b['owner-link']).'/'.$b['id'];
-                                       $slinky = new Slinky( $posturl );
-                                       // setup a cascade of shortening services
-                                       // try to get a short link from these services
-                                       // in the order ur1.ca, trim, id.gd, tinyurl
-                                       $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
-                                       $shortlink = $slinky->short();
-                                       // the new message will be shortened such that "... $shortlink"
-                                       // will fit into the character limit
-                                       $msg = substr($msg, 0, $max_char-strlen($shortlink)-4);
-                                       $msg .= '... ' . $shortlink;
-                               }
-                // and now tweet it :-)
-                               if(strlen($msg)) {
-                                       $result = $tweet->post('statuses/update', array('status' => $msg));
-                                       logger('twitter_post returns: ' . $result);
-                               }
-
-                       }
-               }
-       }
-}
-
-function twitter_plugin_admin_post(&$a){
-       $consumerkey    =       ((x($_POST,'consumerkey'))              ? notags(trim($_POST['consumerkey']))   : '');
-       $consumersecret =       ((x($_POST,'consumersecret'))   ? notags(trim($_POST['consumersecret'])): '');
-       set_config('twitter','consumerkey',$consumerkey);
-       set_config('twitter','consumersecret',$consumersecret);
-       info( t('Settings updated.'). EOL );
-}
-function twitter_plugin_admin(&$a, &$o){
-       $t = file_get_contents( dirname(__file__). "/admin.tpl" );
-       $o = replace_macros($t, array(
-               '$submit' => t('Submit'),
-                                                               // name, label, value, help, [extra values]
-               '$consumerkey' => array('consumerkey', t('Consumer key'),  get_config('twitter', 'consumerkey' ), ''),
-               '$consumersecret' => array('consumersecret', t('Consumer secret'),  get_config('twitter', 'consumersecret' ), '')
-       ));
-}
diff --git a/addon/widgets/settings.tpl b/addon/widgets/settings.tpl
deleted file mode 100644 (file)
index 9d0f21d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<div class="settings-block">
-       <h3 class="settings-heading">$title</h3>
-       <div class='field noedit'>
-               <label>$label</label>
-               <tt>$key</tt>
-       </div>
-       
-       <div class="settings-submit-wrapper">
-               <input type="submit" value="$submit" class="settings-submit" name="widgets-submit" />
-       </div>
-       
-       <h4>$widgets_h</h4>
-       <ul>
-               {{ for $widgets as $w }}
-                       <li><a href="$baseurl/widgets/$w.0/?k=$key&p=1">$w.1</a></li>
-               {{ endfor }}
-       </ul>
-       
-</div>
diff --git a/addon/widgets/widget_friends.php b/addon/widgets/widget_friends.php
deleted file mode 100644 (file)
index 2286f68..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-function friends_widget_name() {
-       return "Shows profile contacts";
-}
-function friends_widget_help() {
-       return "";
-}
-
-function friends_widget_args(){
-       return Array();
-}
-
-function friends_widget_content(&$a, $conf){
-
-       $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `user`.* FROM `profile` 
-                       LEFT JOIN `user` ON `profile`.`uid` = `user`.`uid`
-                       WHERE `user`.`uid` = %s AND `profile`.`is-default` = 1 LIMIT 1",
-                       intval($conf['uid'])
-       );
-       if(!count($r)) return;
-       $a->profile = $r[0];
-
-       $o = "";
-       $o .= "<style>
-               .f9k_widget .contact-block-div { display: block !important; float: left!important; width: 50px!important; height: 50px!important; margin: 2px!important;}
-               .f9k_widget #contact-block-end { clear: left; }
-       </style>";
-       $o .= _abs_url(contact_block());
-       $o .= "<a href='".$a->get_baseurl().'/profile/'.$a->profile['nickname']."'>". t('Connect on Friendika!') ."</a>";
-       return $o;
-}
diff --git a/addon/widgets/widget_like.php b/addon/widgets/widget_like.php
deleted file mode 100644 (file)
index 9b54212..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-function like_widget_name() {
-       return "Shows likes";
-}
-function like_widget_help() {
-       return "Search first item wich contains <em>KEY</em> and print like/dislike count";
-}
-
-function like_widget_args(){
-       return Array("KEY");
-}
-
-function like_widget_content(&$a, $conf){
-       $args = explode(",",$_GET['a']);
-       
-       if ($args[0]!=""){
-               return " #TODO like/dislike count for item with <em>" .$args[0]. "</em> # ";
-       } else {
-               return " #TODO# ";
-       }
-}
diff --git a/addon/widgets/widgets.js b/addon/widgets/widgets.js
deleted file mode 100644 (file)
index 45d36c4..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * @author Fabio Comuni
- */
-
-var f9a_widget_$widget_id = {
-       entrypoint : "$entrypoint",
-       key     : "$key",
-       widgetid: "$widget_id",
-       argstr: "$args",
-       xmlhttp : null,
-       
-       getXHRObj : function(){
-               if (window.XMLHttpRequest) {
-                       // code for IE7+, Firefox, Chrome, Opera, Safari
-                       this.xmlhttp = new XMLHttpRequest();
-               } else {
-                       // code for IE6, IE5
-                       this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
-               }
-       },
-       
-       dorequest : function(args, cb) {
-               if (args===null) args = new Array();
-               args['k']=this.key;
-               args['s']=window.location;
-               args['a']=this.argstr;
-               var urlencodedargs = new Array();
-               for(k in args){ urlencodedargs.push( encodeURIComponent(k)+"="+encodeURIComponent(args[k]) ); }
-       
-               var url = this.entrypoint + "?"+ urlencodedargs.join("&");
-
-               this.xmlhttp.open("GET", url  ,true);
-               this.xmlhttp.send();
-               this.xmlhttp.obj = this;
-               this.xmlhttp.onreadystatechange=function(){
-                 if (this.readyState==4){
-                       if (this.status==200) {
-                       cb(this.obj, this.responseText);
-                       } else {
-                               document.getElementById(this.obj.widgetid).innerHTML="Error loading widget.";
-                       }
-                 }
-               } 
-
-       },
-       
-       requestcb: function(obj, responseText) {
-               document.getElementById(obj.widgetid).innerHTML=responseText;
-       },
-       
-       load : function (){
-               this.getXHRObj();
-               this.dorequest(null, this.requestcb);
-       }
-
-};
-
-(function() {
-       f9a_widget_$widget_id.load();   
-})();
-
-document.writeln("<div id='$widget_id' class='f9k_widget'>");
-document.writeln("<img id='$widget_id_ld' src='$loader'>");
-document.writeln("</div>");
diff --git a/addon/widgets/widgets.php b/addon/widgets/widgets.php
deleted file mode 100644 (file)
index 13c4f93..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-<?php
-/**
- * Name: Widgets
- * Description: Allow to embed info from friendika into another site
- * Version: 1.0
- * Author: Fabio Comuni <http://kirgroup.com/profile/fabrix/>
- */
-        
-function widgets_install() {
-       register_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); 
-       register_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post');
-       logger("installed widgets");
-}
-function widgets_uninstall() {
-       unregister_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); 
-       unregister_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post');
-}
-
-
-function widgets_settings_post(){
-       
-       if (isset($_POST['widgets-submit'])){
-               del_pconfig(local_user(), 'widgets', 'key');
-               
-       }
-}
-
-function widgets_settings(&$a,&$o) {
-    if(! local_user())
-               return;         
-       
-       
-       $key = get_pconfig(local_user(), 'widgets', 'key' );
-       if ($key=='') { $key = mt_rand(); set_pconfig(local_user(), 'widgets', 'key', $key); }
-
-       $widgets = array();
-       $d = dir(dirname(__file__));
-       while(false !== ($f = $d->read())) {
-                if(substr($f,0,7)=="widget_") {
-                        preg_match("|widget_([^.]+).php|", $f, $m);
-                        $w=$m[1];
-                        require_once($f);
-                        $widgets[] = array($w, call_user_func($w."_widget_name"));
-
-                }
-       }
-
-       
-       
-       $t = file_get_contents( dirname(__file__). "/settings.tpl" );
-       $o .= replace_macros($t, array(
-               '$submit' => t('Generate new key'),
-               '$baseurl' => $a->get_baseurl(),
-               '$title' => "Widgets",
-               '$label' => t('Widgets key'),
-               '$key' => $key,
-               '$widgets_h' => t('Widgets available'),
-               '$widgets' => $widgets,
-       ));
-       
-}
-
-function widgets_module() {
-       return;
-}
-
-function _abs_url($s){
-       $a = get_app();
-       return preg_replace("|href=(['\"])([^h][^t][^t][^p])|", "href=\$1".$a->get_baseurl()."/\$2", $s);
-}
-
-
-function widgets_content(&$a) {
-
-       if (!isset($_GET['k'])) {
-               if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();}
-               return;
-       }
-
-       $r = q("SELECT * FROM pconfig WHERE uid IN (SELECT uid FROM pconfig  WHERE v='%s')AND  cat='widgets'",
-                       dbesc($_GET['k'])
-                );
-       if (!count($r)){
-               if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();}
-               return;
-       }    
-       $conf = array();
-       $conf['uid'] = $r[0]['uid'];
-       foreach($r as $e) { $conf[$e['k']]=$e['v']; }
-       
-       $o = "";        
-
-       $widgetfile =dirname(__file__)."/widget_".$a->argv[1].".php";
-       if (file_exists($widgetfile)){
-               require_once($widgetfile);
-       } else {
-               if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();}
-               return;
-       }               
-       
-
-
-
-       //echo "<pre>"; var_dump($a->argv); die();
-       if ($a->argv[2]=="cb"){
-               /*if (!local_user()){
-                       if (!isset($_GET['s']))
-                               {header('HTTP/1.0 400 Bad Request'); killme();}
-                       
-                       if (substr($_GET['s'],0,strlen($conf['site'])) !== $conf['site'])
-                               {header('HTTP/1.0 400 Bad Request'); killme();}
-               } */
-               $o .= call_user_func($a->argv[1].'_widget_content',$a, $conf);
-               
-       } else {
-
-               
-               if (isset($_GET['p']) && local_user()==$conf['uid'] ) {
-                       $o .= "<style>.f9k_widget { float: left;border:1px solid black; }</style>";
-                       $o .= "<h1>Preview Widget</h1>";
-                       $o .= '<a href="'.$a->get_baseurl().'/settings/addon">'. t("Plugin Settings") .'</a>';
-
-                       $o .=  "<h4>".call_user_func($a->argv[1].'_widget_name')."</h4>";
-                       $o .=  call_user_func($a->argv[1].'_widget_help');
-                       $o .= "<br style='clear:left'/><br/>";
-                       $o .= "<script>";
-               } else {
-                       header("content-type: application/x-javascript");
-               }
-       
-       
-
-       
-               $script = file_get_contents(dirname(__file__)."/widgets.js");
-               $o .= replace_macros($script, array(
-                       '$entrypoint' => $a->get_baseurl()."/widgets/".$a->argv[1]."/cb/",
-                       '$key' => $conf['key'],
-                       '$widget_id' => 'f9k_'.$a->argv[1]."_".time(),
-                       '$loader' => $a->get_baseurl()."/images/rotator.gif",
-                       '$args' => (isset($_GET['a'])?$_GET['a']:''),
-               ));
-
-       
-               if (isset($_GET['p'])) {
-                       $jsargs = implode("</em>,<em>", call_user_func($a->argv[1].'_widget_args'));
-                       if ($jsargs!='') $jsargs = "&a=<em>".$jsargs."</em>";
-                               
-                       $o .= "</script>
-                       <br style='clear:left'/><br/>
-                       <h4>Copy and paste this code</h4>
-                       <code>"
-                       
-                       .htmlspecialchars('<script src="'.$a->get_baseurl().'/widgets/'.$a->argv[1].'?k='.$conf['key'])
-                       .$jsargs
-                       .htmlspecialchars('"></script>')
-                       ."</code>";
-                       return $o;
-               }       
-               
-       }       
-       
-       echo $o;
-       killme();
-}
-
-
-
-?>
index 16b8f9c850154aebcdab717e8e3c5c924bb2aa0e..77066717721acbdbcf6209de953ef9869c4817f4 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -5,11 +5,12 @@ require_once('include/network.php');
 require_once('include/plugin.php');
 require_once('include/text.php');
 require_once("include/pgettext.php");
+require_once('include/nav.php');
 
-
-define ( 'FRIENDIKA_VERSION',      '2.2.1081' );
+define ( 'FRIENDIKA_PLATFORM',     'Free Friendika');
+define ( 'FRIENDIKA_VERSION',      '2.3.1123' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.21'    );
-define ( 'DB_UPDATE_VERSION',      1082      );
+define ( 'DB_UPDATE_VERSION',      1094      );
 
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
@@ -151,6 +152,8 @@ define ( 'ACTIVITY_DISLIKE',     NAMESPACE_DFRN            . '/dislike' );
 define ( 'ACTIVITY_OBJ_HEART',   NAMESPACE_DFRN            . '/heart' );
 
 define ( 'ACTIVITY_FRIEND',      NAMESPACE_ACTIVITY_SCHEMA . 'make-friend' );
+define ( 'ACTIVITY_REQ_FRIEND',  NAMESPACE_ACTIVITY_SCHEMA . 'request-friend' );
+define ( 'ACTIVITY_UNFRIEND',    NAMESPACE_ACTIVITY_SCHEMA . 'remove-friend' );
 define ( 'ACTIVITY_FOLLOW',      NAMESPACE_ACTIVITY_SCHEMA . 'follow' );
 define ( 'ACTIVITY_UNFOLLOW',    NAMESPACE_ACTIVITY_SCHEMA . 'stop-following' );
 define ( 'ACTIVITY_POST',        NAMESPACE_ACTIVITY_SCHEMA . 'post' );
@@ -164,6 +167,7 @@ define ( 'ACTIVITY_OBJ_PHOTO',   NAMESPACE_ACTIVITY_SCHEMA . 'photo' );
 define ( 'ACTIVITY_OBJ_P_PHOTO', NAMESPACE_ACTIVITY_SCHEMA . 'profile-photo' );
 define ( 'ACTIVITY_OBJ_ALBUM',   NAMESPACE_ACTIVITY_SCHEMA . 'photo-album' );
 define ( 'ACTIVITY_OBJ_EVENT',   NAMESPACE_ACTIVITY_SCHEMA . 'event' );
+define ( 'ACTIVITY_OBJ_TAGTERM', NAMESPACE_DFRN            . '/tagterm' );
 
 /**
  * item weight for query ordering
@@ -184,7 +188,9 @@ define ( 'GRAVITY_COMMENT',      6);
 function startup() {
        error_reporting(E_ERROR | E_WARNING | E_PARSE);
        set_time_limit(0);
-       ini_set('pcre.backtrack_limit', 250000);
+
+       // This has to be quite large to deal with embedded private photos
+       ini_set('pcre.backtrack_limit', 350000);
 
 
        if (get_magic_quotes_gpc()) {
@@ -245,7 +251,7 @@ class App {
        public  $timezone;
        public  $interactive = true;
        public  $plugins;
-       public  $apps;
+       public  $apps = Array();
        public  $identities;
 
        private $scheme;
@@ -674,6 +680,8 @@ function login($register = false) {
                '$lostlink'      => $lostlink 
        ));
 
+       call_hooks('login_hook',$o);
+
        return $o;
 }}
 
@@ -718,14 +726,16 @@ function remote_user() {
 if(! function_exists('notice')) {
 function notice($s) {
        $a = get_app();
+       if(! x($_SESSION,'sysmsg'))     $_SESSION['sysmsg'] = array();
        if($a->interactive)
-               $_SESSION['sysmsg'] .= $s;
+               $_SESSION['sysmsg'][] = $s;
 }}
 if(! function_exists('info')) {
 function info($s) {
        $a = get_app();
+       if(! x($_SESSION,'sysmsg_info')) $_SESSION['sysmsg_info'] = array();
        if($a->interactive)
-               $_SESSION['sysmsg_info'] .= $s;
+               $_SESSION['sysmsg_info'][] = $s;
 }}
 
 
@@ -807,8 +817,8 @@ function profile_load(&$a, $nickname, $profile = 0) {
 
        $a->page['aside'] .= profile_sidebar($a->profile, $block);
 
-       if(! $block)
-               $a->page['aside'] .= contact_block();
+       /*if(! $block)
+               $a->page['aside'] .= contact_block();*/
 
        return;
 }}
@@ -836,132 +846,107 @@ function profile_sidebar($profile, $block = 0) {
        $a = get_app();
 
        $o = '';
-       $location = '';
+       $location = false;
        $address = false;
+       $pdesc = true;
 
        if((! is_array($profile)) && (! count($profile)))
                return $o;
 
        call_hooks('profile_sidebar_enter', $profile);
 
-       $fullname = '<div class="fn">' . $profile['name'] . '</div>';
+       
+       // don't show connect link to yourself
+       $connect = (($profile['uid'] != local_user()) ? t('Connect')  : False);
 
-       $pdesc = '<div class="title">' . $profile['pdesc'] . '</div>';
+       // don't show connect link to authenticated visitors either
 
-       $tabs = '';
+       if((remote_user()) && ($_SESSION['visitor_visiting'] == $profile['uid']))
+               $connect = False; 
+
+
+       // show edit profile to yourself
+       if ($profile['uid'] == local_user()) {
+               $profile['edit'] = array($a->get_baseurl(). '/profiles', t('Profiles'),"", t('Manage/edit profiles'));
+               
+               $r = q("SELECT * FROM `profile` WHERE `uid` = %d",
+                               local_user());
+               
+               $profile['menu'] = array(
+                       'chg_photo' => t('Change profile photo'),
+                       'cr_new' => t('Create New Profile'),
+                       'entries' => array(),
+               );
+                               
+               if(count($r)) {
 
-       $photo = '<div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>';
+                       foreach($r as $rr) {
+                               $profile['menu']['entries'][] = array(
+                                       'photo' => $rr['thumb'],
+                                       'id' => $rr['id'],
+                                       'alt' => t('Profile Image'),
+                                       'profile_name' => $rr['profile-name'],
+                                       'isdefault' => $rr['is-default'],
+                                       'visibile_to_everybody' =>  t('visible to everybody'),
+                                       'edit_visibility' => t('Edit visibility'),
+                                       
+                               );
+                       }
 
-       // don't show connect link to yourself
-       $connect = (($profile['uid'] != local_user()) ? '<li><a id="dfrn-request-link" href="dfrn_request/' . $profile['nickname'] . '">' . t('Connect') . '</a></li>' : '');
 
-       // don't show connect link to authenticated visitors either
+               }
+               
+               
+       }
 
-       if((remote_user()) && ($_SESSION['visitor_visiting'] == $profile['uid']))
-               $connect = ''; 
 
+
+       
        if((x($profile,'address') == 1) 
                || (x($profile,'locality') == 1) 
                || (x($profile,'region') == 1) 
                || (x($profile,'postal-code') == 1) 
                || (x($profile,'country-name') == 1))
-               $address = true;
-
-       if($address) {
-               $location .= '<div class="location"><span class="location-label">' . t('Location:') . '</span> <div class="adr">';
-               $location .= ((x($profile,'address') == 1) ? '<div class="street-address">' . $profile['address'] . '</div>' : '');
-               $location .= (((x($profile,'locality') == 1) || (x($profile,'region') == 1) || (x($profile,'postal-code') == 1)) 
-                       ? '<span class="city-state-zip"><span class="locality">' . $profile['locality'] . '</span>' 
-                       . ((x($profile['locality']) == 1) ? t(', ') : '') 
-                       . '<span class="region">' . $profile['region'] . '</span>'
-                       . ' <span class="postal-code">' . $profile['postal-code'] . '</span></span>' : '');
-               $location .= ((x($profile,'country-name') == 1) ? ' <span class="country-name">' . $profile['country-name'] . '</span>' : '');  
-               $location .= '</div></div><div class="profile-clear"></div>';
+               $location = t('Location:');
 
-       }
+       $gender = ((x($profile,'gender') == 1) ? t('Gender:') : False);
 
 
-       $gender = ((x($profile,'gender') == 1) ? '<div class="mf"><span class="gender-label">' . t('Gender:') . '</span> <span class="x-gender">' . $profile['gender'] . '</span></div><div class="profile-clear"></div>' : '');
+       $marital = ((x($profile,'marital') == 1) ?  t('Status:') : False);
 
-       $pubkey = ((x($profile,'pubkey') == 1) ? '<div class="key" style="display:none;">' . $profile['pubkey'] . '</div>' : '');
+       $homepage = ((x($profile,'homepage') == 1) ?  t('Homepage:') : False);
 
-       $marital = ((x($profile,'marital') == 1) ? '<div class="marital"><span class="marital-label"><span class="heart">&hearts;</span> ' . t('Status:') . ' </span><span class="marital-text">' . $profile['marital'] . '</span></div><div class="profile-clear"></div>' : '');
+       if(($profile['hidewall'] || $block) && (! local_user()) && (! remote_user())) {
+               $location = $pdesc = $connect = $gender = $marital = $homepage = False;
+       }
 
-       $homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div><div class="profile-clear"></div>' : '');
+       $diaspora = array(
+               'podloc' => $a->get_baseurl(),
+               'searchable' => (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' ),
+               'nickname ' => $profile['nickname'],
+               'fullname' => $profile['name'],
+               'photo300' => $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg',
+               'photo100' => $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg',
+               'photo50' => $a->get_baseurl() . '/photo/custom/50/'  . $profile['uid'] . '.jpg',
+       );
 
-       if(($profile['hidewall'] || $block) && (! local_user()) && (! remote_user())) {
-               $location = $pdesc = $connect = $gender = $marital = $homepage = '';
+       if (!$block){
+               $contact_block = contact_block();
        }
 
-       $podloc = $a->get_baseurl();
-       $searchable = (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' );
-       $nickname = $profile['nickname'];
-       $photo300 = $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg';
-       $photo100 = $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg';
-       $photo50  = $a->get_baseurl() . '/photo/custom/50/'  . $profile['uid'] . '.jpg';
-
-       $diaspora_vcard = <<< EOT
-
-<div style="display:none;">
-<dl class='entity_nickname'>
-<dt>Nickname</dt>
-<dd>
-<a class="nickname url uid" href="$podloc/" rel="me">$nickname</a>
-</dd>
-</dl>
-<dl class='entity_fn'>
-<dt>Full name</dt>
-<dd>
-<span class='fn'>$fullname</span>
-</dd>
-</dl>
-<dl class="entity_url">
-<dt>URL</dt>
-<dd>
-<a class="url" href="$podloc/" id="pod_location" rel="me">$podloc/</a>
-</dd>
-</dl>
-<dl class="entity_photo">
-<dt>Photo</dt>
-<dd>
-<img class="photo avatar" height="300px" width="300px" src="$photo300">
-</dd>
-</dl>
-<dl class="entity_photo_medium">
-<dt>Photo</dt>
-<dd> 
-<img class="photo avatar" height="100px" width="100px" src="$photo100">
-</dd>
-</dl>
-<dl class="entity_photo_small">
-<dt>Photo</dt>
-<dd>
-<img class="photo avatar" height="50px" width="50px" src="$photo50">
-</dd>
-</dl>
-<dl class="entity_searchable">
-<dt>Searchable</dt>
-<dd>
-<span class="searchable">$searchable</span>
-</dd>
-</dl>
-</div>
-EOT;
 
        $tpl = get_markup_template('profile_vcard.tpl');
 
        $o .= replace_macros($tpl, array(
-               '$fullname' => $fullname,
-               '$pdesc'    => $pdesc,
-               '$tabs'     => $tabs,
-               '$photo'    => $photo,
+               '$profile' => $profile,
                '$connect'  => $connect,                
-               '$location' => $location,
+               '$location' => template_escape($location),
                '$gender'   => $gender,
-               '$pubkey'   => $pubkey,
+               '$pdesc'        => $pdesc,
                '$marital'  => $marital,
                '$homepage' => $homepage,
-               '$diaspora' => $diaspora_vcard
+               '$diaspora' => $diaspora,
+               '$contact_block' => $contact_block,
        ));
 
 
@@ -1011,7 +996,7 @@ function get_birthdays() {
                                $now = strtotime('now');
                                $today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false); 
        
-                               $o .= '<div class="birthday-list" id="birthday-' . $rr['eid'] . '"><a class="sparkle" href="' 
+                               $o .= '<div class="birthday-list" id="birthday-' . $rr['eid'] . '"><a class="sparkle" target="redir" href="' 
                                . $a->get_baseurl() . '/redir/'  . $rr['cid'] . '">' . $rr['name'] . '</a> ' 
                                . day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $bd_format)) . (($today) ?  ' ' . t('[today]') : '')
                                . '</div>' ;
@@ -1169,3 +1154,4 @@ function load_contact_links($uid) {
        $a->contacts = $ret;
        return;         
 }}
+
index f6ae4c7c609aa75ffd2a1619c8443b63e40c6682..15e2f2ccac0058c08e58917d4aaa371d9c121379 100644 (file)
@@ -58,6 +58,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
   `network` char(255) NOT NULL,
   `name` char(255) NOT NULL,
   `nick` char(255) NOT NULL,
+  `attag` char(255) NOT NULL,
   `photo` text NOT NULL, 
   `thumb` text NOT NULL,
   `micro` text NOT NULL,
@@ -69,6 +70,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
   `alias` char(255) NOT NULL,
   `pubkey` text NOT NULL,
   `prvkey` text NOT NULL,
+  `batch` char(255) NOT NULL,
   `request` text NOT NULL,
   `notify` text NOT NULL,
   `poll` text NOT NULL,
@@ -112,6 +114,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
 CREATE TABLE IF NOT EXISTS `group` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `uid` int(10) unsigned NOT NULL,
+  `visible` tinyint(1) NOT NULL DEFAULT '0',
   `deleted` tinyint(1) NOT NULL DEFAULT '0',
   `name` char(255) NOT NULL,
   PRIMARY KEY (`id`)
@@ -173,6 +176,7 @@ CREATE TABLE IF NOT EXISTS `item` (
   `thr-parent` char(255) NOT NULL,
   `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `owner-name` char(255) NOT NULL,
@@ -205,6 +209,7 @@ CREATE TABLE IF NOT EXISTS `item` (
   `pubmail` tinyint(1) NOT NULL DEFAULT '0',
   `visible` tinyint(1) NOT NULL DEFAULT '0',
   `starred` tinyint(1) NOT NULL DEFAULT '0',
+  `bookmark` tinyint(1) NOT NULL DEFAULT '0',
   `unseen` tinyint(1) NOT NULL DEFAULT '1',
   `deleted` tinyint(1) NOT NULL DEFAULT '0',
   `last-child` tinyint(1) unsigned NOT NULL DEFAULT '1',
@@ -404,19 +409,25 @@ CREATE TABLE IF NOT EXISTS `user` (
   `blocked` tinyint(1) unsigned NOT NULL DEFAULT '0', 
   `blockwall` tinyint(1) unsigned NOT NULL DEFAULT '0',
   `hidewall` tinyint(1) unsigned NOT NULL DEFAULT '0',
+  `blocktags` tinyint(1) unsigned NOT NULL DEFAULT '0',
   `notify-flags` int(11) unsigned NOT NULL DEFAULT '65535', 
   `page-flags` int(11) unsigned NOT NULL DEFAULT '0',
   `prvnets` tinyint(1) NOT NULL DEFAULT '0',
   `pwdreset` char(255) NOT NULL,
   `maxreq` int(11) NOT NULL DEFAULT '10',
   `expire` int(11) unsigned NOT NULL DEFAULT '0',
+  `account_expired` tinyint( 1 ) NOT NULL DEFAULT '0',
+  `account_expires_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `allow_cid` mediumtext NOT NULL, 
   `allow_gid` mediumtext NOT NULL,
   `deny_cid` mediumtext NOT NULL, 
   `deny_gid` mediumtext NOT NULL,
   `openidserver` text NOT NULL,
   PRIMARY KEY (`uid`), 
-  KEY `nickname` (`nickname`)
+  KEY `nickname` (`nickname`),
+  KEY `account_expired` (`account_expired`),
+  KEY `login_date` (`login_date`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
 
@@ -461,7 +472,8 @@ CREATE TABLE IF NOT EXISTS `queue` (
 `network` CHAR( 32 ) NOT NULL,
 `created` DATETIME NOT NULL ,
 `last` DATETIME NOT NULL ,
-`content` MEDIUMTEXT NOT NULL
+`content` MEDIUMTEXT NOT NULL,
+`batch` TINYINT( 1 ) NOT NULL DEFAULT '0'
 ) ENGINE = MyISAM DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `pconfig` (
@@ -526,6 +538,7 @@ CREATE TABLE IF NOT EXISTS `fcontact` (
 `request` CHAR( 255 ) NOT NULL,
 `nick` CHAR( 255 ) NOT NULL ,
 `addr` CHAR( 255 ) NOT NULL ,
+`batch` CHAR( 255) NOT NULL,
 `notify` CHAR( 255 ) NOT NULL ,
 `poll` CHAR( 255 ) NOT NULL ,
 `confirm` CHAR( 255 ) NOT NULL ,
@@ -606,3 +619,26 @@ INDEX ( `iid` )
 ) ENGINE = MyISAM DEFAULT CHARSET=utf8;
 
 
+CREATE TABLE IF NOT EXISTS `deliverq` (
+`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+`cmd` CHAR( 32 ) NOT NULL ,
+`item` INT NOT NULL ,
+`contact` INT NOT NULL
+) ENGINE = MyISAM DEFAULT CHARSET=utf8;
+
+CREATE TABLE IF NOT EXISTS `search` (
+`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+`uid` INT NOT NULL ,
+`term` CHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+INDEX ( `uid` ),
+INDEX ( `term` )
+) ENGINE = MyISAM DEFAULT CHARSET=utf8;
+
+CREATE TABLE IF NOT EXISTS `fserver` (
+`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+`server` CHAR( 255 ) NOT NULL ,
+`posturl` CHAR( 255 ) NOT NULL ,
+`key` TEXT NOT NULL,
+INDEX ( `server` )
+) ENGINE = MyISAM DEFAULT CHARSET=utf8;
+
index 5791dce78393ba49df7f96cdbb6c925456dc9ace..48584764ad59a83bf0ef148b224c1e3479a6b08a 100644 (file)
@@ -18,7 +18,7 @@ Please provide your full name as you would like it to be displayed on this syste
 
 *Email Address*
 
-Please provide a valid email address. Your email address is **never** published. We need this to send you account information and your login details. You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the ability to completely disable these once from your Settings page once you have logged in.     
+Please provide a valid email address. Your email address is **never** published. We need this to send you account information and your login details. You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the ability to completely disable these from your Settings page once you have logged in.     
 
 *Nickname*
 
index 9b2430d09466e1bb61358ba08f7e3c509062d2e3..6bbf15b2cf4ecbeaeedabf8141ecd09a4f47d202 100644 (file)
@@ -20,6 +20,12 @@ Instructions For Connecting To People On Specific Services
 
 You may connect by providing your Identity Address on the 'Connect' page of any Friendika member. You may also put their Identity Address into the Connect box on your [Contacts](contacts) page. 
 
+
+**Diaspora**
+
+Add the Diaspora 'handle' to the 'Connect/Follow' text box on your [Contacts](contacts) page. 
+
+
 **Identi.ca/StatusNet/GNU-Social**
 
 These are described as the "federated social web" or OStatus contacts. 
@@ -45,10 +51,6 @@ This will allow you to _connect_ with millions of pages on the internet. All tha
 
 To follow a Twitter member, put the URL of the Twitter member's main page into the Connect box on your [Contacts](contacts) page. To reply, you must have the Twitter connector installed, and reply using your own status editor. Begin the message with @twitterperson replacing with the Twitter username.
 
-**Diaspora**
-
-To follow a Diaspora member, put either the URL or the pod address (Identity Address) of the Diaspora member into the Connect box on your [Contacts](contacts) page. It is not currently possible to reply to Diaspora members. This will be provided in a future release (once the Diaspora communication protocols stabilise and are published). 
-
 **Email**
 
 Configure the email connector from your [Settings](settings) page. Once this has been done, you may enter an email addres to connect with using the Connect box on your [Contacts](contacts) page. They must be the sender of a message which is currently in your INBOX for the connect to succeed. You may include email contacts in private conversations.
index ebfaf97c38e23ff042015bd8579a74be60f40a06..744a76a8b10304ea4c956cedcc32362201862e8e 100644 (file)
@@ -7,7 +7,7 @@ doing development.
 
 Create your own github account.
 
-You may fork/clone the Friendika repository from [https://github.com/friendika/friendika.git](https://github.com/friendika/friendika.git).
+You may fork/clone the Friendika repository from [https://github.com/friendika/Free-Friendika.git](https://github.com/friendika/Free-Friendika.git).
 
 Follow the instructions provided here: [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/)
 to create and use your own tracking fork on github
index 3538d7bfa3ec0f5878be37f02346c44fed2c30b4..b5ab1ef6fbb80be9d82152f2c941d9ff64b37c44 100644 (file)
@@ -36,14 +36,28 @@ you might have trouble getting everything to work.]
 
     - If you are able to do so, we recommend using git to clone the source repository rather than to use a packaged tar or zip file. This makes the software much easier to update. The Linux command to clone the repository into a directory "mywebsite" would be 
 
-    `git clone http://github.com/friendika/friendika.git mywebsite`
-
-    and then you can pick up the latest changes at any time with
-
-    `git pull`
-
-
+        `git clone https://github.com/friendika/Free-Friendika.git mywebsite`
+
+    - and then you can pick up the latest changes at any time with
+
+        `git pull`
+    
+    - For installing addons
+    
+        - First you should be **on** your website folder
+        
+            `cd mywebsite`
+            
+        - Then you should clone the addon repository (separtely)
+        
+            `git clone https://github.com/friendika/friendika-addons.git addon`
+            
+        - For keeping the addon tree updated, you should be on you addon tree and issue a git pull
+        
+            `cd mywebsite/addon`
+            
+            `git pull`
+            
     - If you copy the directory tree to your webserver, make sure
     that you also copy .htaccess - as "dot" files are often hidden
     and aren't normally copied.
index c8fc8e790577ce551c4d4ae5d2feb35b71f01536..cb56383ce4fdc921db7e12077098ccec2e4b479a 100644 (file)
@@ -12,7 +12,7 @@ All three of these plugins require an account on the target network. In addition
 
 **Site Configuration**
 
-Plugins must be installed by the site administrator before they can be use. This is accomplished through the site
+Plugins must be installed by the site administrator before they can be used. This is accomplished through the site
 configuration file ".htconfig.php".
 
 The configuration directive looks like:
@@ -84,7 +84,7 @@ To get the OAuth Consumer key pair the user has to
 (a) ask her Friendika admin if a pair already exists or 
 (b) has to register the Friendika server as a client application on the StatusNet server. 
 
-This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register new application".
+This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register new application".
 
 During the registration of the OAuth client remember the following:
 
@@ -133,8 +133,8 @@ d. Navigate to Set Web->Site URL & Domain -> Website Settings.  Set Site URL
 to yoursubdomain.yourdomain.com.  Set Site Domain to your yourdomain.com.
 
 
-Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
-and click 'Install Facebook Connector'.
+Visit the Facebook Settings section of the "Settings->Plugin Settings" page. 
+And click 'Install Facebook Connector'.
 
 This will ask you to login to Facebook and grant permission to the
 plugin to do its stuff. Allow it to do so.
index 4bb05872e543d27ae81b748ef2b2d21cf2df6d15..70c7731cc2323f627c0ecc764fd0591f08fec9a6 100644 (file)
@@ -29,19 +29,21 @@ You can also use your Identity Address or other people's Identity Addresses to b
 
 If you have supplied your mailbox connection information on your Settings page, you can enter the email address of anybody that has sent you a message recently and have their email messages show up in your social stream. You can also reply to them from within Friendika.  
 
-People can also become friends with you from other networks. If a friend of yours has an identi.ca account, they can become friends with you by putting your Friendika Identity Address into their identi.ca subscription dialog box. 
+People can also become friends with you from other networks. If a friend of yours has an identi.ca account, they can become friends with you by putting your Friendika Identity Address into their identi.ca subscription dialog box. A similar mechanism is available for Diaspora members, by putting your iendtity address into their search bar. 
 
-If this happens you will receive a notification. You will need to approve this before the friendship is complete.
+Note: Some versions of StatusNet software may require the full URL to your profile and may not work with the identity address.
 
-Some networks allow people to send you messages without being friends and without your approval. Friendika does not allow this by default, as it would open a gateway for spam. So when you've approved a friend request from one of these networks, look at your contact page for that person (this will be displayed as soon as you approve the relationship). They might be marked as an "Ignored" contact. 
+When somebody requests friendship you will receive a notification. You will need to approve this before the friendship is complete.
 
-This means they can see some of your posts (your public posts), but they aren't permitted to send you anything. You can "Un-ignore" them if you desire to allow them to contact you directly and to have their status updates appear in your Network feed
+Some networks allow people to send you messages without being friends and without your approval. Friendika does not allow this by default, as it would open a gateway for spam
 
-When you receive a friendship notification from another Friendika member, you will have the option of allowing them as a "fan" or as a "friend". If they are a fan, they can see what you have to say, including private communications that you send to them, but not vice versa. As a friend, you can both communicate with each other.
+When you receive a friendship notification from another Friendika member, you will have the option of allowing them as a "fan" or as a "friend". If they are a fan, they can see what you have to say, including private communications that you send to them, but not vice versa. As a friend, you can both communicate with each other. 
+
+Diaspora uses a different terminology, and you are given the option of allowing them to "share with you",  or being full friends. 
 
 Once you have become friends, if you find the person constantly sends you spam or worthless information, you can "Ignore" them - without breaking off the friendship or even alerting them to the fact that you aren't interested in anything they are saying. In many ways they are like a "fan" - but they don't know this. They think they are a friend. 
 
-You can also "block" a person. This completely blocks communications with that person. They may still be able to see your public posts, as can anybody in the world, but they cannot communicate with you directly in any way.  They will know or be able to discover that they have been blocked but there's nothing they can do about it
+You can also "block" a person. This completely blocks communications with that person. They may still be able to see your public posts, as can anybody in the world, but they cannot communicate with you directly. 
 
 You can also delete a friend no matter what the friendship status - which complete removes everything relating to that person from your website. 
 
index 631a4331bf2d0d0a0624896dffc71dc7c53fc1f0..45db9b9ca35e365c1f272e1bc127b27046b51eeb 100644 (file)
@@ -43,7 +43,7 @@ Although you may have multiple profiles, you only have one profile photo. This i
 
 On the site Directory page, you may search for people with published profiles who are on this site. The search is typically for your nickname or part of your full name. However this search will also match against other profile fields - such as gender, location, "about", work, and education. You may also include "Keywords" in your default profile - which may be used to search for common interests with other members. You have two sets of keywords available - public and private. Private keywords are *not* visible to anybody. You could use these keywords to locate people who share membership in secret societies, or that share a love of fishing (for example) - without making this information visible on your public profile. Public keywords are used in the friend suggestion tool and although they aren't readily visible, they may be seen by viewing the HTML of your profile page.
 
-Directory searches are also able to use "boolean" logic so that you can search for "+lesbian +Florida" and find those who's sexual preference (or keywords) contain the world "lesbian" and that live in Florida. See the section on "Topical Tags" on the [[Tags-and-Mentions]] page for more information on performing boolean searches. 
+Directory searches are also able to use "boolean" logic so that you can search for "+lesbian +Florida" and find those who's sexual preference (or keywords) contain the world "lesbian" and that live in Florida. See the section on "Topical Tags" on the [Tags-and-Mentions](help/Tags-and-Mentions) page for more information on performing boolean searches. 
 
 On your Contacts page is a link to "Find People with Shared Interests" (unless your site administrator has disabled the global directory). This will combine both your public and private keywords, and find people in the global directory who have matching and/or similar keywords. (Your private keywords are not identified or stored on the global directory). The more keywords you provide, the more relevant the search results that are returned. These are sorted by relevance. You may discover that you are the first person on the list - because you are very likely the most relevant match for your keywords in the directory.
 
diff --git a/images/connect-bg.png b/images/connect-bg.png
new file mode 100644 (file)
index 0000000..0611c73
Binary files /dev/null and b/images/connect-bg.png differ
index 494555aa69a9f3aec25a566b1bb6bedad46e2e05..dd3af3aee3b9c2e1269e9e82c8c9742bb988df15 100644 (file)
Binary files a/images/icons.png and b/images/icons.png differ
diff --git a/images/icons/10/add.png b/images/icons/10/add.png
new file mode 100644 (file)
index 0000000..296e8e5
Binary files /dev/null and b/images/icons/10/add.png differ
diff --git a/images/icons/10/delete.png b/images/icons/10/delete.png
new file mode 100644 (file)
index 0000000..e4bd859
Binary files /dev/null and b/images/icons/10/delete.png differ
diff --git a/images/icons/10/edit.png b/images/icons/10/edit.png
new file mode 100644 (file)
index 0000000..d939342
Binary files /dev/null and b/images/icons/10/edit.png differ
diff --git a/images/icons/10/feed.png b/images/icons/10/feed.png
new file mode 100644 (file)
index 0000000..22aa5fd
Binary files /dev/null and b/images/icons/10/feed.png differ
diff --git a/images/icons/10/gear.png b/images/icons/10/gear.png
new file mode 100644 (file)
index 0000000..b1f2a8f
Binary files /dev/null and b/images/icons/10/gear.png differ
diff --git a/images/icons/10/group.png b/images/icons/10/group.png
new file mode 100644 (file)
index 0000000..a58d519
Binary files /dev/null and b/images/icons/10/group.png differ
diff --git a/images/icons/10/info.png b/images/icons/10/info.png
new file mode 100644 (file)
index 0000000..667c127
Binary files /dev/null and b/images/icons/10/info.png differ
diff --git a/images/icons/10/link.png b/images/icons/10/link.png
new file mode 100644 (file)
index 0000000..0619f45
Binary files /dev/null and b/images/icons/10/link.png differ
diff --git a/images/icons/10/lock.png b/images/icons/10/lock.png
new file mode 100644 (file)
index 0000000..ad8079c
Binary files /dev/null and b/images/icons/10/lock.png differ
diff --git a/images/icons/10/menu.png b/images/icons/10/menu.png
new file mode 100644 (file)
index 0000000..7dbb779
Binary files /dev/null and b/images/icons/10/menu.png differ
diff --git a/images/icons/10/notice.png b/images/icons/10/notice.png
new file mode 100644 (file)
index 0000000..88ea4ac
Binary files /dev/null and b/images/icons/10/notice.png differ
diff --git a/images/icons/10/notify_off.png b/images/icons/10/notify_off.png
new file mode 100644 (file)
index 0000000..8ba240e
Binary files /dev/null and b/images/icons/10/notify_off.png differ
diff --git a/images/icons/10/notify_on.png b/images/icons/10/notify_on.png
new file mode 100644 (file)
index 0000000..d4ef715
Binary files /dev/null and b/images/icons/10/notify_on.png differ
diff --git a/images/icons/10/star.png b/images/icons/10/star.png
new file mode 100644 (file)
index 0000000..cd8518a
Binary files /dev/null and b/images/icons/10/star.png differ
diff --git a/images/icons/10/user.png b/images/icons/10/user.png
new file mode 100644 (file)
index 0000000..6c2d161
Binary files /dev/null and b/images/icons/10/user.png differ
diff --git a/images/icons/16/add.png b/images/icons/16/add.png
new file mode 100644 (file)
index 0000000..1ff064b
Binary files /dev/null and b/images/icons/16/add.png differ
diff --git a/images/icons/16/delete.png b/images/icons/16/delete.png
new file mode 100644 (file)
index 0000000..5323468
Binary files /dev/null and b/images/icons/16/delete.png differ
diff --git a/images/icons/16/edit.png b/images/icons/16/edit.png
new file mode 100644 (file)
index 0000000..bd845a7
Binary files /dev/null and b/images/icons/16/edit.png differ
diff --git a/images/icons/16/feed.png b/images/icons/16/feed.png
new file mode 100644 (file)
index 0000000..082e1bc
Binary files /dev/null and b/images/icons/16/feed.png differ
diff --git a/images/icons/16/gear.png b/images/icons/16/gear.png
new file mode 100644 (file)
index 0000000..86cbe1e
Binary files /dev/null and b/images/icons/16/gear.png differ
diff --git a/images/icons/16/group.png b/images/icons/16/group.png
new file mode 100644 (file)
index 0000000..29ef696
Binary files /dev/null and b/images/icons/16/group.png differ
diff --git a/images/icons/16/info.png b/images/icons/16/info.png
new file mode 100644 (file)
index 0000000..e8e7b35
Binary files /dev/null and b/images/icons/16/info.png differ
diff --git a/images/icons/16/link.png b/images/icons/16/link.png
new file mode 100644 (file)
index 0000000..afec9cc
Binary files /dev/null and b/images/icons/16/link.png differ
diff --git a/images/icons/16/lock.png b/images/icons/16/lock.png
new file mode 100644 (file)
index 0000000..f4432bb
Binary files /dev/null and b/images/icons/16/lock.png differ
diff --git a/images/icons/16/menu.png b/images/icons/16/menu.png
new file mode 100644 (file)
index 0000000..a6b1cac
Binary files /dev/null and b/images/icons/16/menu.png differ
diff --git a/images/icons/16/notice.png b/images/icons/16/notice.png
new file mode 100644 (file)
index 0000000..13c5c6b
Binary files /dev/null and b/images/icons/16/notice.png differ
diff --git a/images/icons/16/notify_off.png b/images/icons/16/notify_off.png
new file mode 100644 (file)
index 0000000..3031fc9
Binary files /dev/null and b/images/icons/16/notify_off.png differ
diff --git a/images/icons/16/notify_on.png b/images/icons/16/notify_on.png
new file mode 100644 (file)
index 0000000..1da6245
Binary files /dev/null and b/images/icons/16/notify_on.png differ
diff --git a/images/icons/16/star.png b/images/icons/16/star.png
new file mode 100644 (file)
index 0000000..ac620c4
Binary files /dev/null and b/images/icons/16/star.png differ
diff --git a/images/icons/16/user.png b/images/icons/16/user.png
new file mode 100644 (file)
index 0000000..95c42c5
Binary files /dev/null and b/images/icons/16/user.png differ
diff --git a/images/icons/22/add.png b/images/icons/22/add.png
new file mode 100644 (file)
index 0000000..2079e72
Binary files /dev/null and b/images/icons/22/add.png differ
diff --git a/images/icons/22/delete.png b/images/icons/22/delete.png
new file mode 100644 (file)
index 0000000..d0f2acf
Binary files /dev/null and b/images/icons/22/delete.png differ
diff --git a/images/icons/22/edit.png b/images/icons/22/edit.png
new file mode 100644 (file)
index 0000000..ad251b8
Binary files /dev/null and b/images/icons/22/edit.png differ
diff --git a/images/icons/22/feed.png b/images/icons/22/feed.png
new file mode 100644 (file)
index 0000000..a0b75f1
Binary files /dev/null and b/images/icons/22/feed.png differ
diff --git a/images/icons/22/gear.png b/images/icons/22/gear.png
new file mode 100644 (file)
index 0000000..9ccf528
Binary files /dev/null and b/images/icons/22/gear.png differ
diff --git a/images/icons/22/group.png b/images/icons/22/group.png
new file mode 100644 (file)
index 0000000..f136015
Binary files /dev/null and b/images/icons/22/group.png differ
diff --git a/images/icons/22/info.png b/images/icons/22/info.png
new file mode 100644 (file)
index 0000000..18d3266
Binary files /dev/null and b/images/icons/22/info.png differ
diff --git a/images/icons/22/link.png b/images/icons/22/link.png
new file mode 100644 (file)
index 0000000..e819ad3
Binary files /dev/null and b/images/icons/22/link.png differ
diff --git a/images/icons/22/lock.png b/images/icons/22/lock.png
new file mode 100644 (file)
index 0000000..92c8c49
Binary files /dev/null and b/images/icons/22/lock.png differ
diff --git a/images/icons/22/menu.png b/images/icons/22/menu.png
new file mode 100644 (file)
index 0000000..e3461da
Binary files /dev/null and b/images/icons/22/menu.png differ
diff --git a/images/icons/22/notice.png b/images/icons/22/notice.png
new file mode 100644 (file)
index 0000000..2b97738
Binary files /dev/null and b/images/icons/22/notice.png differ
diff --git a/images/icons/22/notify_off.png b/images/icons/22/notify_off.png
new file mode 100644 (file)
index 0000000..513687b
Binary files /dev/null and b/images/icons/22/notify_off.png differ
diff --git a/images/icons/22/notify_on.png b/images/icons/22/notify_on.png
new file mode 100644 (file)
index 0000000..18002e1
Binary files /dev/null and b/images/icons/22/notify_on.png differ
diff --git a/images/icons/22/star.png b/images/icons/22/star.png
new file mode 100644 (file)
index 0000000..484e247
Binary files /dev/null and b/images/icons/22/star.png differ
diff --git a/images/icons/22/user.png b/images/icons/22/user.png
new file mode 100644 (file)
index 0000000..79bb05e
Binary files /dev/null and b/images/icons/22/user.png differ
diff --git a/images/icons/48/add.png b/images/icons/48/add.png
new file mode 100644 (file)
index 0000000..753ac4b
Binary files /dev/null and b/images/icons/48/add.png differ
diff --git a/images/icons/48/delete.png b/images/icons/48/delete.png
new file mode 100644 (file)
index 0000000..2835638
Binary files /dev/null and b/images/icons/48/delete.png differ
diff --git a/images/icons/48/edit.png b/images/icons/48/edit.png
new file mode 100644 (file)
index 0000000..709fbb3
Binary files /dev/null and b/images/icons/48/edit.png differ
diff --git a/images/icons/48/feed.png b/images/icons/48/feed.png
new file mode 100644 (file)
index 0000000..13d88f7
Binary files /dev/null and b/images/icons/48/feed.png differ
diff --git a/images/icons/48/gear.png b/images/icons/48/gear.png
new file mode 100644 (file)
index 0000000..8bb12e9
Binary files /dev/null and b/images/icons/48/gear.png differ
diff --git a/images/icons/48/group.png b/images/icons/48/group.png
new file mode 100644 (file)
index 0000000..26238ac
Binary files /dev/null and b/images/icons/48/group.png differ
diff --git a/images/icons/48/info.png b/images/icons/48/info.png
new file mode 100644 (file)
index 0000000..760eca5
Binary files /dev/null and b/images/icons/48/info.png differ
diff --git a/images/icons/48/link.png b/images/icons/48/link.png
new file mode 100644 (file)
index 0000000..b32eec5
Binary files /dev/null and b/images/icons/48/link.png differ
diff --git a/images/icons/48/lock.png b/images/icons/48/lock.png
new file mode 100644 (file)
index 0000000..9943bb1
Binary files /dev/null and b/images/icons/48/lock.png differ
diff --git a/images/icons/48/menu.png b/images/icons/48/menu.png
new file mode 100644 (file)
index 0000000..376e60c
Binary files /dev/null and b/images/icons/48/menu.png differ
diff --git a/images/icons/48/notice.png b/images/icons/48/notice.png
new file mode 100644 (file)
index 0000000..f6fbc95
Binary files /dev/null and b/images/icons/48/notice.png differ
diff --git a/images/icons/48/notify_off.png b/images/icons/48/notify_off.png
new file mode 100644 (file)
index 0000000..7c8cd97
Binary files /dev/null and b/images/icons/48/notify_off.png differ
diff --git a/images/icons/48/notify_on.png b/images/icons/48/notify_on.png
new file mode 100644 (file)
index 0000000..3275898
Binary files /dev/null and b/images/icons/48/notify_on.png differ
diff --git a/images/icons/48/star.png b/images/icons/48/star.png
new file mode 100644 (file)
index 0000000..f53914e
Binary files /dev/null and b/images/icons/48/star.png differ
diff --git a/images/icons/48/user.png b/images/icons/48/user.png
new file mode 100644 (file)
index 0000000..c42410c
Binary files /dev/null and b/images/icons/48/user.png differ
diff --git a/images/icons/Makefile b/images/icons/Makefile
new file mode 100644 (file)
index 0000000..39428d1
--- /dev/null
@@ -0,0 +1,31 @@
+
+IMAGES=add.png edit.png        gear.png info.png menu.png \
+               notify_off.png star.png  delete.png feed.png group.png \
+               lock.png notice.png notify_on.png user.png link.png
+
+DESTS=10/ 16/ 22/ 48/ \
+               $(addprefix 10/, $(IMAGES)) \
+               $(addprefix 16/, $(IMAGES)) \
+               $(addprefix 22/, $(IMAGES)) \
+               $(addprefix 48/, $(IMAGES))
+        
+all: $(DESTS)
+
+%/:
+       mkdir $@
+
+10/%.png: %.png
+       convert $< -resize 10x10 $@
+       
+16/%.png: %.png
+       convert $< -resize 16x16 $@
+
+22/%.png: %.png
+       convert $< -resize 22x22 $@
+
+48/%.png: %.png
+       convert $< -resize 48x48 $@
+
+
+
+
diff --git a/images/icons/add.png b/images/icons/add.png
new file mode 100644 (file)
index 0000000..78497fb
Binary files /dev/null and b/images/icons/add.png differ
diff --git a/images/icons/delete.png b/images/icons/delete.png
new file mode 100644 (file)
index 0000000..f0cae51
Binary files /dev/null and b/images/icons/delete.png differ
diff --git a/images/icons/edit.png b/images/icons/edit.png
new file mode 100644 (file)
index 0000000..aeaf835
Binary files /dev/null and b/images/icons/edit.png differ
diff --git a/images/icons/feed.png b/images/icons/feed.png
new file mode 100644 (file)
index 0000000..6894257
Binary files /dev/null and b/images/icons/feed.png differ
diff --git a/images/icons/gear.png b/images/icons/gear.png
new file mode 100644 (file)
index 0000000..02847ef
Binary files /dev/null and b/images/icons/gear.png differ
diff --git a/images/icons/group.png b/images/icons/group.png
new file mode 100644 (file)
index 0000000..de0dc79
Binary files /dev/null and b/images/icons/group.png differ
diff --git a/images/icons/info.png b/images/icons/info.png
new file mode 100644 (file)
index 0000000..ea2b0ff
Binary files /dev/null and b/images/icons/info.png differ
diff --git a/images/icons/link.png b/images/icons/link.png
new file mode 100644 (file)
index 0000000..743bdf0
Binary files /dev/null and b/images/icons/link.png differ
diff --git a/images/icons/lock.png b/images/icons/lock.png
new file mode 100644 (file)
index 0000000..7e58ead
Binary files /dev/null and b/images/icons/lock.png differ
diff --git a/images/icons/menu.png b/images/icons/menu.png
new file mode 100644 (file)
index 0000000..56afc85
Binary files /dev/null and b/images/icons/menu.png differ
diff --git a/images/icons/notice.png b/images/icons/notice.png
new file mode 100644 (file)
index 0000000..b6017c8
Binary files /dev/null and b/images/icons/notice.png differ
diff --git a/images/icons/notify_off.png b/images/icons/notify_off.png
new file mode 100644 (file)
index 0000000..e6eac16
Binary files /dev/null and b/images/icons/notify_off.png differ
diff --git a/images/icons/notify_on.png b/images/icons/notify_on.png
new file mode 100644 (file)
index 0000000..b9e07d2
Binary files /dev/null and b/images/icons/notify_on.png differ
diff --git a/images/icons/star.png b/images/icons/star.png
new file mode 100644 (file)
index 0000000..4a2236c
Binary files /dev/null and b/images/icons/star.png differ
diff --git a/images/icons/user.png b/images/icons/user.png
new file mode 100644 (file)
index 0000000..f1132b1
Binary files /dev/null and b/images/icons/user.png differ
index 3f895bc949b47f2b9ee2bcf35f909064b551571a..ab08bb57e4df4e56941aa79a67c2a0b06176de4f 100644 (file)
Binary files a/images/larrow.gif and b/images/larrow.gif differ
diff --git a/images/logo.png b/images/logo.png
new file mode 100644 (file)
index 0000000..1b977b6
Binary files /dev/null and b/images/logo.png differ
index ffcb43b00b4d6adb5e1bd5f5a3a397f02ab590dd..fa26769446d0c934b42ede073b15e7b792c519a5 100644 (file)
Binary files a/images/lrarrow.gif and b/images/lrarrow.gif differ
index 4ca77d065175c58bc0f02d3b2f7239cc20fadb73..45920041eb6550e6256565466dd8967ab7933e2b 100644 (file)
@@ -85,3 +85,60 @@ function unmark_for_death($contact) {
        );
 }}
 
+if(! function_exists('contact_photo_menu')){
+function contact_photo_menu($contact) {
+
+       $a = get_app();
+       
+       $contact_url="";
+       $pm_url="";
+       $status_link="";
+       $photos_link="";
+       $posts_link="";
+
+       $sparkle = false;
+       if($contact['network'] === NETWORK_DFRN) {
+               $sparkle = true;
+               $profile_link = $a->get_baseurl() . '/redir/' . $contact['id'];
+       }
+       else
+               $profile_link = $contact['url'];
+
+       if($profile_link === 'mailbox')
+               $profile_link = '';
+
+       if($sparkle) {
+               $status_link = $profile_link . "?url=status";
+               $photos_link = $profile_link . "?url=photos";
+               $profile_link = $profile_link . "?url=profile";
+               $pm_url = $a->get_baseurl() . '/message/new/' . $contact['id'];
+       }
+
+       $contact_url = $a->get_baseurl() . '/contacts/' . $contact['id'];
+       $posts_link = $a->get_baseurl() . '/network/?cid=' . $contact['id'];
+
+       $menu = Array(
+               t("View status") => $status_link,
+               t("View profile") => $profile_link,
+               t("View photos") => $photos_link,               
+               t("View recent") => $posts_link, 
+               t("Edit contact") => $contact_url,
+               t("Send PM") => $pm_url,
+       );
+       
+       
+       $args = array('contact' => $contact, 'menu' => $menu);
+       
+       call_hooks('contact_photo_menu', $args);
+       
+       $o = "";
+       foreach($menu as $k=>$v){
+               if ($v!="") {
+                       if(($k !== t("View recent")) && ($k !== t("Send PM")))
+                               $o .= "<li><a target=\"redir\" href=\"$v\">$k</a></li>\n";
+                       else
+                               $o .= "<li><a href=\"$v\">$k</a></li>\n";
+               }
+       }
+       return $o;
+}}
index 78912c0b96175b673293130f6aadf55d2ba4615f..8861e8f5d82e3140f17da3f8705bc08cb68dd90b 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+require_once('include/email.php');
+
 class EmailNotification {
        /**
         * Send a multipart/alternative message with Text and HTML versions
@@ -12,6 +15,10 @@ class EmailNotification {
         * @param textVersion           text only version of the message
         */
        static public function sendTextHtmlEmail($fromName,$fromEmail,$replyTo,$toEmail,$messageSubject,$htmlVersion,$textVersion) {
+
+               $fromName = email_header_encode($fromName,'UTF-8'); 
+               $messageSubject = email_header_encode($messageSubject,'UTF-8');
+               
                
                // generate a mime boundary
                $mimeBoundary   =rand(0,9)."-"
index cc46af64454be5d6b9254da8b3cdc5f9510ff0a7..642b8e624c5601d1a7ab20c6b4f5c4e76fe5b8b3 100644 (file)
@@ -249,20 +249,6 @@ function scrape_feed($url) {
                return $ret;
 
 
-       $items = $dom->getElementsByTagName('img');
-
-       // get img elements (twitter)
-
-       if($items) {
-               foreach($items as $item) {
-                       $x = $item->getAttribute('id');
-                       if($x === 'profile-image') {
-                               $ret['photo'] = $item->getAttribute('src');
-                       }
-               }
-       }
-
-
        $head = $dom->getElementsByTagName('base');
        if($head) {
                foreach($head as $head0) {
@@ -332,10 +318,12 @@ function probe_url($url, $mode = PROBE_NORMAL) {
        if(! $url)
                return $result;
 
+       $network = null;
        $diaspora = false;
        $diaspora_base = '';
        $diaspora_guid = '';    
        $diaspora_key = '';
+       $has_lrdd = false;
        $email_conversant = false;
 
        $twitter = ((strpos($url,'twitter.com') !== false) ? true : false);
@@ -352,6 +340,8 @@ function probe_url($url, $mode = PROBE_NORMAL) {
                        $links = lrdd($url);
 
                if(count($links)) {
+                       $has_lrdd = true;
+
                        logger('probe_url: found lrdd links: ' . print_r($links,true), LOGGER_DATA);
                        foreach($links as $link) {
                                if($link['@attributes']['rel'] === NAMESPACE_ZOT)
@@ -426,7 +416,8 @@ function probe_url($url, $mode = PROBE_NORMAL) {
                                                $addr = $orig_url;
                                                $network = NETWORK_MAIL;
                                                $name = substr($url,0,strpos($url,'@'));
-                                               $profile = 'http://' . substr($url,strpos($url,'@')+1);
+                                               $phost = substr($url,strpos($url,'@')+1);
+                                               $profile = 'http://' . $phost;
                                                // fix nick character range
                                                $vcard = array('fn' => $name, 'nick' => $name, 'photo' => gravatar_img($url));
                                                $notify = 'smtp ' . random_string();
@@ -437,8 +428,15 @@ function probe_url($url, $mode = PROBE_NORMAL) {
                                                        $adr = imap_rfc822_parse_adrlist($x->from,'');
                                                elseif(stristr($x->to,$orig_url))
                                                        $adr = imap_rfc822_parse_adrlist($x->to,'');
-                                               if(isset($adr) && strlen($adr[0]->personal))
-                                                       $vcard['fn'] = notags($adr[0]->personal);
+                                               if(isset($adr)) {
+                                                       foreach($adr as $feadr) {
+                                                               if((strcasecmp($feadr->mailbox,$name) == 0) 
+                                                                       &&(strcasecmp($feadr->host,$phost) == 0) 
+                                                                       && (strlen($feadr->personal))) {
+                                                                       $vcard['fn'] = notags($feadr->personal);
+                                                               }
+                                                       }
+                                               }
                                        }
                                        imap_close($mbox);
                                }
@@ -467,7 +465,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
                }
 
                if(strlen($dfrn)) {
-                       $ret = scrape_dfrn($dfrn);
+                       $ret = scrape_dfrn(($hcard) ? $hcard : $dfrn);
                        if(is_array($ret) && x($ret,'dfrn-request')) {
                                $network = NETWORK_DFRN;
                                $request = $ret['dfrn-request'];
@@ -484,8 +482,10 @@ function probe_url($url, $mode = PROBE_NORMAL) {
        }
 
        if($diaspora && $diaspora_base && $diaspora_guid) {
-               if($mode == PROBE_DIASPORA || ! $notify)
+               if($mode == PROBE_DIASPORA || ! $notify) {
                        $notify = $diaspora_base . 'receive/users/' . $diaspora_guid;
+                       $batch  = $diaspora_base . 'receive/public' ;
+               }
                if(strpos($url,'@'))
                        $addr = str_replace('acct:', '', $url);
        }                       
@@ -493,7 +493,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
        if($network !== NETWORK_ZOT && $network !== NETWORK_DFRN && $network !== NETWORK_MAIL) {
                if($diaspora)
                        $network = NETWORK_DIASPORA;
-               else
+               elseif($has_lrdd)
                        $network  = NETWORK_OSTATUS;
                $priority = 0;
 
@@ -520,6 +520,9 @@ function probe_url($url, $mode = PROBE_NORMAL) {
                        else
                                $poll = $tapi . '?screen_name=' . $tid;
                        $profile = 'http://twitter.com/#!/' . $tid;
+                       $vcard['photo'] = 'https://api.twitter.com/1/users/profile_image/' . $tid;
+                       $vcard['nick'] = $tid;
+                       $vcard['fn'] = $tid . '@twitter';
                }
 
                if(! x($vcard,'fn'))
@@ -530,7 +533,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
 
                if($twitter || ! $poll)
                        $check_feed = true;
-               if((! isset($vcard)) || (! $profile))
+               if((! isset($vcard)) || (! x($vcard,'fn')) || (! $profile))
                        $check_feed = true;
                if(($at_addr) && (! count($links)))
                        $check_feed = false;
@@ -637,7 +640,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
                                        $vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' ')));
                        }
                        if(! $network)
-                               $network = 'feed';
+                               $network = NETWORK_FEED;
                        if(! $priority)
                                $priority = 2;
                }
@@ -651,14 +654,19 @@ function probe_url($url, $mode = PROBE_NORMAL) {
        if(! $profile)
                $profile = $url;
 
-       $vcard['fn'] = notags($vcard['fn']);
-       $vcard['nick'] = str_replace(' ','',notags($vcard['nick']));
+       // No human could be associated with this link, use the URL as the contact name
 
+       if(($network === NETWORK_FEED) && ($poll) && (! x($vcard,'fn')))
+               $vcard['fn'] = $url;
 
+       $vcard['fn'] = notags($vcard['fn']);
+       $vcard['nick'] = str_replace(' ','',notags($vcard['nick']));
+               
        $result['name'] = $vcard['fn'];
        $result['nick'] = $vcard['nick'];
        $result['url'] = $profile;
        $result['addr'] = $addr;
+       $result['batch'] = $batch;
        $result['notify'] = $notify;
        $result['poll'] = $poll;
        $result['request'] = $request;
diff --git a/include/acl.js b/include/acl.js
deleted file mode 100644 (file)
index 82b631e..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-function ACL(backend_url, preset){
-       that = this;
-       
-       that.url = backend_url;
-       
-       that.kp_timer = null;
-       
-       if (preset==undefined) preset = [];
-       that.allow_cid = (preset[0] || []);
-       that.allow_gid = (preset[1] || []);
-       that.deny_cid  = (preset[2] || []);
-       that.deny_gid  = (preset[3] || []);
-       that.group_uids = [];
-       that.nw = 4; //items per row. should be calulated from #acl-list.width
-       
-       that.list_content = $("#acl-list-content");
-       that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html());
-       that.showall = $("#acl-showall");
-
-       if (preset.length==0) that.showall.addClass("selected");
-       
-       /*events*/
-       that.showall.click(that.on_showall);
-       $(".acl-button-show").live('click', that.on_button_show);
-       $(".acl-button-hide").live('click', that.on_button_hide);
-       $("#acl-search").keypress(that.on_search);
-       $("#acl-wrapper").parents("form").submit(that.on_submit);
-       
-       /* startup! */
-       that.get(0,100);
-}
-
-ACL.prototype.on_submit = function(){
-       aclfileds = $("#acl-fields").html("");
-       $(that.allow_gid).each(function(i,v){
-               aclfileds.append("<input type='hidden' name='group_allow[]' value='"+v+"'>");
-       });
-       $(that.allow_cid).each(function(i,v){
-               aclfileds.append("<input type='hidden' name='contact_allow[]' value='"+v+"'>");
-       });
-       $(that.deny_gid).each(function(i,v){
-               aclfileds.append("<input type='hidden' name='group_deny[]' value='"+v+"'>");
-       });
-       $(that.deny_cid).each(function(i,v){
-               aclfileds.append("<input type='hidden' name='contact_deny[]' value='"+v+"'>");
-       });     
-}
-
-ACL.prototype.search = function(){
-       var srcstr = $("#acl-search").val();
-       that.list_content.html("");
-       that.get(0,100, srcstr);
-}
-
-ACL.prototype.on_search = function(event){
-       if (that.kp_timer) clearTimeout(that.kp_timer);
-       that.kp_timer = setTimeout( that.search, 1000);
-}
-
-ACL.prototype.on_showall = function(event){
-       event.stopPropagation();
-       if (that.showall.hasClass("selected")){
-               return false;
-       }
-       that.showall.addClass("selected");
-       
-       that.allow_cid = [];
-       that.allow_gid = [];
-       that.deny_cid  = [];
-       that.deny_gid  = [];
-       
-       that.updateview();
-       
-       return false;
-}
-
-ACL.prototype.on_button_show = function(event){
-       event.stopPropagation();
-
-       /*that.showall.removeClass("selected");
-       $(this).siblings(".acl-button-hide").removeClass("selected");
-       $(this).toggleClass("selected");*/
-
-       that.set_allow($(this).parent().attr('id'));
-
-       return false;
-}
-ACL.prototype.on_button_hide = function(event){
-       event.stopPropagation();
-
-       /*that.showall.removeClass("selected");
-       $(this).siblings(".acl-button-show").removeClass("selected");
-       $(this).toggleClass("selected");*/
-
-       that.set_deny($(this).parent().attr('id'));
-
-       return false;
-}
-
-ACL.prototype.set_allow = function(itemid){
-       type = itemid[0];
-       id       = parseInt(itemid.substr(1));
-       switch(type){
-               case "g":
-                       if (that.allow_gid.indexOf(id)<0){
-                               that.allow_gid.push(id)
-                       }else {
-                               that.allow_gid.remove(id);
-                       }
-                       if (that.deny_gid.indexOf(id)>=0) that.deny_gid.remove(id);
-                       break;
-               case "c":
-                       if (that.allow_cid.indexOf(id)<0){
-                               that.allow_cid.push(id)
-                       } else {
-                               that.allow_cid.remove(id);
-                       }
-                       if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id);                     
-                       break;
-       }
-       that.updateview();
-}
-
-ACL.prototype.set_deny = function(itemid){
-       type = itemid[0];
-       id       = parseInt(itemid.substr(1));
-       switch(type){
-               case "g":
-                       if (that.deny_gid.indexOf(id)<0){
-                               that.deny_gid.push(id)
-                       } else {
-                               that.deny_gid.remove(id);
-                       }
-                       if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id);
-                       break;
-               case "c":
-                       if (that.deny_cid.indexOf(id)<0){
-                               that.deny_cid.push(id)
-                       } else {
-                               that.deny_cid.remove(id);
-                       }
-                       if (that.allow_cid.indexOf(id)>=0) that.allow_cid.remove(id);
-                       break;
-       }
-       that.updateview();
-}
-
-ACL.prototype.updateview = function(){
-       if (that.allow_gid.length==0 && that.allow_cid.length==0 &&
-               that.deny_gid.length==0 && that.deny_cid.length==0){
-                       that.showall.addClass("selected");
-                       /* jot acl */
-                               $('#jot-perms-icon').removeClass('lock').addClass('unlock');
-                               $('#jot-public').show();
-                               $('.profile-jot-net input').attr('disabled', false);                    
-                               if(editor != false) {
-                                       $('#profile-jot-desc').html(ispublic);
-                               }
-                       
-       } else {
-                       that.showall.removeClass("selected");
-                       /* jot acl */
-                               $('#jot-perms-icon').removeClass('unlock').addClass('lock');
-                               $('#jot-public').hide();
-                               $('.profile-jot-net input').attr('disabled', 'disabled');                       
-                               $('#profile-jot-desc').html('&nbsp;');
-       }
-       
-       $("#acl-list-content .acl-list-item").each(function(){
-               itemid = $(this).attr('id');
-               type = itemid[0];
-               id       = parseInt(itemid.substr(1));
-               
-               btshow = $(this).children(".acl-button-show").removeClass("selected");
-               bthide = $(this).children(".acl-button-hide").removeClass("selected");  
-               
-               switch(type){
-                       case "g":
-                               var uclass = "";
-                               if (that.allow_gid.indexOf(id)>=0){
-                                       btshow.addClass("selected");
-                                       bthide.removeClass("selected");
-                                       uclass="groupshow";
-                               }
-                               if (that.deny_gid.indexOf(id)>=0){
-                                       btshow.removeClass("selected");
-                                       bthide.addClass("selected");
-                                       uclass="grouphide";
-                               }
-                               
-                               $(that.group_uids[id]).each(function(i,v){
-                                       $("#c"+v).removeClass("groupshow grouphide").addClass(uclass);
-                               });
-                               
-                               break;
-                       case "c":
-                               if (that.allow_cid.indexOf(id)>=0){
-                                       btshow.addClass("selected");
-                                       bthide.removeClass("selected");
-                               }
-                               if (that.deny_cid.indexOf(id)>=0){
-                                       btshow.removeClass("selected");
-                                       bthide.addClass("selected");
-                               }                       
-               }
-               
-       });
-       
-}
-
-
-ACL.prototype.get = function(start,count, search){
-       var postdata = {
-               start:start,
-               count:count,
-               search:search,
-       }
-       
-       $.ajax({
-               type:'POST',
-               url: that.url,
-               data: postdata,
-               dataType: 'json',
-               success:that.populate
-       });
-}
-
-ACL.prototype.populate = function(data){
-       var height = Math.ceil(data.tot / that.nw) * 42;
-       that.list_content.height(height);
-       $(data.items).each(function(){
-               html = "<div class='acl-list-item {4} {5}' id='{2}{3}'>"+that.item_tpl+"</div>";
-               html = html.format( this.photo, this.name, this.type, this.id, '', this.network );
-               if (this.uids!=undefined) that.group_uids[this.id] = this.uids;
-               //console.log(html);
-               that.list_content.append(html);
-       });
-       that.updateview();
-}
-
diff --git a/include/ajaxupload.js b/include/ajaxupload.js
deleted file mode 100644 (file)
index 67c4a56..0000000
+++ /dev/null
@@ -1,695 +0,0 @@
-/**
- * AJAX Upload ( http://valums.com/ajax-upload/ ) 
- * Copyright (c) Andris Valums
- * Licensed under the MIT license ( http://valums.com/mit-license/ )
- * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions. 
- */
-
-(function () {
-    /* global window */
-    /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */
-    
-    /**
-     * Wrapper for FireBug's console.log
-     */
-    function log(){
-        if (typeof(console) != 'undefined' && typeof(console.log) == 'function'){            
-            Array.prototype.unshift.call(arguments, '[Ajax Upload]');
-            console.log( Array.prototype.join.call(arguments, ' '));
-        }
-    } 
-
-    /**
-     * Attaches event to a dom element.
-     * @param {Element} el
-     * @param type event name
-     * @param fn callback This refers to the passed element
-     */
-    function addEvent(el, type, fn){
-        if (el.addEventListener) {
-            el.addEventListener(type, fn, false);
-        } else if (el.attachEvent) {
-            el.attachEvent('on' + type, function(){
-                fn.call(el);
-               });
-           } else {
-            throw new Error('not supported or DOM not loaded');
-        }
-    }   
-    
-    /**
-     * Attaches resize event to a window, limiting
-     * number of event fired. Fires only when encounteres
-     * delay of 100 after series of events.
-     * 
-     * Some browsers fire event multiple times when resizing
-     * http://www.quirksmode.org/dom/events/resize.html
-     * 
-     * @param fn callback This refers to the passed element
-     */
-    function addResizeEvent(fn){
-        var timeout;
-               
-           addEvent(window, 'resize', function(){
-            if (timeout){
-                clearTimeout(timeout);
-            }
-            timeout = setTimeout(fn, 100);                        
-        });
-    }    
-    
-    // Needs more testing, will be rewriten for next version        
-    // getOffset function copied from jQuery lib (http://jquery.com/)
-    if (document.documentElement.getBoundingClientRect){
-        // Get Offset using getBoundingClientRect
-        // http://ejohn.org/blog/getboundingclientrect-is-awesome/
-        var getOffset = function(el){
-            var box = el.getBoundingClientRect();
-            var doc = el.ownerDocument;
-            var body = doc.body;
-            var docElem = doc.documentElement; // for ie 
-            var clientTop = docElem.clientTop || body.clientTop || 0;
-            var clientLeft = docElem.clientLeft || body.clientLeft || 0;
-             
-            // In Internet Explorer 7 getBoundingClientRect property is treated as physical,
-            // while others are logical. Make all logical, like in IE8.        
-            var zoom = 1;            
-            if (body.getBoundingClientRect) {
-                var bound = body.getBoundingClientRect();
-                zoom = (bound.right - bound.left) / body.clientWidth;
-            }
-            
-            if (zoom > 1) {
-                clientTop = 0;
-                clientLeft = 0;
-            }
-            
-            var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft;
-            
-            return {
-                top: top,
-                left: left
-            };
-        };        
-    } else {
-        // Get offset adding all offsets 
-        var getOffset = function(el){
-            var top = 0, left = 0;
-            do {
-                top += el.offsetTop || 0;
-                left += el.offsetLeft || 0;
-                el = el.offsetParent;
-            } while (el);
-            
-            return {
-                left: left,
-                top: top
-            };
-        };
-    }
-    
-    /**
-     * Returns left, top, right and bottom properties describing the border-box,
-     * in pixels, with the top-left relative to the body
-     * @param {Element} el
-     * @return {Object} Contains left, top, right,bottom
-     */
-    function getBox(el){
-        var left, right, top, bottom;
-        var offset = getOffset(el);
-        left = offset.left;
-        top = offset.top;
-        
-        right = left + el.offsetWidth;
-        bottom = top + el.offsetHeight;
-        
-        return {
-            left: left,
-            right: right,
-            top: top,
-            bottom: bottom
-        };
-    }
-    
-    /**
-     * Helper that takes object literal
-     * and add all properties to element.style
-     * @param {Element} el
-     * @param {Object} styles
-     */
-    function addStyles(el, styles){
-        for (var name in styles) {
-            if (styles.hasOwnProperty(name)) {
-                el.style[name] = styles[name];
-            }
-        }
-    }
-        
-    /**
-     * Function places an absolutely positioned
-     * element on top of the specified element
-     * copying position and dimentions.
-     * @param {Element} from
-     * @param {Element} to
-     */    
-    function copyLayout(from, to){
-           var box = getBox(from);
-        
-        addStyles(to, {
-               position: 'absolute',                    
-               left : box.left + 'px',
-               top : box.top + 'px',
-               width : from.offsetWidth + 'px',
-               height : from.offsetHeight + 'px'
-           });        
-       to.title = from.title;
-
-    }
-
-    /**
-    * Creates and returns element from html chunk
-    * Uses innerHTML to create an element
-    */
-    var toElement = (function(){
-        var div = document.createElement('div');
-        return function(html){
-            div.innerHTML = html;
-            var el = div.firstChild;
-            return div.removeChild(el);
-        };
-    })();
-            
-    /**
-     * Function generates unique id
-     * @return unique id 
-     */
-    var getUID = (function(){
-        var id = 0;
-        return function(){
-            return 'ValumsAjaxUpload' + id++;
-        };
-    })();        
-    /**
-     * Get file name from path
-     * @param {String} file path to file
-     * @return filename
-     */  
-    function fileFromPath(file){
-        return file.replace(/.*(\/|\\)/, "");
-    }
-    
-    /**
-     * Get file extension lowercase
-     * @param {String} file name
-     * @return file extenstion
-     */    
-    function getExt(file){
-        return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : '';
-    }
-
-    function hasClass(el, name){        
-        var re = new RegExp('\\b' + name + '\\b');        
-        return re.test(el.className);
-    }    
-    function addClass(el, name){
-        if ( ! hasClass(el, name)){   
-            el.className += ' ' + name;
-        }
-    }    
-    function removeClass(el, name){
-        var re = new RegExp('\\b' + name + '\\b');                
-        el.className = el.className.replace(re, '');        
-    }
-    
-    function removeNode(el){
-        el.parentNode.removeChild(el);
-    }
-
-    /**
-     * Easy styling and uploading
-     * @constructor
-     * @param button An element you want convert to 
-     * upload button. Tested dimentions up to 500x500px
-     * @param {Object} options See defaults below.
-     */
-    window.AjaxUpload = function(button, options){
-        this._settings = {
-            // Location of the server-side upload script
-            action: 'upload.php',
-            // File upload name
-            name: 'userfile',
-            // Additional data to send
-            data: {},
-            // Submit file as soon as it's selected
-            autoSubmit: true,
-            // The type of data that you're expecting back from the server.
-            // html and xml are detected automatically.
-            // Only useful when you are using json data as a response.
-            // Set to "json" in that case. 
-            responseType: false,
-            // Class applied to button when mouse is hovered
-            hoverClass: 'hover',
-            // Class applied to button when button is focused
-            focusClass: 'focus',
-            // Class applied to button when AU is disabled
-            disabledClass: 'disabled',            
-            // When user selects a file, useful with autoSubmit disabled
-            // You can return false to cancel upload                   
-            onChange: function(file, extension){
-            },
-            // Callback to fire before file is uploaded
-            // You can return false to cancel upload
-            onSubmit: function(file, extension){
-            },
-            // Fired when file upload is completed
-            // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
-            onComplete: function(file, response){
-            }
-        };
-                        
-        // Merge the users options with our defaults
-        for (var i in options) {
-            if (options.hasOwnProperty(i)){
-                this._settings[i] = options[i];
-            }
-        }
-                
-        // button isn't necessary a dom element
-        if (button.jquery){
-            // jQuery object was passed
-            button = button[0];
-        } else if (typeof button == "string") {
-            if (/^#.*/.test(button)){
-                // If jQuery user passes #elementId don't break it                                     
-                button = button.slice(1);                
-            }
-            
-            button = document.getElementById(button);
-        }
-        
-        if ( ! button || button.nodeType !== 1){
-            throw new Error("Please make sure that you're passing a valid element"); 
-        }
-                
-        if ( button.nodeName.toUpperCase() == 'A'){
-            // disable link                       
-            addEvent(button, 'click', function(e){
-                if (e && e.preventDefault){
-                    e.preventDefault();
-                } else if (window.event){
-                    window.event.returnValue = false;
-                }
-            });
-        }
-                    
-        // DOM element
-        this._button = button;        
-        // DOM element                 
-        this._input = null;
-        // If disabled clicking on button won't do anything
-        this._disabled = false;
-        
-        // if the button was disabled before refresh if will remain
-        // disabled in FireFox, let's fix it
-        this.enable();        
-        
-        this._rerouteClicks();
-    };
-    
-    // assigning methods to our class
-    AjaxUpload.prototype = {
-        setData: function(data){
-            this._settings.data = data;
-        },
-        disable: function(){            
-            addClass(this._button, this._settings.disabledClass);
-            this._disabled = true;
-            
-            var nodeName = this._button.nodeName.toUpperCase();            
-            if (nodeName == 'INPUT' || nodeName == 'BUTTON'){
-                this._button.setAttribute('disabled', 'disabled');
-            }            
-            
-            // hide input
-            if (this._input){
-                // We use visibility instead of display to fix problem with Safari 4
-                // The problem is that the value of input doesn't change if it 
-                // has display none when user selects a file           
-                this._input.parentNode.style.visibility = 'hidden';
-            }
-        },
-        enable: function(){
-            removeClass(this._button, this._settings.disabledClass);
-            this._button.removeAttribute('disabled');
-            this._disabled = false;
-            
-        },
-        /**
-         * Creates invisible file input 
-         * that will hover above the button
-         * <div><input type='file' /></div>
-         */
-        _createInput: function(){ 
-            var self = this;
-                        
-            var input = document.createElement("input");
-            input.setAttribute('type', 'file');
-            input.setAttribute('name', this._settings.name);
-
-            addStyles(input, {
-                'position' : 'absolute',
-                // in Opera only 'browse' button
-                // is clickable and it is located at
-                // the right side of the input
-                'right' : 0,
-                'margin' : 0,
-                'padding' : 0,
-                'fontSize' : '480px',
-                // in Firefox if font-family is set to
-                // 'inherit' the input doesn't work
-                'fontFamily' : 'sans-serif',
-                'cursor' : 'pointer'
-            });            
-
-            var div = document.createElement("div");                        
-            addStyles(div, {
-                'display' : 'block',
-                'position' : 'absolute',
-                'overflow' : 'hidden',
-                'margin' : 0,
-                'padding' : 0,                
-                'opacity' : 0,
-                // Make sure browse button is in the right side
-                // in Internet Explorer
-                'direction' : 'ltr',
-                //Max zIndex supported by Opera 9.0-9.2
-                'zIndex': 2147483583,
-                               'cursor' : 'pointer'
-
-            });
-            
-            // Make sure that element opacity exists.
-            // Otherwise use IE filter            
-            if ( div.style.opacity !== "0") {
-                if (typeof(div.filters) == 'undefined'){
-                    throw new Error('Opacity not supported by the browser');
-                }
-                div.style.filter = "alpha(opacity=0)";
-            }            
-            
-            addEvent(input, 'change', function(){
-                 
-                if ( ! input || input.value === ''){                
-                    return;                
-                }
-                            
-                // Get filename from input, required                
-                // as some browsers have path instead of it          
-                var file = fileFromPath(input.value);
-                                
-                if (false === self._settings.onChange.call(self, file, getExt(file))){
-                    self._clearInput();                
-                    return;
-                }
-                
-                // Submit form when value is changed
-                if (self._settings.autoSubmit) {
-                    self.submit();
-                }
-            });            
-
-            addEvent(input, 'mouseover', function(){
-                addClass(self._button, self._settings.hoverClass);
-            });
-            
-            addEvent(input, 'mouseout', function(){
-                removeClass(self._button, self._settings.hoverClass);
-                removeClass(self._button, self._settings.focusClass);
-                
-                // We use visibility instead of display to fix problem with Safari 4
-                // The problem is that the value of input doesn't change if it 
-                // has display none when user selects a file           
-                input.parentNode.style.visibility = 'hidden';
-
-            });   
-                        
-            addEvent(input, 'focus', function(){
-                addClass(self._button, self._settings.focusClass);
-            });
-            
-            addEvent(input, 'blur', function(){
-                removeClass(self._button, self._settings.focusClass);
-            });
-            
-               div.appendChild(input);
-            document.body.appendChild(div);
-              
-            this._input = input;
-        },
-        _clearInput : function(){
-            if (!this._input){
-                return;
-            }            
-                             
-            // this._input.value = ''; Doesn't work in IE6                               
-            removeNode(this._input.parentNode);
-            this._input = null;                                                                   
-            this._createInput();
-            
-            removeClass(this._button, this._settings.hoverClass);
-            removeClass(this._button, this._settings.focusClass);
-        },
-        /**
-         * Function makes sure that when user clicks upload button,
-         * the this._input is clicked instead
-         */
-        _rerouteClicks: function(){
-            var self = this;
-            
-            // IE will later display 'access denied' error
-            // if you use using self._input.click()
-            // other browsers just ignore click()
-
-            addEvent(self._button, 'mouseover', function(){
-                if (self._disabled){
-                    return;
-                }
-                                
-                if ( ! self._input){
-                       self._createInput();
-                }
-                
-                var div = self._input.parentNode;                            
-                copyLayout(self._button, div);
-                div.style.visibility = 'visible';
-                                
-            });
-            
-            
-            // commented because we now hide input on mouseleave
-            /**
-             * When the window is resized the elements 
-             * can be misaligned if button position depends
-             * on window size
-             */
-            //addResizeEvent(function(){
-            //    if (self._input){
-            //        copyLayout(self._button, self._input.parentNode);
-            //    }
-            //});            
-                                         
-        },
-        /**
-         * Creates iframe with unique name
-         * @return {Element} iframe
-         */
-        _createIframe: function(){
-            // We can't use getTime, because it sometimes return
-            // same value in safari :(
-            var id = getUID();            
-             
-            // We can't use following code as the name attribute
-            // won't be properly registered in IE6, and new window
-            // on form submit will open
-            // var iframe = document.createElement('iframe');
-            // iframe.setAttribute('name', id);                        
-            var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');
-            // src="javascript:false; was added
-            // because it possibly removes ie6 prompt 
-            // "This page contains both secure and nonsecure items"
-            // Anyway, it doesn't do any harm.            
-            iframe.setAttribute('id', id);
-            
-            iframe.style.display = 'none';
-            document.body.appendChild(iframe);
-            
-            return iframe;
-        },
-        /**
-         * Creates form, that will be submitted to iframe
-         * @param {Element} iframe Where to submit
-         * @return {Element} form
-         */
-        _createForm: function(iframe){
-            var settings = this._settings;
-                        
-            // We can't use the following code in IE6
-            // var form = document.createElement('form');
-            // form.setAttribute('method', 'post');
-            // form.setAttribute('enctype', 'multipart/form-data');
-            // Because in this case file won't be attached to request                    
-            var form = toElement('<form method="post" enctype="multipart/form-data"></form>');
-                        
-            form.setAttribute('action', settings.action);
-            form.setAttribute('target', iframe.name);                                   
-            form.style.display = 'none';
-            document.body.appendChild(form);
-            
-            // Create hidden input element for each data key
-            for (var prop in settings.data) {
-                if (settings.data.hasOwnProperty(prop)){
-                    var el = document.createElement("input");
-                    el.setAttribute('type', 'hidden');
-                    el.setAttribute('name', prop);
-                    el.setAttribute('value', settings.data[prop]);
-                    form.appendChild(el);
-                }
-            }
-            return form;
-        },
-        /**
-         * Gets response from iframe and fires onComplete event when ready
-         * @param iframe
-         * @param file Filename to use in onComplete callback 
-         */
-        _getResponse : function(iframe, file){            
-            // getting response
-            var toDeleteFlag = false, self = this, settings = this._settings;   
-               
-            addEvent(iframe, 'load', function(){                
-                
-                if (// For Safari 
-                    iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
-                    // For FF, IE
-                    iframe.src == "javascript:'<html></html>';"){                                                                        
-                        // First time around, do not delete.
-                        // We reload to blank page, so that reloading main page
-                        // does not re-submit the post.
-                        
-                        if (toDeleteFlag) {
-                            // Fix busy state in FF3
-                            setTimeout(function(){
-                                removeNode(iframe);
-                            }, 0);
-                        }
-                                                
-                        return;
-                }
-                
-                var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document;
-                
-                // fixing Opera 9.26,10.00
-                if (doc.readyState && doc.readyState != 'complete') {
-                   // Opera fires load event multiple times
-                   // Even when the DOM is not ready yet
-                   // this fix should not affect other browsers
-                   return;
-                }
-                
-                // fixing Opera 9.64
-                if (doc.body && doc.body.innerHTML == "false") {
-                    // In Opera 9.64 event was fired second time
-                    // when body.innerHTML changed from false 
-                    // to server response approx. after 1 sec
-                    return;
-                }
-                
-                var response;
-                
-                if (doc.XMLDocument) {
-                    // response is a xml document Internet Explorer property
-                    response = doc.XMLDocument;
-                } else if (doc.body){
-                    // response is html document or plain text
-                    response = doc.body.innerHTML;
-                    
-                    if (settings.responseType && settings.responseType.toLowerCase() == 'json') {
-                        // If the document was sent as 'application/javascript' or
-                        // 'text/javascript', then the browser wraps the text in a <pre>
-                        // tag and performs html encoding on the contents.  In this case,
-                        // we need to pull the original text content from the text node's
-                        // nodeValue property to retrieve the unmangled content.
-                        // Note that IE6 only understands text/html
-                        if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE') {
-                            doc.normalize();
-                            response = doc.body.firstChild.firstChild.nodeValue;
-                        }
-                        
-                        if (response) {
-                            response = eval("(" + response + ")");
-                        } else {
-                            response = {};
-                        }
-                    }
-                } else {
-                    // response is a xml document
-                    response = doc;
-                }
-                
-                settings.onComplete.call(self, file, response);
-                
-                // Reload blank page, so that reloading main page
-                // does not re-submit the post. Also, remember to
-                // delete the frame
-                toDeleteFlag = true;
-                
-                // Fix IE mixed content issue
-                iframe.src = "javascript:'<html></html>';";
-            });            
-        },        
-        /**
-         * Upload file contained in this._input
-         */
-        submit: function(){                        
-            var self = this, settings = this._settings;
-            
-            if ( ! this._input || this._input.value === ''){                
-                return;                
-            }
-                                    
-            var file = fileFromPath(this._input.value);
-            
-            // user returned false to cancel upload
-            if (false === settings.onSubmit.call(this, file, getExt(file))){
-                this._clearInput();                
-                return;
-            }
-            
-            // sending request    
-            var iframe = this._createIframe();
-            var form = this._createForm(iframe);
-            
-            // assuming following structure
-            // div -> input type='file'
-            removeNode(this._input.parentNode);            
-            removeClass(self._button, self._settings.hoverClass);
-            removeClass(self._button, self._settings.focusClass);
-                        
-            form.appendChild(this._input);
-                        
-            form.submit();
-
-            // request set, clean up                
-            removeNode(form); form = null;                          
-            removeNode(this._input); this._input = null;            
-            
-            // Get response from iframe and fire onComplete event when ready
-            this._getResponse(iframe, file);            
-
-            // get ready for next request            
-            this._createInput();
-        }
-    };
-})(); 
index aa42313b2a15387c7488a0730c42b603a2812754..74b4aaf6e1d85e5cedbf998194c7c57c2813f1bc 100644 (file)
@@ -1,6 +1,7 @@
 <?php
        require_once("bbcode.php");
        require_once("datetime.php");
+       require_once("conversation.php");
        
        /* 
         * Twitter-Like API
@@ -8,7 +9,7 @@
         */
 
        $API = Array();
-        
+       $called_api = Null; 
 
        function api_date($str){
                //Wed May 23 06:01:13 +0000 2007
@@ -54,7 +55,7 @@
                // process normal login request
 
                $r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) 
-                       AND `password` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1",
+                       AND `password` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
                        dbesc(trim($user)),
                        dbesc(trim($user)),
                        dbesc($encrypted)
         *  MAIN API ENTRY POINT  *
         **************************/
        function api_call(&$a){
-               GLOBAL $API;
+               GLOBAL $API, $called_api;
                foreach ($API as $p=>$info){
                        if (strpos($a->query_string, $p)===0){
+                               $called_api= explode("/",$p);
                                #unset($_SERVER['PHP_AUTH_USER']);
                                if ($info['auth']===true && local_user()===false) {
                                                api_login($a);
                                                return '<?xml version="1.0" encoding="UTF-8"?>'."\n".$r;
                                                break;
                                        case "json": 
-                                               header ("Content-Type: application/json");  
+                                               //header ("Content-Type: application/json");  
                                                foreach($r as $rr)
                                                    return json_encode($rr);
                                                break;
         * Returns user info array.
         */
        function api_get_user(&$a, $contact_id = Null){
+               global $called_api;
                $user = null;
                $extra_query = "";
 
                if(is_null($user) && x($_GET, 'screen_name')) {
                        $user = dbesc($_GET['screen_name']);    
                        $extra_query = "AND `contact`.`nick` = '%s' ";
+                       if (local_user()!==false)  $extra_query .= "AND `contact`.`uid`=".intval(local_user());
+                       
                }
                
-               if (is_null($user) && $a->argc > 3){
-                       list($user, $null) = explode(".",$a->argv[3]);
+               if (is_null($user) && $a->argc > (count($called_api)-1)){
+                       $argid = count($called_api);
+                       list($user, $null) = explode(".",$a->argv[$argid]);
                        if(is_numeric($user)){
                                $user = intval($user);
                                $extra_query = "AND `contact`.`id` = %d ";
                        } else {
                                $user = dbesc($user);
                                $extra_query = "AND `contact`.`nick` = '%s' ";
+                               if (local_user()!==false)  $extra_query .= "AND `contact`.`uid`=".intval(local_user());
                        }
                }
                
                }
 
                $ret = Array(
+                       'self' => intval($uinfo[0]['self']),
                        'uid' => intval($uinfo[0]['uid']),
                        'id' => intval($uinfo[0]['cid']),
                        'name' => $uinfo[0]['name'],
                        'followers_count' => intval($countfollowers),
                        'favourites_count' => intval($starred),
                        'contributors_enabled' => false,
-                       'follow_request_sent' => false,
+                       'follow_request_sent' => true,
                        'profile_background_color' => 'cfe8f6',
                        'profile_text_color' => '000000',
                        'profile_link_color' => 'FF8500',
                }
                return null;
        }
+
        // TODO - media uploads
        function api_statuses_update(&$a, $type) {
                if (local_user()===false) return false;
 
                // logger('api_post: ' . print_r($_POST,true));
 
-               $_POST['body'] = urldecode(requestdata('status'));
+               if(requestdata('htmlstatus')) {
+                       require_once('library/HTMLPurifier.auto.php');
+                       require_once('include/html2bbcode.php');
+
+                       $txt = requestdata('htmlstatus');
+                       if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) {
+
+                               $txt = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
+                                       '[youtube]$1[/youtube]', $txt);
+
+                               $txt = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
+                                       '[youtube]$1[/youtube]', $txt);
+
+                               $config = HTMLPurifier_Config::createDefault();
+                               $config->set('Cache.DefinitionImpl', null);
+
+
+                               $purifier = new HTMLPurifier($config);
+                               $txt = $purifier->purify($txt);
+
+                               $_POST['body'] = html2bbcode($txt);
+                       }
+
+               }
+               else
+                       $_POST['body'] = urldecode(requestdata('status'));
 
                $parent = requestdata('in_reply_to_status_id');
                if(ctype_digit($parent))
                $user_info = api_get_user($a);
                // get last newtork messages
 
+
                // params
                $count = (x($_REQUEST,'count')?$_REQUEST['count']:20);
                $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
                $user_info = api_get_user($a);
                // get last newtork messages
 
+
+               logger("api_statuses_user_timeline: local_user: ". local_user() .
+                          "\nuser_info: ".print_r($user_info, true) .
+                          "\n_REQUEST:  ".print_r($_REQUEST, true),
+                          LOGGER_DEBUG);
+
                // params
                $count = (x($_REQUEST,'count')?$_REQUEST['count']:20);
                $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
                
                $start = $page*$count;
 
+               if ($user_info['self']==1) $sql_extra = "AND `item`.`wall` = 1 ";
 
                $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
                        `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
                        `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
                        FROM `item`, `contact`
                        WHERE `item`.`uid` = %d
+                       AND `item`.`contact-id` = %d
                        AND `item`.`visible` = 1 AND `item`.`deleted` = 0
-                       AND `item`.`wall` = 1
                        AND `contact`.`id` = `item`.`contact-id`
                        AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
                        $sql_extra
                        AND `item`.`id`>%d
                        ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
-                       intval($user_info['uid']),
+                       intval(local_user()),
+                       intval($user_info['id']),
                        intval($since_id),
                        intval($start), intval($count)
                );
                if (local_user()===false) return false;
                
                $user_info = api_get_user($a);
-               // get last newtork messages
+               // in friendika starred item are private
+               // return favorites only for self
+               logger('api_favorites: self:' . $user_info['self']);
                
-               // params
-               $count = (x($_GET,'count')?$_GET['count']:20);
-               $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
-               if ($page<0) $page=0;
-               
-               $start = $page*$count;
-
-               $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
-                       `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
-                       `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
-                       `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
-                       FROM `item`, `contact`
-                       WHERE `item`.`uid` = %d
-                       AND `item`.`visible` = 1 AND `item`.`deleted` = 0
-                       AND `item`.`starred` = 1
-                       AND `contact`.`id` = `item`.`contact-id`
-                       AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
-                       $sql_extra
-                       ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
-                       intval($user_info['uid']),
-                       intval($start), intval($count)
-               );
-
-               $ret = api_format_items($r,$user_info);
+               if ($user_info['self']==0) {
+                       $ret = array();
+               } else {
+                       
+                       
+                       // params
+                       $count = (x($_GET,'count')?$_GET['count']:20);
+                       $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
+                       if ($page<0) $page=0;
+                       
+                       $start = $page*$count;
+
+                       $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
+                               `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+                               `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
+                               `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
+                               FROM `item`, `contact`
+                               WHERE `item`.`uid` = %d
+                               AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+                               AND `item`.`starred` = 1
+                               AND `contact`.`id` = `item`.`contact-id`
+                               AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+                               $sql_extra
+                               ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
+                               intval($user_info['uid']),
+                               intval($start), intval($count)
+                       );
 
+                       $ret = api_format_items($r,$user_info);
+               
+               }
                
                $data = array('$statuses' => $ret);
                switch($type){
                $ret = Array();
 
                foreach($r as $item) {
+                       localize_item($item);
                        $status_user = (($item['cid']==$user_info['id'])?$user_info: api_item_get_user($a,$item));
                        $status = array(
                                'created_at'=> api_date($item['created']),
                if (local_user()===false) return false;
                $user_info = api_get_user($a);
                
+               
+               // friends and followers only for self
+               if ($user_info['self']==0){
+                       return false;
+               }
+               
                if (x($_GET,'cursor') && $_GET['cursor']=='undefined'){
                        /* this is to stop Hotot to load friends multiple times
                        *  I'm not sure if I'm missing return something or
                        *  is a bug in hotot. Workaround, meantime
                        */
                        
-                       $ret=Array();
-                       $data = array('$users' => $ret);
-                       return  api_apply_template("friends", $type, $data);
+                       /*$ret=Array();
+                       return array('$users' => $ret);*/
+                       return false;
                }
                
                if($qtype == 'friends')
                }
 
                
-               $data = array('$users' => $ret);
-               return  api_apply_template("friends", $type, $data);
+               return array('$users' => $ret);
 
        }
        function api_statuses_friends(&$a, $type){
-               return api_statuses_f($a,$type,"friends");
+               $data =  api_statuses_f($a,$type,"friends");
+               if ($data===false) return false;
+               return  api_apply_template("friends", $type, $data);
        }
        function api_statuses_followers(&$a, $type){
-               return api_statuses_f($a,$type,"followers");
+               $data = api_statuses_f($a,$type,"followers");
+               if ($data===false) return false;
+               return  api_apply_template("friends", $type, $data);
        }
        api_register_func('api/statuses/friends','api_statuses_friends',true);
        api_register_func('api/statuses/followers','api_statuses_followers',true);
index 768af626fb5863a697e358cda29a793d82cf76e1..1f16b350479a9074da639249f35cb336eee229bc 100644 (file)
@@ -48,7 +48,8 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p
                        goaway(z_root());
                }
 
-               $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
+               $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` 
+               FROM `user` WHERE `uid` = %d AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
                        intval($_SESSION['uid'])
                );
 
@@ -183,8 +184,9 @@ else {
 
                        // process normal login request
 
-                       $r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) 
-                               AND `password` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1",
+                       $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey`  
+                               FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) 
+                               AND `password` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
                                dbesc(trim($_POST['openid_url'])),
                                dbesc(trim($_POST['openid_url'])),
                                dbesc($encrypted)
index 5ce34d6660a955237b18ea0f925c66372f22c514..c72c78445340cfbf481f9826213a218a86f33cae 100644 (file)
@@ -3,6 +3,21 @@
 require_once("include/oembed.php");
 require_once('include/event.php');
 
+require_once('library/markdown.php');
+require_once('include/html2bbcode.php');
+
+function diaspora2bb($s) {
+
+       $s = preg_replace('/\@\{(.+?)\; (.+?)\@(.+?)\}/','@[url=https://$3/u/$2]$1[/url]',$s);
+       $s = Markdown($s);
+       $s = html2bbcode($s);
+
+//     $s = preg_replace('/\[url=(.+?)\<em\>(.+?)\]/ism','[url=$1_$2]',$s);
+//     $s = preg_replace('/\[url=(.+?)\<\/em\>(.+?)\]/ism','[url=$1_$2]',$s);
+
+       return $s;
+
+}
 
 
 function stripdcode_br_cb($s) {
@@ -15,12 +30,18 @@ function stripdcode_br_cb($s) {
 
 function bb2diaspora($Text,$preserve_nl = false) {
 
+       $ev = bbtoevent($Text);
+
        // Replace any html brackets with HTML Entities to prevent executing HTML or script
        // Don't use strip_tags here because it breaks [url] search by replacing & with amp
 
        $Text = str_replace("<", "&lt;", $Text);
        $Text = str_replace(">", "&gt;", $Text);
 
+       // If we find any event code, turn it into an event.
+       // After we're finished processing the bbcode we'll 
+       // replace all of the event code with a reformatted version.
+
 
        if($preserve_nl)
                $Text = str_replace(array("\n","\r"), array('',''),$Text);
@@ -35,8 +56,9 @@ function bb2diaspora($Text,$preserve_nl = false) {
        // [img]pathtoimage[/img]
 
 
-       $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/", '[$1]($1)', $Text);
-       $Text = preg_replace("(\[url\=([$URLSearchString]*)\](.*?)\[/url\])", '[$2]($1)', $Text);
+       $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '[$1]($1)', $Text);
+       $Text = preg_replace("/\#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[#$2]($1)', $Text);
+       $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[$2]($1)', $Text);
 
 //     $Text = preg_replace("/\[img\](.*?)\[\/img\]/", t('Image/photo: ') . '$1', $Text);
 //     $Text = preg_replace("/\[img\](.*?)\[\/img\]/", t('image/photo'), $Text);
@@ -137,23 +159,60 @@ function bb2diaspora($Text,$preserve_nl = false) {
 
 
        // oembed tag
-//     $Text = oembed_bbcode2html($Text);
+       //      $Text = oembed_bbcode2html($Text);
 
        // If we found an event earlier, strip out all the event code and replace with a reformatted version.
 
-//     if(x($ev,'desc') && x($ev,'start')) {
-//             $sub = format_event_html($ev);
+       if(x($ev,'desc') && x($ev,'start')) {
 
-       //      $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text);
-               //$Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text);
-//             $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text);
-//             $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text);
-//             $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text);
-//     }
+               $sub = format_event_diaspora($ev);
+       
+               $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text);
+               $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text);
+               $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text);
+               $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text);
+               $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text);
+       }
 
+       $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text);
 
+       $Text = preg_replace('/\[(.*?)\]\((.*?)\\\\_(.*?)\)/ism','[$1]($2_$3)',$Text);
        
        call_hooks('bb2diaspora',$Text);
 
        return $Text;
 }
+
+function format_event_diaspora($ev) {
+
+       if(! ((is_array($ev)) && count($ev)))
+               return '';
+
+       $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM
+
+       $o = 'Friendika event notification:' . "\n";
+
+       $o .= '**' . bb2diaspora($ev['desc']) .  '**' . "\n";
+
+       $o .= t('Starts:') . ' ' 
+               . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC', 
+                       $ev['start'] , $bd_format ))
+                       :  day_translate(datetime_convert('UTC', 'UTC', 
+                       $ev['start'] , $bd_format)))
+               . "\n";
+
+       if(! $ev['nofinish'])
+               $o .= t('Finishes:') . ' ' 
+                       . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC', 
+                               $ev['finish'] , $bd_format ))
+                               :  day_translate(datetime_convert('UTC', 'UTC', 
+                               $ev['finish'] , $bd_format )))
+                       . "\n";
+
+       if(strlen($ev['location']))
+               $o .= t('Location:') . bb2diaspora($ev['location']) 
+                       . "\n";
+
+       $o .= "\n";
+       return $o;
+}
index 3619015ca9f8c6fa0734ff0af8c6f932c65f34b3..9abc7c439615e437ba4085c0385caf4c1a8bd482 100644 (file)
@@ -15,6 +15,13 @@ function stripcode_br_cb($s) {
 
 function bbcode($Text,$preserve_nl = false) {
 
+       // If we find any event code, turn it into an event.
+       // After we're finished processing the bbcode we'll 
+       // replace all of the event code with a reformatted version.
+
+       $ev = bbtoevent($Text);
+
+
        // Replace any html brackets with HTML Entities to prevent executing HTML or script
        // Don't use strip_tags here because it breaks [url] search by replacing & with amp
 
@@ -27,11 +34,6 @@ function bbcode($Text,$preserve_nl = false) {
        if($preserve_nl)
                $Text = str_replace(array("\n","\r"), array('',''),$Text);
 
-       // If we find any event code, turn it into an event.
-       // After we're finished processing the bbcode we'll 
-       // replace all of the event code with a reformatted version.
-
-       $ev = bbtoevent($Text);
 
        // Set up the parameters for a URL search string
        $URLSearchString = "^\[\]";
@@ -41,67 +43,67 @@ function bbcode($Text,$preserve_nl = false) {
        // Perform URL Search
 
 
-       $Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%\$\!\+\,]+)/", ' <a href="$2" target="external-link">$2</a>', $Text);
+       $Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1<a href="$2" target="external-link">$2</a>', $Text);
 
-       $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/", '<a href="$1" target="external-link">$1</a>', $Text);
-       $Text = preg_replace("(\[url\=([$URLSearchString]*)\](.*?)\[/url\])", '<a href="$1" target="external-link">$2</a>', $Text);
-       //$Text = preg_replace("(\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[/url\])", '<a href="$1" target="_blank">$2</a>', $Text);
+       $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '<a href="$1" target="external-link">$1</a>', $Text);
+       $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<a href="$1" target="external-link">$2</a>', $Text);
+       //$Text = preg_replace("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", '<a href="$1" target="_blank">$2</a>', $Text);
 
 
        // Perform MAIL Search
-       $Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '<a href="mailto:$1">$1</a>', $Text);
+       $Text = preg_replace("/\[mail\]([$MAILSearchString]*)\[\/mail\]/", '<a href="mailto:$1">$1</a>', $Text);
        $Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '<a href="mailto:$1">$2</a>', $Text);
          
        // Check for bold text
-       $Text = preg_replace("(\[b\](.*?)\[\/b\])is",'<strong>$1</strong>',$Text);
+       $Text = preg_replace("(\[b\](.*?)\[\/b\])ism",'<strong>$1</strong>',$Text);
 
        // Check for Italics text
-       $Text = preg_replace("(\[i\](.*?)\[\/i\])is",'<em>$1</em>',$Text);
+       $Text = preg_replace("(\[i\](.*?)\[\/i\])ism",'<em>$1</em>',$Text);
 
        // Check for Underline text
-       $Text = preg_replace("(\[u\](.*?)\[\/u\])is",'<u>$1</u>',$Text);
+       $Text = preg_replace("(\[u\](.*?)\[\/u\])ism",'<u>$1</u>',$Text);
 
        // Check for strike-through text
-       $Text = preg_replace("(\[s\](.*?)\[\/s\])is",'<strike>$1</strike>',$Text);
+       $Text = preg_replace("(\[s\](.*?)\[\/s\])ism",'<strike>$1</strike>',$Text);
 
        // Check for over-line text
-       $Text = preg_replace("(\[o\](.*?)\[\/o\])is",'<span class="overline">$1</span>',$Text);
+       $Text = preg_replace("(\[o\](.*?)\[\/o\])ism",'<span class="overline">$1</span>',$Text);
 
        // Check for colored text
-       $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])is","<span style=\"color: $1;\">$2</span>",$Text);
+       $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])ism","<span style=\"color: $1;\">$2</span>",$Text);
 
        // Check for sized text
-       $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])is","<span style=\"font-size: $1;\">$2</span>",$Text);
+       $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])ism","<span style=\"font-size: $1;\">$2</span>",$Text);
 
        // Check for list text
-       $Text = preg_replace("/\[list\](.*?)\[\/list\]/is", '<ul class="listbullet">$1</ul>' ,$Text);
-       $Text = preg_replace("/\[list=1\](.*?)\[\/list\]/is", '<ul class="listdecimal">$1</ul>' ,$Text);
-       $Text = preg_replace("/\[list=i\](.*?)\[\/list\]/s",'<ul class="listlowerroman">$1</ul>' ,$Text);
-       $Text = preg_replace("/\[list=I\](.*?)\[\/list\]/s", '<ul class="listupperroman">$1</ul>' ,$Text);
-       $Text = preg_replace("/\[list=a\](.*?)\[\/list\]/s", '<ul class="listloweralpha">$1</ul>' ,$Text);
-       $Text = preg_replace("/\[list=A\](.*?)\[\/list\]/s", '<ul class="listupperalpha">$1</ul>' ,$Text);
-       $Text = preg_replace("/\[li\](.*?)\[\/li\]/s", '<li>$1</li>' ,$Text);
+       $Text = preg_replace("/\[list\](.*?)\[\/list\]/ism", '<ul class="listbullet">$1</ul>' ,$Text);
+       $Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '<ul class="listdecimal">$1</ul>' ,$Text);
+       $Text = preg_replace("/\[list=i\](.*?)\[\/list\]/sm",'<ul class="listlowerroman">$1</ul>' ,$Text);
+       $Text = preg_replace("/\[list=I\](.*?)\[\/list\]/sm", '<ul class="listupperroman">$1</ul>' ,$Text);
+       $Text = preg_replace("/\[list=a\](.*?)\[\/list\]/sm", '<ul class="listloweralpha">$1</ul>' ,$Text);
+       $Text = preg_replace("/\[list=A\](.*?)\[\/list\]/sm", '<ul class="listupperalpha">$1</ul>' ,$Text);
+       $Text = preg_replace("/\[li\](.*?)\[\/li\]/sm", '<li>$1</li>' ,$Text);
 
-       $Text = preg_replace("/\[td\](.*?)\[\/td\]/s", '<td>$1</td>' ,$Text);
-       $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/s", '<tr>$1</tr>' ,$Text);
-       $Text = preg_replace("/\[table\](.*?)\[\/table\]/s", '<table>$1</table>' ,$Text);
+       $Text = preg_replace("/\[td\](.*?)\[\/td\]/sm", '<td>$1</td>' ,$Text);
+       $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/sm", '<tr>$1</tr>' ,$Text);
+       $Text = preg_replace("/\[table\](.*?)\[\/table\]/sm", '<table>$1</table>' ,$Text);
 
-       $Text = preg_replace("/\[table border=1\](.*?)\[\/table\]/s", '<table border="1" >$1</table>' ,$Text);
-       $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/s", '<table border="0" >$1</table>' ,$Text);
+       $Text = preg_replace("/\[table border=1\](.*?)\[\/table\]/sm", '<table border="1" >$1</table>' ,$Text);
+       $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/sm", '<table border="0" >$1</table>' ,$Text);
 
        
 //     $Text = str_replace("[*]", "<li>", $Text);
 
        // Check for font change text
-       $Text = preg_replace("(\[font=(.*?)\](.*?)\[\/font\])","<span style=\"font-family: $1;\">$2</span>",$Text);
+       $Text = preg_replace("/\[font=(.*?)\](.*?)\[\/font\]/sm","<span style=\"font-family: $1;\">$2</span>",$Text);
 
        // Declare the format for [code] layout
 
-       $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'stripcode_br_cb',$Text);
+       $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/ism",'stripcode_br_cb',$Text);
 
        $CodeLayout = '<code>$1</code>';
        // Check for [code] text
-       $Text = preg_replace("/\[code\](.*?)\[\/code\]/is","$CodeLayout", $Text);
+       $Text = preg_replace("/\[code\](.*?)\[\/code\]/ism","$CodeLayout", $Text);
 
 
 
@@ -109,22 +111,23 @@ function bbcode($Text,$preserve_nl = false) {
        // Declare the format for [quote] layout
        $QuoteLayout = '<blockquote>$1</blockquote>';                     
        // Check for [quote] text
-       $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/is","$QuoteLayout", $Text);
+       $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text);
          
+       // [img=widthxheight]image source[/img]
+       $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '<img src="$3" style="height: $2px; width: $1px;" >', $Text);
+
        // Images
        // [img]pathtoimage[/img]
-       $Text = preg_replace("/\[img\](.*?)\[\/img\]/", '<img src="$1" alt="' . t('Image/photo') . '" />', $Text);
+       $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img src="$1" alt="' . t('Image/photo') . '" />', $Text);
 
        // html5 video and audio
 
-       $Text = preg_replace("/\[video\](.*?)\[\/video\]/", '<video src="$1" controls="controls" width="425" height="350"><a href="$1">$1</a></video>', $Text);
+       $Text = preg_replace("/\[video\](.*?)\[\/video\]/ism", '<video src="$1" controls="controls" width="425" height="350"><a href="$1">$1</a></video>', $Text);
 
-       $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '<audio src="$1" controls="controls"><a href="$1">$1</a></audio>', $Text);
+       $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/ism", '<audio src="$1" controls="controls"><a href="$1">$1</a></audio>', $Text);
 
-       $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '<iframe src="$1" width="425" height="350"><a href="$1">$1</a></iframe>', $Text);
+       $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<iframe src="$1" width="425" height="350"><a href="$1">$1</a></iframe>', $Text);
          
-       // [img=widthxheight]image source[/img]
-       $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '<img src="$3" style="height:{$2}px; width:{$1}px;" >', $Text);
 
        if (get_pconfig(local_user(), 'oembed', 'use_for_youtube' )==1){
                // use oembed for youtube links
@@ -132,13 +135,15 @@ function bbcode($Text,$preserve_nl = false) {
                $Text = preg_replace("/\[\/youtube\]/",'[/embed]',$Text); 
        } else {
                // Youtube extensions
-        $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text); 
-        $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text); 
-               $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '<iframe width="425" height="349" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>', $Text);
+        $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); 
+        $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); 
+        $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); 
+               $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '<iframe width="425" height="350" src="http://www.youtube.com/embed/$1" frameborder="0" ></iframe>', $Text);
        }
-//     $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" ><param name="movie" value="http://www.youtube.com/v/$1"></param><!--[if IE]><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350" /><![endif]--></object>', $Text);
 
 
+//     $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" ><param name="movie" value="http://www.youtube.com/v/$1"></param><!--[if IE]><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350" /><![endif]--></object>', $Text);
+
 
        // oembed tag
        $Text = oembed_bbcode2html($Text);
@@ -148,14 +153,15 @@ function bbcode($Text,$preserve_nl = false) {
        if(x($ev,'desc') && x($ev,'start')) {
                $sub = format_event_html($ev);
 
-               $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text);
-               $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text);
-               $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text);
-               $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text);
-               $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text);
+               $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/ism",$sub,$Text);
+               $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/ism",'',$Text);
+               $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/ism",'',$Text);
+               $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/ism",'',$Text);
+               $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/ism",'',$Text);
        }
 
-
+       // fix any escaped ampersands that may have been converted into links
+       $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text);
        
        call_hooks('bbcode',$Text);
 
index ac1e38e4fe2666cb600d79ffa8f8ffce7925433a..1303acf74a13a1788930997dd8953c61e8752a79 100644 (file)
@@ -46,10 +46,11 @@ function contact_reputation($current) {
 }
 
 
-function contact_poll_interval($current) {
+function contact_poll_interval($current, $disabled = false) {
 
+       $dis = (($disabled) ? ' disabled="disabled" ' : '');
        $o = '';
-       $o .= '<select id="contact-poll-interval" name="poll" />' . "\r\n";
+       $o .= "<select id=\"contact-poll-interval\" name=\"poll\" $dis />" . "\r\n";
 
        $rep = array(
                0 => t('Frequently'),
@@ -67,3 +68,13 @@ function contact_poll_interval($current) {
        $o .= "</select>\r\n";
        return $o;
 }
+
+
+function network_to_name($s) {
+
+       call_hooks('network_to_name', $s);
+
+       return str_replace(array(NETWORK_DFRN,NETWORK_OSTATUS,NETWORK_FEED,NETWORK_MAIL,NETWORK_DIASPORA,NETWORK_FACEBOOK,NETWORK_ZOT),
+               array(t('Friendika'),t('OStatus'),t('RSS/Atom'),t('Email'),t('Diaspora'),t('Facebook'),t('Zot!')),$s);
+
+}
index 0d901a3c06d6204eb076bf926d9cd585253393e1..10b34ebe68a6eec0e8a0f104bf6ea935bf4ee9ae 100644 (file)
@@ -80,6 +80,7 @@ function localize_item(&$item){
 
        }
         
+
 }
 
 /**
@@ -110,7 +111,7 @@ function conversation(&$a, $items, $mode, $update) {
        }
 
        if($mode === 'notes') {
-               $profile_owner = $a->profile['profile_uid'];
+               $profile_owner = local_user();
                $page_writeable = true;
        }
 
@@ -133,16 +134,17 @@ function conversation(&$a, $items, $mode, $update) {
 
 
        $cmnt_tpl    = get_markup_template('comment_item.tpl');
-       $like_tpl    = get_markup_template('like.tpl');
-       $noshare_tpl = get_markup_template('like_noshare.tpl');
        $tpl         = get_markup_template('wall_item.tpl');
        $wallwall    = get_markup_template('wallwall_item.tpl');
-       $droptpl     = get_markup_template('wall_item_drop.tpl');
-       $fakedrop    = get_markup_template('wall_fake_drop.tpl');
 
        $alike = array();
        $dlike = array();
        
+       
+       // array with html for each thread (parent+comments)
+       $threads = array();
+       $threadsid = -1;
+       
        if(count($items)) {
 
                if($mode === 'network-new' || $mode === 'search' || $mode === 'community') {
@@ -153,6 +155,7 @@ function conversation(&$a, $items, $mode, $update) {
                        $tpl = get_markup_template('search_item.tpl');
 
                        foreach($items as $item) {
+                               $threadsid++;
 
                                $comment     = '';
                                $owner_url   = '';
@@ -194,344 +197,389 @@ function conversation(&$a, $items, $mode, $update) {
                                                $location = '<span class="smalltext">' . $coord . '</span>';
                                }
 
-                               $drop = '';
 
                                localize_item($item);
                                if($mode === 'network-new')
-                                       $t = $droptpl;
+                                       $dropping = true;
                                else
-                                       $t = $fakedrop;
+                                       $dropping = false;
 
-                               $drop = replace_macros($t,array('$id' => $item['id']));
-                               $lock = '<div class="wall-item-lock"></div>';
-                               $star = '';
+
+                               $drop = array(
+                                       'dropping' => $dropping,
+                                       'select' => t('Select'), 
+                                       'delete' => t('Delete'),
+                               );
+
+                               $star = false;
+                               $isstarred = "unstarred";
+                               
+                               $lock = false;
+                               $likebuttons = false;
+                               $shareable = false;
 
                                $body = prepare_body($item,true);
                                
-                               $o .= replace_macros($tpl,array(
+                               $tmp_item = replace_macros($tpl,array(
                                        '$id' => $item['item_id'],
-                                       '$linktitle' => sprintf( t('View %s\'s profile'), $profile_name),
+                                       '$linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
                                        '$profile_url' => $profile_link,
                                        '$item_photo_menu' => item_photo_menu($item),
-                                       '$name' => $profile_name,
+                                       '$name' => template_escape($profile_name),
                                        '$sparkle' => $sparkle,
                                        '$lock' => $lock,
                                        '$thumb' => $profile_avatar,
-                                       '$title' => $item['title'],
-                                       '$body' => $body,
+                                       '$title' => template_escape($item['title']),
+                                       '$body' => template_escape($body),
                                        '$ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
-                                       '$location' => $location,
+                                       '$lock' => $lock,
+                                       '$location' => template_escape($location),
                                        '$indent' => '',
+                                       '$owner_name' => template_escape($owner_name),
                                        '$owner_url' => $owner_url,
                                        '$owner_photo' => $owner_photo,
-                                       '$owner_name' => $owner_name,
+                                       '$plink' => get_plink($item),
+                                       '$edpost' => false,
+                                       '$isstarred' => $isstarred,
                                        '$star' => $star,
                                        '$drop' => $drop,
-                                       '$conv' => '<a href="' . $a->get_baseurl() . '/display/' . $nickname . '/' . $item['id'] . '">' . t('View in context') . '</a>'
+                                       '$vote' => $likebuttons,
+                                       '$like' => '',
+                                       '$dislike' => '',
+                                       '$comment' => '',
+                                       '$conv' => array('href'=> $a->get_baseurl() . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context')),
+                                       '$wait' => t('Please wait'),
                                ));
 
-                       }
+                               $arr = array('item' => $item, 'output' => $tmp_item);
+                               call_hooks('display_item', $arr);
 
-                       return $o;
-               }
+                               $threads[$threadsid] .= $arr['output'];
 
+                       }
 
+               }
+               else
+               {
+                       // Normal View
 
 
-               // Normal View
+                       // Figure out how many comments each parent has
+                       // (Comments all have gravity of 6)
+                       // Store the result in the $comments array
 
+                       $comments = array();
+                       foreach($items as $item) {
+                               if((intval($item['gravity']) == 6) && ($item['id'] != $item['parent'])) {
+                                       if(! x($comments,$item['parent']))
+                                               $comments[$item['parent']] = 1;
+                                       else
+                                               $comments[$item['parent']] += 1;
+                               }
+                       }
 
-               // Figure out how many comments each parent has
-               // (Comments all have gravity of 6)
-               // Store the result in the $comments array
+                       // map all the like/dislike activities for each parent item 
+                       // Store these in the $alike and $dlike arrays
 
-               $comments = array();
-               foreach($items as $item) {
-                       if((intval($item['gravity']) == 6) && ($item['id'] != $item['parent'])) {
-                               if(! x($comments,$item['parent']))
-                                       $comments[$item['parent']] = 1;
-                               else
-                                       $comments[$item['parent']] += 1;
+                       foreach($items as $item) {
+                               like_puller($a,$item,$alike,'like');
+                               like_puller($a,$item,$dlike,'dislike');
                        }
-               }
-
-               // map all the like/dislike activities for each parent item 
-               // Store these in the $alike and $dlike arrays
 
-               foreach($items as $item) {
-                       like_puller($a,$item,$alike,'like');
-                       like_puller($a,$item,$dlike,'dislike');
-               }
+                       $comments_collapsed = false;
+                       $blowhard = 0;
+                       $blowhard_count = 0;
 
-               $comments_collapsed = false;
-               $blowhard = 0;
-               $blowhard_count = 0;
 
-               foreach($items as $item) {
+                       foreach($items as $item) {
 
-                       $comment = '';
-                       $template = $tpl;
-                       $commentww = '';
-                       $sparkle = '';
-                       $owner_url = $owner_photo = $owner_name = '';
+                               $comment = '';
+                               $template = $tpl;
+                               $commentww = '';
+                               $sparkle = '';
+                               $owner_url = $owner_photo = $owner_name = '';
 
-                       // We've already parsed out like/dislike for special treatment. We can ignore them now
+                               // We've already parsed out like/dislike for special treatment. We can ignore them now
 
-                       if(((activity_match($item['verb'],ACTIVITY_LIKE)) 
-                               || (activity_match($item['verb'],ACTIVITY_DISLIKE))) 
-                               && ($item['id'] != $item['parent']))
-                               continue;
+                               if(((activity_match($item['verb'],ACTIVITY_LIKE)) 
+                                       || (activity_match($item['verb'],ACTIVITY_DISLIKE))) 
+                                       && ($item['id'] != $item['parent']))
+                                       continue;
 
-                       $toplevelpost = (($item['id'] == $item['parent']) ? true : false);
-                       $toplevelprivate = false;
+                               $toplevelpost = (($item['id'] == $item['parent']) ? true : false);
+                               $toplevelprivate = false;
 
-                       // Take care of author collapsing and comment collapsing
-                       // If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
-                       // If there are more than two comments, squash all but the last 2.
-               
-                       if($toplevelpost) {
-                               $toplevelprivate = (($toplevelpost && $item['private']) ? true : false);
-                               $item_writeable = (($item['writable'] || $item['self']) ? true : false);
-
-                               if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) {
-                                       $blowhard_count ++;
-                                       if($blowhard_count == 3) {
-                                               $o .= '<div class="icollapse-wrapper fakelink" id="icollapse-wrapper-' . $item['parent'] 
-                                                       . '" onclick="openClose(' . '\'icollapse-' . $item['parent'] . '\'); $(\'#icollapse-wrapper-' . $item['parent'] . '\').hide();" >' 
-                                                       . t('See more posts like this') . '</div>' . '<div class="icollapse" id="icollapse-' 
-                                                       . $item['parent'] . '" style="display: none;" >';
+                               // Take care of author collapsing and comment collapsing
+                               // If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
+                               // If there are more than two comments, squash all but the last 2.
+                       
+                               if($toplevelpost) {
+                                       $toplevelprivate = (($toplevelpost && $item['private']) ? true : false);
+                                       $item_writeable = (($item['writable'] || $item['self']) ? true : false);
+
+                                       /*if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) {
+                                               $blowhard_count ++;
+                                               if($blowhard_count == 3) {
+                                                       $o .= '<div class="icollapse-wrapper fakelink" id="icollapse-wrapper-' . $item['parent'] 
+                                                               . '" onclick="openClose(' . '\'icollapse-' . $item['parent'] . '\'); $(\'#icollapse-wrapper-' . $item['parent'] . '\').hide();" >' 
+                                                               . t('See more posts like this') . '</div>' . '<div class="icollapse" id="icollapse-' 
+                                                               . $item['parent'] . '" style="display: none;" >';
+                                               }
                                        }
+                                       else {
+                                               $blowhard = $item['cid'];                                       
+                                               if($blowhard_count >= 3)
+                                                       $o .= '</div>';
+                                               $blowhard_count = 0;
+                                       }*/
+
+                                       $comments_seen = 0;
+                                       $comments_collapsed = false;
+                                       
+                                       $threadsid++;
+                                       $threads[$threadsid] = "";
                                }
                                else {
-                                       $blowhard = $item['cid'];                                       
-                                       if($blowhard_count >= 3)
-                                               $o .= '</div>';
-                                       $blowhard_count = 0;
+                                       // prevent private email from leaking into public conversation
+                                       if((! $toplevelpost) && (! toplevelprivate) && ($item['private']) && ($profile_owner != local_user()))
+                                               continue;
+                                       $comments_seen ++;
+                               }       
+
+                               $override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
+                               $show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false);
+
+                               if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
+                                       if(! $comments_collapsed) {
+                                               $threads[$threadsid] .= '<div class="ccollapse-wrapper fakelink" id="ccollapse-wrapper-' . $item['parent'] 
+                                                       . '" onclick="openClose(' . '\'ccollapse-' . $item['parent'] . '\'); $(\'#ccollapse-wrapper-' . $item['parent'] . '\').hide();" >' 
+                                                       . sprintf( t('See all %d comments'), $comments[$item['parent']]) . '</div>'
+                                                       . '<div class="ccollapse" id="ccollapse-' . $item['parent'] . '" style="display: none;" >';
+                                               $comments_collapsed = true;
+                                       }
                                }
-
-                               $comments_seen = 0;
-                               $comments_collapsed = false;
-                       }
-                       else {
-                               // prevent private email from leaking into public conversation
-                               if((! $toplevelpost) && (! toplevelprivate) && ($item['private']) && ($profile_owner != local_user()))
-                                       continue;
-                               $comments_seen ++;
-                       }       
-
-                       $override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
-                       $show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false);
-
-                       if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
-                               if(! $comments_collapsed) {
-                                       $o .= '<div class="ccollapse-wrapper fakelink" id="ccollapse-wrapper-' . $item['parent'] 
-                                               . '" onclick="openClose(' . '\'ccollapse-' . $item['parent'] . '\'); $(\'#ccollapse-wrapper-' . $item['parent'] . '\').hide();" >' 
-                                               . sprintf( t('See all %d comments'), $comments[$item['parent']]) . '</div>'
-                                               . '<div class="ccollapse" id="ccollapse-' . $item['parent'] . '" style="display: none;" >';
-                                       $comments_collapsed = true;
+                               if(($comments[$item['parent']] > 2) && ($comments_seen == ($comments[$item['parent']] - 1))) {
+                                       $threads[$threadsid] .= '</div>';
                                }
-                       }
-                       if(($comments[$item['parent']] > 2) && ($comments_seen == ($comments[$item['parent']] - 1))) {
-                               $o .= '</div>';
-                       }
 
-                       $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
+                               $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
 
-                       $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) 
-                               || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
-                               ? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
-                               : '<div class="wall-item-lock"></div>');
+                               $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) 
+                                       || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
+                                       ? t('Private Message')
+                                       : false);
 
 
-                       // Top-level wall post not written by the wall owner (wall-to-wall)
-                       // First figure out who owns it. 
+                               // Top-level wall post not written by the wall owner (wall-to-wall)
+                               // First figure out who owns it. 
 
-                       $osparkle = '';
+                               $osparkle = '';
 
-                       if(($toplevelpost) && (! $item['self']) && ($mode !== 'profile')) {
+                               if(($toplevelpost) && (! $item['self']) && ($mode !== 'profile')) {
 
-                               if($item['wall']) {
+                                       if($item['wall']) {
 
-                                       // On the network page, I am the owner. On the display page it will be the profile owner.
-                                       // This will have been stored in $a->page_contact by our calling page.
-                                       // Put this person on the left of the wall-to-wall notice.
+                                               // On the network page, I am the owner. On the display page it will be the profile owner.
+                                               // This will have been stored in $a->page_contact by our calling page.
+                                               // Put this person on the left of the wall-to-wall notice.
 
-                                       $owner_url = $a->page_contact['url'];
-                                       $owner_photo = $a->page_contact['thumb'];
-                                       $owner_name = $a->page_contact['name'];
-                                       $template = $wallwall;
-                                       $commentww = 'ww';      
-                               }
-                               if((! $item['wall']) && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) {
-
-                                       // Could be anybody. 
-
-                                       $owner_url = $item['owner-link'];
-                                       $owner_photo = $item['owner-avatar'];
-                                       $owner_name = $item['owner-name'];
-                                       $template = $wallwall;
-                                       $commentww = 'ww';
-                                       // If it is our contact, use a friendly redirect link
-                                       if((link_compare($item['owner-link'],$item['url'])) 
-                                               && ($item['network'] === 'dfrn')) {
-                                               $owner_url = $redirect_url;
-                                               $osparkle = ' sparkle';
+                                               $owner_url = $a->page_contact['url'];
+                                               $owner_photo = $a->page_contact['thumb'];
+                                               $owner_name = $a->page_contact['name'];
+                                               $template = $wallwall;
+                                               $commentww = 'ww';      
+                                       }
+                                       if((! $item['wall']) && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) {
+
+                                               // Could be anybody. 
+
+                                               $owner_url = $item['owner-link'];
+                                               $owner_photo = $item['owner-avatar'];
+                                               $owner_name = $item['owner-name'];
+                                               $template = $wallwall;
+                                               $commentww = 'ww';
+                                               // If it is our contact, use a friendly redirect link
+                                               if((link_compare($item['owner-link'],$item['url'])) 
+                                                       && ($item['network'] === 'dfrn')) {
+                                                       $owner_url = $redirect_url;
+                                                       $osparkle = ' sparkle';
+                                               }
                                        }
                                }
-                       }
 
+                               $likebuttons = '';
+                               $shareable = ((($profile_owner == local_user()) && ($mode != 'display') && (! $item['private'])) ? true : false);
 
-                       $likebuttons = '';
+                               if($page_writeable) {
+                                       if($toplevelpost) {
+                                               $likebuttons = array(
+                                                       'like' => array( t("I like this \x28toggle\x29"), t("like")),
+                                                       'dislike' => array( t("I don't like this \x28toggle\x29"), t("dislike")),
+                                               );
+                                               if ($shareable) $likebuttons['share'] = array( t('Share this'), t('share'));
+                                       }
 
-                       if($page_writeable) {
-                               if($toplevelpost) {
-                                       $likebuttons = replace_macros((($item['private'] || ($profile_owner != local_user())) ? $noshare_tpl : $like_tpl),array(
-                                               '$id' => $item['id'],
-                                               '$likethis' => t("I like this \x28toggle\x29"),
-                                               '$nolike' => t("I don't like this \x28toggle\x29"),
-                                               '$share' => t('Share'),
-                                               '$wait' => t('Please wait') 
-                                       ));
+                                       if(($show_comment_box) || (($show_comment_box == false) && ($override_comment_box == false) && ($item['last-child']))) {
+                                               $comment = replace_macros($cmnt_tpl,array(
+                                                       '$return_path' => '', 
+                                                       '$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''),
+                                                       '$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'),
+                                                       '$id' => $item['item_id'],
+                                                       '$parent' => $item['parent'],
+                                                       '$profile_uid' =>  $profile_owner,
+                                                       '$mylink' => $a->contact['url'],
+                                                       '$mytitle' => t('This is you'),
+                                                       '$myphoto' => $a->contact['thumb'],
+                                                       '$comment' => t('Comment'),
+                                                       '$submit' => t('Submit'),
+                                                       '$ww' => (($mode === 'network') ? $commentww : '')
+                                               ));
+                                       }
                                }
 
-                               if(($show_comment_box) || (($show_comment_box == false) && ($override_comment_box == false) && ($item['last-child']))) {
-                                       $comment = replace_macros($cmnt_tpl,array(
-                                               '$return_path' => '', 
-                                               '$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''),
-                                               '$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'),
-                                               '$id' => $item['item_id'],
-                                               '$parent' => $item['parent'],
-                                               '$profile_uid' =>  $profile_owner,
-                                               '$mylink' => $a->contact['url'],
-                                               '$mytitle' => t('This is you'),
-                                               '$myphoto' => $a->contact['thumb'],
-                                               '$comment' => t('Comment'),
-                                               '$submit' => t('Submit'),
-                                               '$ww' => (($mode === 'network') ? $commentww : '')
-                                       ));
+                               $edpost = (((($profile_owner == local_user()) && ($toplevelpost) && (intval($item['wall']) == 1)) || ($mode === 'notes'))
+                                               ? array($a->get_baseurl()."/editpost/".$item['id'], t("Edit"))
+                                               : False);
+
+
+                               $drop = '';
+                               $dropping = false;
+
+                               if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
+                                       $dropping = true;
+
+                               $drop = array(
+                                       'dropping' => $dropping,
+                                       'select' => t('Select'), 
+                                       'delete' => t('Delete'),
+                               );
+
+                               $star = false;
+                               $isstarred = "unstarred";
+                               if ($profile_owner == local_user() && $toplevelpost) {
+                                       $isstarred = (($item['starred']) ? "starred" : "unstarred");
+
+                                       $star = array(
+                                               'do' => t("add star"),
+                                               'undo' => t("remove star"),
+                                               'toggle' => t("toggle star status"),
+                                               'classdo' => (($item['starred']) ? "hidden" : ""),
+                                               'classundo' => (($item['starred']) ? "" : "hidden"),
+                                               'starred' =>  t('starred'),
+                                       );
                                }
-                       }
 
-                       $edpost = (((($profile_owner == local_user()) && ($toplevelpost) && (intval($item['wall']) == 1)) || ($mode === 'notes'))
-                                       ? '<a class="editpost icon pencil" href="' . $a->get_baseurl() . '/editpost/' . $item['id'] 
-                                               . '" title="' . t('Edit') . '"></a>'
-                                       : '');
 
 
-                       $drop = '';
-                       $dropping = false;
+                               $photo = $item['photo'];
+                               $thumb = $item['thumb'];
 
-                       if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
-                               $dropping = true;
+                               // Post was remotely authored.
 
-            $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$select' => t('Select'), '$delete' => t('Delete')));
+                               $diff_author    = ((link_compare($item['url'],$item['author-link'])) ? false : true);
 
-                       $star = (($profile_owner == local_user() && $toplevelpost) ? '<a href="#" id="starred-' . $item['id'] . '" onclick="dostar(' . $item['id'] . '); return false;" class="star-item icon ' . (($item['starred']) ? 'starred' : 'unstarred') . '" title="' . t('toggle star status')  . '"></a>' : '');
+                               $profile_name   = (((strlen($item['author-name']))   && $diff_author) ? $item['author-name']   : $item['name']);
 
+                               $sp = false;
+                               $profile_link = best_link_url($item,$sp);
+                               if($sp)
+                                       $sparkle = ' sparkle';
 
-                       $photo = $item['photo'];
-                       $thumb = $item['thumb'];
+                               if($profile_link === 'mailbox')
+                                       $profile_link = '';
 
-                       // Post was remotely authored.
+                               $normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
+                               if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
+                                       $profile_avatar = $a->contacts[$normalised]['thumb'];
+                               else
+                                       $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb);
 
-                       $diff_author    = ((link_compare($item['url'],$item['author-link'])) ? false : true);
 
-                       $profile_name   = (((strlen($item['author-name']))   && $diff_author) ? $item['author-name']   : $item['name']);
 
-                       $sp = false;
-                       $profile_link = best_link_url($item,$sp);
-                       if($sp)
-                               $sparkle = ' sparkle';
 
-                       if($profile_link === 'mailbox')
-                               $profile_link = '';
 
-                       $normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
-                       if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
-                               $profile_avatar = $a->contacts[$normalised]['thumb'];
-                       else
-                               $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb);
+                               $like    = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
+                               $dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
 
+                               $location = (($item['location']) ? '<a target="map" title="' . $item['location'] 
+                                       . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
+                               $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] 
+                                       . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
+                               if($coord) {
+                                       if($location)
+                                               $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
+                                       else
+                                               $location = '<span class="smalltext">' . $coord . '</span>';
+                               }
 
+                               $indent = (($toplevelpost) ? '' : ' comment');
 
+                               if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
+                                       $indent .= ' shiny'; 
 
+                               // 
+                               localize_item($item);
 
-                       $like    = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
-                       $dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
+                               // Build the HTML
 
-                       $location = (($item['location']) ? '<a target="map" title="' . $item['location'] 
-                               . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
-                       $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] 
-                               . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
-                       if($coord) {
-                               if($location)
-                                       $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
-                               else
-                                       $location = '<span class="smalltext">' . $coord . '</span>';
-                       }
+                               $body = prepare_body($item,true);
+
+
+                               $tmp_item = replace_macros($template,array(
+                                       '$body' => template_escape($body),
+                                       '$id' => $item['item_id'],
+                                       '$linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
+                                       '$olinktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])),
+                                       '$to' => t('to'),
+                                       '$wall' => t('Wall-to-Wall'),
+                                       '$vwall' => t('via Wall-To-Wall:'),
+                                       '$profile_url' => $profile_link,
+                                       '$item_photo_menu' => item_photo_menu($item),
+                                       '$name' => template_escape($profile_name),
+                                       '$thumb' => $profile_avatar,
+                                       '$osparkle' => $osparkle,
+                                       '$sparkle' => $sparkle,
+                                       '$title' => template_escape($item['title']),
+                                       '$ago' => ((($item['app']) && ($item['id'] == $item['parent'])) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
+                                       '$lock' => $lock,
+                                       '$location' => template_escape($location),
+                                       '$indent' => $indent,
+                                       '$owner_url' => $owner_url,
+                                       '$owner_photo' => $owner_photo,
+                                       '$owner_name' => template_escape($owner_name),
+                                       '$plink' => get_plink($item),
+                                       '$edpost' => $edpost,
+                                       '$isstarred' => $isstarred,
+                                       '$star' => $star,
+                                       '$drop' => $drop,
+                                       '$vote' => $likebuttons,
+                                       '$like' => $like,
+                                       '$dislike' => $dislike,
+                                       '$comment' => $comment,
+                                       '$wait' => t('Please wait'),
+
+                               ));
 
-                       $indent = (($toplevelpost) ? '' : ' comment');
-
-                       if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
-                               $indent .= ' shiny'; 
-
-                       // 
-                       localize_item($item);
-
-                       // Build the HTML
-
-                       $body = prepare_body($item,true);
-
-
-                       $tmp_item = replace_macros($template,array(
-                               '$id' => $item['item_id'],
-                               '$linktitle' => sprintf( t('View %s\'s profile'), $profile_name),
-                               '$olinktitle' => sprintf( t('View %s\'s profile'), $owner_name),
-                               '$to' => t('to'),
-                               '$wall' => t('Wall-to-Wall'),
-                               '$vwall' => t('via Wall-To-Wall:'),
-                               '$profile_url' => $profile_link,
-                               '$item_photo_menu' => item_photo_menu($item),
-                               '$name' => $profile_name,
-                               '$thumb' => $profile_avatar,
-                               '$osparkle' => $osparkle,
-                               '$sparkle' => $sparkle,
-                               '$title' => $item['title'],
-                               '$body' => $body,
-                               '$ago' => ((($item['app']) && ($item['id'] == $item['parent'])) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
-                               '$lock' => $lock,
-                               '$location' => $location,
-                               '$indent' => $indent,
-                               '$owner_url' => $owner_url,
-                               '$owner_photo' => $owner_photo,
-                               '$owner_name' => $owner_name,
-                               '$plink' => get_plink($item),
-                               '$edpost' => $edpost,
-                               '$star' => $star,
-                               '$drop' => $drop,
-                               '$vote' => $likebuttons,
-                               '$like' => $like,
-                               '$dislike' => $dislike,
-                               '$comment' => $comment
-                       ));
-
-
-                       $arr = array('item' => $item, 'output' => $tmp_item);
-                       call_hooks('display_item', $arr);
-
-                       $o .= $arr['output'];
 
+                               $arr = array('item' => $item, 'output' => $tmp_item);
+                               call_hooks('display_item', $arr);
+
+                               $threads[$threadsid] .= $arr['output'];
+                       }
                }
        }
 
 
        // if author collapsing is in force but didn't get closed, close it off now.
 
-       if($blowhard_count >= 3)
-               $o .= '</div>';
+       /*if($blowhard_count >= 3)
+               $threads[$threadsid] .= '</div>';*/
 
-       if($dropping)
-               $o .= '<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();"><div id="item-delete-selected-icon" class="icon drophide" title="' . t('Delete Selected Items') . '" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div><div id="item-delete-selected-desc" >' .  t('Delete Selected Items') . '</div></div><div id="item-delete-selected-end"></div>';
+       $page_template = get_markup_template("conversation.tpl");
+       $o .= replace_macros($page_template, array(
+               '$threads' => $threads,
+               '$dropping' => ($dropping?t('Delete Selected Items'):False),
+       ));
 
        return $o;
 } 
@@ -728,7 +776,7 @@ function status_editor($a,$x, $notes_cid = 0) {
 
                if($mail_enabled) {
               $selected = (($pubmail_enabled) ? ' checked="checked" ' : '');
-                       $jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . 'value="1" /> '
+                       $jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . ' value="1" /> '
                . t("Post to Email") . '</div>';
                }
 
diff --git a/include/country.js b/include/country.js
deleted file mode 100644 (file)
index 07ab29b..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-//<!--  Docs at: http://www.microcosmotalk.com/tech/scripts/\r
-// NOTE:\r
-// This code is placed into the public domain and may be used in any manner desired.\r
-// \r
-// Jim Carlock obtained the list of country names and state names from an HTML\r
-// document at Microsoft's website.\r
-//\r
-// Thursday, January 13, 2005, 7:00:52 PM\r
-// \r
-var gLngMaxStateLength=0;\r
-var gLngMaxCountryLength=0;\r
-var gLngNumberCountries=252;\r
-var gLngNumberStates=0;\r
-var gLngSelectedCountry=0;\r
-var gLngSelectedState=0;\r
-var gArCountryInfo;\r
-var gArStateInfo;\r
-// NOTE:\r
-// Some editors may exhibit problems viewing 2803 characters...\r
-var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe";\r
-var aStates = new Array();\r
-\r
-aStates[0]="";\r
-aStates[1]="|Badakhshan|Badghis|Baghlan|Balkh|Bamian|Farah|Faryab|Ghazni|Ghowr|Helmand|Herat|Jowzjan|Kabol|Kandahar|Kapisa|Konar|Kondoz|Laghman|Lowgar|Nangarhar|Nimruz|Oruzgan|Paktia|Paktika|Parvan|Samangan|Sar-e Pol|Takhar|Vardak|Zabol";\r
-aStates[2]="|Berat|Bulqize|Delvine|Devoll (Bilisht)|Diber (Peshkopi)|Durres|Elbasan|Fier|Gjirokaster|Gramsh|Has (Krume)|Kavaje|Kolonje (Erseke)|Korce|Kruje|Kucove|Kukes|Kurbin|Lezhe|Librazhd|Lushnje|Malesi e Madhe (Koplik)|Mallakaster (Ballsh)|Mat (Burrel)|Mirdite (Rreshen)|Peqin|Permet|Pogradec|Puke|Sarande|Shkoder|Skrapar (Corovode)|Tepelene|Tirane (Tirana)|Tirane (Tirana)|Tropoje (Bajram Curri)|Vlore";\r
-aStates[3]="|Adrar|Ain Defla|Ain Temouchent|Alger|Annaba|Batna|Bechar|Bejaia|Biskra|Blida|Bordj Bou Arreridj|Bouira|Boumerdes|Chlef|Constantine|Djelfa|El Bayadh|El Oued|El Tarf|Ghardaia|Guelma|Illizi|Jijel|Khenchela|Laghouat|M'Sila|Mascara|Medea|Mila|Mostaganem|Naama|Oran|Ouargla|Oum el Bouaghi|Relizane|Saida|Setif|Sidi Bel Abbes|Skikda|Souk Ahras|Tamanghasset|Tebessa|Tiaret|Tindouf|Tipaza|Tissemsilt|Tizi Ouzou|Tlemcen";\r
-aStates[4]="|Eastern|Manu'a|Rose Island|Swains Island|Western";\r
-aStates[5]="|Andorra la Vella|Bengo|Benguela|Bie|Cabinda|Canillo|Cuando Cubango|Cuanza Norte|Cuanza Sul|Cunene|Encamp|Escaldes-Engordany|Huambo|Huila|La Massana|Luanda|Lunda Norte|Lunda Sul|Malanje|Moxico|Namibe|Ordino|Sant Julia de Loria|Uige|Zaire";\r
-aStates[6]="|Anguilla";\r
-aStates[7]="|Antartica";\r
-aStates[8]="|Barbuda|Redonda|Saint George|Saint John|Saint Mary|Saint Paul|Saint Peter|Saint Philip";\r
-aStates[9]="|Antartica e Islas del Atlantico Sur|Buenos Aires|Buenos Aires Capital Federal|Catamarca|Chaco|Chubut|Cordoba|Corrientes|Entre Rios|Formosa|Jujuy|La Pampa|La Rioja|Mendoza|Misiones|Neuquen|Rio Negro|Salta|San Juan|San Luis|Santa Cruz|Santa Fe|Santiago del Estero|Tierra del Fuego|Tucuman";\r
-aStates[10]="|Aragatsotn|Ararat|Armavir|Geghark'unik'|Kotayk'|Lorri|Shirak|Syunik'|Tavush|Vayots' Dzor|Yerevan";\r
-aStates[11]="|Aruba";\r
-aStates[12]="|Ashmore and Cartier Island";\r
-aStates[13]="|Australian Capital Territory|New South Wales|Northern Territory|Queensland|South Australia|Tasmania|Victoria|Western Australia";\r
-aStates[14]="|Burgenland|Kaernten|Niederoesterreich|Oberoesterreich|Salzburg|Steiermark|Tirol|Vorarlberg|Wien";\r
-aStates[15]="|Abseron Rayonu|Agcabadi Rayonu|Agdam Rayonu|Agdas Rayonu|Agstafa Rayonu|Agsu Rayonu|Ali Bayramli Sahari|Astara Rayonu|Baki Sahari|Balakan Rayonu|Barda Rayonu|Beylaqan Rayonu|Bilasuvar Rayonu|Cabrayil Rayonu|Calilabad Rayonu|Daskasan Rayonu|Davaci Rayonu|Fuzuli Rayonu|Gadabay Rayonu|Ganca Sahari|Goranboy Rayonu|Goycay Rayonu|Haciqabul Rayonu|Imisli Rayonu|Ismayilli Rayonu|Kalbacar Rayonu|Kurdamir Rayonu|Lacin Rayonu|Lankaran Rayonu|Lankaran Sahari|Lerik Rayonu|Masalli Rayonu|Mingacevir Sahari|Naftalan Sahari|Naxcivan Muxtar Respublikasi|Neftcala Rayonu|Oguz Rayonu|Qabala Rayonu|Qax Rayonu|Qazax Rayonu|Qobustan Rayonu|Quba Rayonu|Qubadli Rayonu|Qusar Rayonu|Saatli Rayonu|Sabirabad Rayonu|Saki Rayonu|Saki Sahari|Salyan Rayonu|Samaxi Rayonu|Samkir Rayonu|Samux Rayonu|Siyazan Rayonu|Sumqayit Sahari|Susa Rayonu|Susa Sahari|Tartar Rayonu|Tovuz Rayonu|Ucar Rayonu|Xacmaz Rayonu|Xankandi Sahari|Xanlar Rayonu|Xizi Rayonu|Xocali Rayonu|Xocavand Rayonu|Yardimli Rayonu|Yevlax Rayonu|Yevlax Sahari|Zangilan Rayonu|Zaqatala Rayonu|Zardab Rayonu";\r
-aStates[16]="|Acklins and Crooked Islands|Bimini|Cat Island|Exuma|Freeport|Fresh Creek|Governor's Harbour|Green Turtle Cay|Harbour Island|High Rock|Inagua|Kemps Bay|Long Island|Marsh Harbour|Mayaguana|New Providence|Nicholls Town and Berry Islands|Ragged Island|Rock Sound|San Salvador and Rum Cay|Sandy Point";\r
-aStates[17]="|Al Hadd|Al Manamah|Al Mintaqah al Gharbiyah|Al Mintaqah al Wusta|Al Mintaqah ash Shamaliyah|Al Muharraq|Ar Rifa' wa al Mintaqah al Janubiyah|Jidd Hafs|Juzur Hawar|Madinat 'Isa|Madinat Hamad|Sitrah";\r
-aStates[18]="|Barisal|Chittagong|Dhaka|Khulna|Rajshahi|Sylhet";\r
-aStates[19]="|Bridgetown|Christ Church|Saint Andrew|Saint George|Saint James|Saint John|Saint Joseph|Saint Lucy|Saint Michael|Saint Peter|Saint Philip|Saint Thomas";\r
-aStates[20]="|Brestskaya (Brest)|Homyel'skaya (Homyel')|Horad Minsk|Hrodzyenskaya (Hrodna)|Mahilyowskaya (Mahilyow)|Minskaya|Vitsyebskaya (Vitsyebsk)";\r
-aStates[21]="|Antwerpen|Brabant Wallon|Brussels Capitol Region|Hainaut|Liege|Limburg|Luxembourg|Namur|Oost-Vlaanderen|Vlaams Brabant|West-Vlaanderen";\r
-aStates[22]="|Belize|Cayo|Corozal|Orange Walk|Stann Creek|Toledo";\r
-aStates[23]="|Alibori|Atakora|Atlantique|Borgou|Collines|Couffo|Donga|Littoral|Mono|Oueme|Plateau|Zou";\r
-aStates[24]="|Devonshire|Hamilton|Hamilton|Paget|Pembroke|Saint George|Saint Georges|Sandys|Smiths|Southampton|Warwick";\r
-aStates[25]="|Bumthang|Chhukha|Chirang|Daga|Geylegphug|Ha|Lhuntshi|Mongar|Paro|Pemagatsel|Punakha|Samchi|Samdrup Jongkhar|Shemgang|Tashigang|Thimphu|Tongsa|Wangdi Phodrang";\r
-aStates[26]="|Beni|Chuquisaca|Cochabamba|La Paz|Oruro|Pando|Potosi|Santa Cruz|Tarija";\r
-aStates[27]="|Federation of Bosnia and Herzegovina|Republika Srpska";\r
-aStates[28]="|Central|Chobe|Francistown|Gaborone|Ghanzi|Kgalagadi|Kgatleng|Kweneng|Lobatse|Ngamiland|North-East|Selebi-Pikwe|South-East|Southern";\r
-aStates[29]="|Acre|Alagoas|Amapa|Amazonas|Bahia|Ceara|Distrito Federal|Espirito Santo|Goias|Maranhao|Mato Grosso|Mato Grosso do Sul|Minas Gerais|Para|Paraiba|Parana|Pernambuco|Piaui|Rio de Janeiro|Rio Grande do Norte|Rio Grande do Sul|Rondonia|Roraima|Santa Catarina|Sao Paulo|Sergipe|Tocantins";\r
-aStates[30]="|Anegada|Jost Van Dyke|Tortola|Virgin Gorda";\r
-aStates[31]="|Belait|Brunei and Muara|Temburong|Tutong";\r
-aStates[32]="|Blagoevgrad|Burgas|Dobrich|Gabrovo|Khaskovo|Kurdzhali|Kyustendil|Lovech|Montana|Pazardzhik|Pernik|Pleven|Plovdiv|Razgrad|Ruse|Shumen|Silistra|Sliven|Smolyan|Sofiya|Sofiya-Grad|Stara Zagora|Turgovishte|Varna|Veliko Turnovo|Vidin|Vratsa|Yambol";\r
-aStates[33]="|Bale|Bam|Banwa|Bazega|Bougouriba|Boulgou|Boulkiemde|Comoe|Ganzourgou|Gnagna|Gourma|Houet|Ioba|Kadiogo|Kenedougou|Komandjari|Kompienga|Kossi|Koupelogo|Kouritenga|Kourweogo|Leraba|Loroum|Mouhoun|Nahouri|Namentenga|Naumbiel|Nayala|Oubritenga|Oudalan|Passore|Poni|Samentenga|Sanguie|Seno|Sissili|Soum|Sourou|Tapoa|Tuy|Yagha|Yatenga|Ziro|Zondomo|Zoundweogo";\r
-aStates[34]="|Ayeyarwady|Bago|Chin State|Kachin State|Kayah State|Kayin State|Magway|Mandalay|Mon State|Rakhine State|Sagaing|Shan State|Tanintharyi|Yangon";\r
-aStates[35]="|Bubanza|Bujumbura|Bururi|Cankuzo|Cibitoke|Gitega|Karuzi|Kayanza|Kirundo|Makamba|Muramvya|Muyinga|Mwaro|Ngozi|Rutana|Ruyigi";\r
-aStates[36]="|Banteay Mean Cheay|Batdambang|Kampong Cham|Kampong Chhnang|Kampong Spoe|Kampong Thum|Kampot|Kandal|Kaoh Kong|Keb|Kracheh|Mondol Kiri|Otdar Mean Cheay|Pailin|Phnum Penh|Pouthisat|Preah Seihanu (Sihanoukville)|Preah Vihear|Prey Veng|Rotanah Kiri|Siem Reab|Stoeng Treng|Svay Rieng|Takev";\r
-aStates[37]="|Adamaoua|Centre|Est|Extreme-Nord|Littoral|Nord|Nord-Ouest|Ouest|Sud|Sud-Ouest";\r
-aStates[38]="|Alberta|British Columbia|Manitoba|New Brunswick|Newfoundland|Northwest Territories|Nova Scotia|Nunavut|Ontario|Prince Edward Island|Quebec|Saskatchewan|Yukon Territory";\r
-aStates[39]="|Boa Vista|Brava|Maio|Mosteiros|Paul|Porto Novo|Praia|Ribeira Grande|Sal|Santa Catarina|Santa Cruz|Sao Domingos|Sao Filipe|Sao Nicolau|Sao Vicente|Tarrafal";\r
-aStates[40]="|Creek|Eastern|Midland|South Town|Spot Bay|Stake Bay|West End|Western";\r
-aStates[41]="|Bamingui-Bangoran|Bangui|Basse-Kotto|Gribingui|Haut-Mbomou|Haute-Kotto|Haute-Sangha|Kemo-Gribingui|Lobaye|Mbomou|Nana-Mambere|Ombella-Mpoko|Ouaka|Ouham|Ouham-Pende|Sangha|Vakaga";\r
-aStates[42]="|Batha|Biltine|Borkou-Ennedi-Tibesti|Chari-Baguirmi|Guera|Kanem|Lac|Logone Occidental|Logone Oriental|Mayo-Kebbi|Moyen-Chari|Ouaddai|Salamat|Tandjile";\r
-aStates[43]="|Aisen del General Carlos Ibanez del Campo|Antofagasta|Araucania|Atacama|Bio-Bio|Coquimbo|Libertador General Bernardo O'Higgins|Los Lagos|Magallanes y de la Antartica Chilena|Maule|Region Metropolitana (Santiago)|Tarapaca|Valparaiso";\r
-aStates[44]="|Anhui|Beijing|Chongqing|Fujian|Gansu|Guangdong|Guangxi|Guizhou|Hainan|Hebei|Heilongjiang|Henan|Hubei|Hunan|Jiangsu|Jiangxi|Jilin|Liaoning|Nei Mongol|Ningxia|Qinghai|Shaanxi|Shandong|Shanghai|Shanxi|Sichuan|Tianjin|Xinjiang|Xizang (Tibet)|Yunnan|Zhejiang";\r
-aStates[45]="|Christmas Island";\r
-aStates[46]="|Clipperton Island";\r
-aStates[47]="|Direction Island|Home Island|Horsburgh Island|North Keeling Island|South Island|West Island";\r
-aStates[48]="|Amazonas|Antioquia|Arauca|Atlantico|Bolivar|Boyaca|Caldas|Caqueta|Casanare|Cauca|Cesar|Choco|Cordoba|Cundinamarca|Distrito Capital de Santa Fe de Bogota|Guainia|Guaviare|Huila|La Guajira|Magdalena|Meta|Narino|Norte de Santander|Putumayo|Quindio|Risaralda|San Andres y Providencia|Santander|Sucre|Tolima|Valle del Cauca|Vaupes|Vichada";\r
-// <!-- -->\r
-aStates[49]="|Anjouan (Nzwani)|Domoni|Fomboni|Grande Comore (Njazidja)|Moheli (Mwali)|Moroni|Moutsamoudou";\r
-aStates[50]="|Bandundu|Bas-Congo|Equateur|Kasai-Occidental|Kasai-Oriental|Katanga|Kinshasa|Maniema|Nord-Kivu|Orientale|Sud-Kivu";\r
-aStates[51]="|Bouenza|Brazzaville|Cuvette|Kouilou|Lekoumou|Likouala|Niari|Plateaux|Pool|Sangha";\r
-aStates[52]="|Aitutaki|Atiu|Avarua|Mangaia|Manihiki|Manuae|Mauke|Mitiaro|Nassau Island|Palmerston|Penrhyn|Pukapuka|Rakahanga|Rarotonga|Suwarrow|Takutea";\r
-aStates[53]="|Alajuela|Cartago|Guanacaste|Heredia|Limon|Puntarenas|San Jose";\r
-aStates[54]="|Abengourou|Abidjan|Aboisso|Adiake'|Adzope|Agboville|Agnibilekrou|Ale'pe'|Bangolo|Beoumi|Biankouma|Bocanda|Bondoukou|Bongouanou|Bouafle|Bouake|Bouna|Boundiali|Dabakala|Dabon|Daloa|Danane|Daoukro|Dimbokro|Divo|Duekoue|Ferkessedougou|Gagnoa|Grand Bassam|Grand-Lahou|Guiglo|Issia|Jacqueville|Katiola|Korhogo|Lakota|Man|Mankono|Mbahiakro|Odienne|Oume|Sakassou|San-Pedro|Sassandra|Seguela|Sinfra|Soubre|Tabou|Tanda|Tiassale|Tiebissou|Tingrela|Touba|Toulepleu|Toumodi|Vavoua|Yamoussoukro|Zuenoula";\r
-aStates[55]="|Bjelovarsko-Bilogorska Zupanija|Brodsko-Posavska Zupanija|Dubrovacko-Neretvanska Zupanija|Istarska Zupanija|Karlovacka Zupanija|Koprivnicko-Krizevacka Zupanija|Krapinsko-Zagorska Zupanija|Licko-Senjska Zupanija|Medimurska Zupanija|Osjecko-Baranjska Zupanija|Pozesko-Slavonska Zupanija|Primorsko-Goranska Zupanija|Sibensko-Kninska Zupanija|Sisacko-Moslavacka Zupanija|Splitsko-Dalmatinska Zupanija|Varazdinska Zupanija|Viroviticko-Podravska Zupanija|Vukovarsko-Srijemska Zupanija|Zadarska Zupanija|Zagreb|Zagrebacka Zupanija";\r
-aStates[56]="|Camaguey|Ciego de Avila|Cienfuegos|Ciudad de La Habana|Granma|Guantanamo|Holguin|Isla de la Juventud|La Habana|Las Tunas|Matanzas|Pinar del Rio|Sancti Spiritus|Santiago de Cuba|Villa Clara";\r
-aStates[57]="|Famagusta|Kyrenia|Larnaca|Limassol|Nicosia|Paphos";\r
-aStates[58]="|Brnensky|Budejovicky|Jihlavsky|Karlovarsky|Kralovehradecky|Liberecky|Olomoucky|Ostravsky|Pardubicky|Plzensky|Praha|Stredocesky|Ustecky|Zlinsky";\r
-aStates[59]="|Arhus|Bornholm|Fredericksberg|Frederiksborg|Fyn|Kobenhavn|Kobenhavns|Nordjylland|Ribe|Ringkobing|Roskilde|Sonderjylland|Storstrom|Vejle|Vestsjalland|Viborg";\r
-aStates[60]="|'Ali Sabih|Dikhil|Djibouti|Obock|Tadjoura";\r
-aStates[61]="|Saint Andrew|Saint David|Saint George|Saint John|Saint Joseph|Saint Luke|Saint Mark|Saint Patrick|Saint Paul|Saint Peter";\r
-aStates[62]="|Azua|Baoruco|Barahona|Dajabon|Distrito Nacional|Duarte|El Seibo|Elias Pina|Espaillat|Hato Mayor|Independencia|La Altagracia|La Romana|La Vega|Maria Trinidad Sanchez|Monsenor Nouel|Monte Cristi|Monte Plata|Pedernales|Peravia|Puerto Plata|Salcedo|Samana|San Cristobal|San Juan|San Pedro de Macoris|Sanchez Ramirez|Santiago|Santiago Rodriguez|Valverde";\r
-// <!-- -->\r
-aStates[63]="|Azuay|Bolivar|Canar|Carchi|Chimborazo|Cotopaxi|El Oro|Esmeraldas|Galapagos|Guayas|Imbabura|Loja|Los Rios|Manabi|Morona-Santiago|Napo|Orellana|Pastaza|Pichincha|Sucumbios|Tungurahua|Zamora-Chinchipe";\r
-aStates[64]="|Ad Daqahliyah|Al Bahr al Ahmar|Al Buhayrah|Al Fayyum|Al Gharbiyah|Al Iskandariyah|Al Isma'iliyah|Al Jizah|Al Minufiyah|Al Minya|Al Qahirah|Al Qalyubiyah|Al Wadi al Jadid|As Suways|Ash Sharqiyah|Aswan|Asyut|Bani Suwayf|Bur Sa'id|Dumyat|Janub Sina'|Kafr ash Shaykh|Matruh|Qina|Shamal Sina'|Suhaj";\r
-aStates[65]="|Ahuachapan|Cabanas|Chalatenango|Cuscatlan|La Libertad|La Paz|La Union|Morazan|San Miguel|San Salvador|San Vicente|Santa Ana|Sonsonate|Usulutan";\r
-aStates[66]="|Annobon|Bioko Norte|Bioko Sur|Centro Sur|Kie-Ntem|Litoral|Wele-Nzas";\r
-aStates[67]="|Akale Guzay|Barka|Denkel|Hamasen|Sahil|Semhar|Senhit|Seraye";\r
-aStates[68]="|Harjumaa (Tallinn)|Hiiumaa (Kardla)|Ida-Virumaa (Johvi)|Jarvamaa (Paide)|Jogevamaa (Jogeva)|Laane-Virumaa (Rakvere)|Laanemaa (Haapsalu)|Parnumaa (Parnu)|Polvamaa (Polva)|Raplamaa (Rapla)|Saaremaa (Kuessaare)|Tartumaa (Tartu)|Valgamaa (Valga)|Viljandimaa (Viljandi)|Vorumaa (Voru)"\r
-aStates[69]="|Adis Abeba (Addis Ababa)|Afar|Amara|Dire Dawa|Gambela Hizboch|Hareri Hizb|Oromiya|Sumale|Tigray|YeDebub Biheroch Bihereseboch na Hizboch";\r
-aStates[70]="|Europa Island";\r
-aStates[71]="|Falkland Islands (Islas Malvinas)"\r
-aStates[72]="|Bordoy|Eysturoy|Mykines|Sandoy|Skuvoy|Streymoy|Suduroy|Tvoroyri|Vagar";\r
-aStates[73]="|Central|Eastern|Northern|Rotuma|Western";\r
-aStates[74]="|Aland|Etela-Suomen Laani|Ita-Suomen Laani|Lansi-Suomen Laani|Lappi|Oulun Laani";\r
-aStates[75]="|Alsace|Aquitaine|Auvergne|Basse-Normandie|Bourgogne|Bretagne|Centre|Champagne-Ardenne|Corse|Franche-Comte|Haute-Normandie|Ile-de-France|Languedoc-Roussillon|Limousin|Lorraine|Midi-Pyrenees|Nord-Pas-de-Calais|Pays de la Loire|Picardie|Poitou-Charentes|Provence-Alpes-Cote d'Azur|Rhone-Alpes";\r
-aStates[76]="|French Guiana";\r
-aStates[77]="|Archipel des Marquises|Archipel des Tuamotu|Archipel des Tubuai|Iles du Vent|Iles Sous-le-Vent";\r
-aStates[78]="|Adelie Land|Ile Crozet|Iles Kerguelen|Iles Saint-Paul et Amsterdam";\r
-aStates[79]="|Estuaire|Haut-Ogooue|Moyen-Ogooue|Ngounie|Nyanga|Ogooue-Ivindo|Ogooue-Lolo|Ogooue-Maritime|Woleu-Ntem";\r
-aStates[80]="|Banjul|Central River|Lower River|North Bank|Upper River|Western";\r
-aStates[81]="|Gaza Strip";\r
-aStates[82]="|Abashis|Abkhazia or Ap'khazet'is Avtonomiuri Respublika (Sokhumi)|Adigenis|Ajaria or Acharis Avtonomiuri Respublika (Bat'umi)|Akhalgoris|Akhalk'alak'is|Akhalts'ikhis|Akhmetis|Ambrolauris|Aspindzis|Baghdat'is|Bolnisis|Borjomis|Ch'khorotsqus|Ch'okhatauris|Chiat'ura|Dedop'listsqaros|Dmanisis|Dushet'is|Gardabanis|Gori|Goris|Gurjaanis|Javis|K'arelis|K'ut'aisi|Kaspis|Kharagaulis|Khashuris|Khobis|Khonis|Lagodekhis|Lanch'khut'is|Lentekhis|Marneulis|Martvilis|Mestiis|Mts'khet'is|Ninotsmindis|Onis|Ozurget'is|P'ot'i|Qazbegis|Qvarlis|Rust'avi|Sach'kheris|Sagarejos|Samtrediis|Senakis|Sighnaghis|T'bilisi|T'elavis|T'erjolis|T'et'ritsqaros|T'ianet'is|Tqibuli|Ts'ageris|Tsalenjikhis|Tsalkis|Tsqaltubo|Vanis|Zestap'onis|Zugdidi|Zugdidis";\r
-aStates[83]="|Baden-Wuerttemberg|Bayern|Berlin|Brandenburg|Bremen|Hamburg|Hessen|Mecklenburg-Vorpommern|Niedersachsen|Nordrhein-Westfalen|Rheinland-Pfalz|Saarland|Sachsen|Sachsen-Anhalt|Schleswig-Holstein|Thueringen";\r
-aStates[84]="|Ashanti|Brong-Ahafo|Central|Eastern|Greater Accra|Northern|Upper East|Upper West|Volta|Western";\r
-aStates[85]="|Gibraltar";\r
-aStates[86]="|Ile du Lys|Ile Glorieuse";\r
-aStates[87]="|Aitolia kai Akarnania|Akhaia|Argolis|Arkadhia|Arta|Attiki|Ayion Oros (Mt. Athos)|Dhodhekanisos|Drama|Evritania|Evros|Evvoia|Florina|Fokis|Fthiotis|Grevena|Ilia|Imathia|Ioannina|Irakleion|Kardhitsa|Kastoria|Kavala|Kefallinia|Kerkyra|Khalkidhiki|Khania|Khios|Kikladhes|Kilkis|Korinthia|Kozani|Lakonia|Larisa|Lasithi|Lesvos|Levkas|Magnisia|Messinia|Pella|Pieria|Preveza|Rethimni|Rodhopi|Samos|Serrai|Thesprotia|Thessaloniki|Trikala|Voiotia|Xanthi|Zakinthos";\r
-aStates[88]="|Avannaa (Nordgronland)|Kitaa (Vestgronland)|Tunu (Ostgronland)"\r
-aStates[89]="|Carriacou and Petit Martinique|Saint Andrew|Saint David|Saint George|Saint John|Saint Mark|Saint Patrick";\r
-aStates[90]="|Basse-Terre|Grande-Terre|Iles de la Petite Terre|Iles des Saintes|Marie-Galante";\r
-aStates[91]="|Guam";\r
-aStates[92]="|Alta Verapaz|Baja Verapaz|Chimaltenango|Chiquimula|El Progreso|Escuintla|Guatemala|Huehuetenango|Izabal|Jalapa|Jutiapa|Peten|Quetzaltenango|Quiche|Retalhuleu|Sacatepequez|San Marcos|Santa Rosa|Solola|Suchitepequez|Totonicapan|Zacapa";\r
-aStates[93]="|Castel|Forest|St. Andrew|St. Martin|St. Peter Port|St. Pierre du Bois|St. Sampson|St. Saviour|Torteval|Vale";\r
-aStates[94]="|Beyla|Boffa|Boke|Conakry|Coyah|Dabola|Dalaba|Dinguiraye|Dubreka|Faranah|Forecariah|Fria|Gaoual|Gueckedou|Kankan|Kerouane|Kindia|Kissidougou|Koubia|Koundara|Kouroussa|Labe|Lelouma|Lola|Macenta|Mali|Mamou|Mandiana|Nzerekore|Pita|Siguiri|Telimele|Tougue|Yomou";\r
-aStates[95]="|Bafata|Biombo|Bissau|Bolama-Bijagos|Cacheu|Gabu|Oio|Quinara|Tombali";\r
-aStates[96]="|Barima-Waini|Cuyuni-Mazaruni|Demerara-Mahaica|East Berbice-Corentyne|Essequibo Islands-West Demerara|Mahaica-Berbice|Pomeroon-Supenaam|Potaro-Siparuni|Upper Demerara-Berbice|Upper Takutu-Upper Essequibo";\r
-aStates[97]="|Artibonite|Centre|Grand'Anse|Nord|Nord-Est|Nord-Ouest|Ouest|Sud|Sud-Est";\r
-aStates[98]="|Heard Island and McDonald Islands";\r
-aStates[99]="|Holy See (Vatican City)"\r
-aStates[100]="|Atlantida|Choluteca|Colon|Comayagua|Copan|Cortes|El Paraiso|Francisco Morazan|Gracias a Dios|Intibuca|Islas de la Bahia|La Paz|Lempira|Ocotepeque|Olancho|Santa Barbara|Valle|Yoro";\r
-aStates[101]="|Hong Kong";\r
-aStates[102]="|Howland Island";\r
-aStates[103]="|Bacs-Kiskun|Baranya|Bekes|Bekescsaba|Borsod-Abauj-Zemplen|Budapest|Csongrad|Debrecen|Dunaujvaros|Eger|Fejer|Gyor|Gyor-Moson-Sopron|Hajdu-Bihar|Heves|Hodmezovasarhely|Jasz-Nagykun-Szolnok|Kaposvar|Kecskemet|Komarom-Esztergom|Miskolc|Nagykanizsa|Nograd|Nyiregyhaza|Pecs|Pest|Somogy|Sopron|Szabolcs-Szatmar-Bereg|Szeged|Szekesfehervar|Szolnok|Szombathely|Tatabanya|Tolna|Vas|Veszprem|Veszprem|Zala|Zalaegerszeg";\r
-aStates[104]="|Akranes|Akureyri|Arnessysla|Austur-Bardhastrandarsysla|Austur-Hunavatnssysla|Austur-Skaftafellssysla|Borgarfjardharsysla|Dalasysla|Eyjafjardharsysla|Gullbringusysla|Hafnarfjordhur|Husavik|Isafjordhur|Keflavik|Kjosarsysla|Kopavogur|Myrasysla|Neskaupstadhur|Nordhur-Isafjardharsysla|Nordhur-Mulasys-la|Nordhur-Thingeyjarsysla|Olafsfjordhur|Rangarvallasysla|Reykjavik|Saudharkrokur|Seydhisfjordhur|Siglufjordhur|Skagafjardharsysla|Snaefellsnes-og Hnappadalssysla|Strandasysla|Sudhur-Mulasysla|Sudhur-Thingeyjarsysla|Vesttmannaeyjar|Vestur-Bardhastrandarsysla|Vestur-Hunavatnssysla|Vestur-Isafjardharsysla|Vestur-Skaftafellssysla";\r
-aStates[105]="|Andaman and Nicobar Islands|Andhra Pradesh|Arunachal Pradesh|Assam|Bihar|Chandigarh|Chhattisgarh|Dadra and Nagar Haveli|Daman and Diu|Delhi|Goa|Gujarat|Haryana|Himachal Pradesh|Jammu and Kashmir|Jharkhand|Karnataka|Kerala|Lakshadweep|Madhya Pradesh|Maharashtra|Manipur|Meghalaya|Mizoram|Nagaland|Orissa|Pondicherry|Punjab|Rajasthan|Sikkim|Tamil Nadu|Tripura|Uttar Pradesh|Uttaranchal|West Bengal";\r
-aStates[106]="|Aceh|Bali|Banten|Bengkulu|East Timor|Gorontalo|Irian Jaya|Jakarta Raya|Jambi|Jawa Barat|Jawa Tengah|Jawa Timur|Kalimantan Barat|Kalimantan Selatan|Kalimantan Tengah|Kalimantan Timur|Kepulauan Bangka Belitung|Lampung|Maluku|Maluku Utara|Nusa Tenggara Barat|Nusa Tenggara Timur|Riau|Sulawesi Selatan|Sulawesi Tengah|Sulawesi Tenggara|Sulawesi Utara|Sumatera Barat|Sumatera Selatan|Sumatera Utara|Yogyakarta";\r
-aStates[107]="|Ardabil|Azarbayjan-e Gharbi|Azarbayjan-e Sharqi|Bushehr|Chahar Mahall va Bakhtiari|Esfahan|Fars|Gilan|Golestan|Hamadan|Hormozgan|Ilam|Kerman|Kermanshah|Khorasan|Khuzestan|Kohgiluyeh va Buyer Ahmad|Kordestan|Lorestan|Markazi|Mazandaran|Qazvin|Qom|Semnan|Sistan va Baluchestan|Tehran|Yazd|Zanjan";\r
-aStates[108]="|Al Anbar|Al Basrah|Al Muthanna|Al Qadisiyah|An Najaf|Arbil|As Sulaymaniyah|At Ta'mim|Babil|Baghdad|Dahuk|Dhi Qar|Diyala|Karbala'|Maysan|Ninawa|Salah ad Din|Wasit";\r
-aStates[109]="|Carlow|Cavan|Clare|Cork|Donegal|Dublin|Galway|Kerry|Kildare|Kilkenny|Laois|Leitrim|Limerick|Longford|Louth|Mayo|Meath|Monaghan|Offaly|Roscommon|Sligo|Tipperary|Waterford|Westmeath|Wexford|Wicklow";\r
-aStates[110]="|Antrim|Ards|Armagh|Ballymena|Ballymoney|Banbridge|Belfast|Carrickfergus|Castlereagh|Coleraine|Cookstown|Craigavon|Derry|Down|Dungannon|Fermanagh|Larne|Limavady|Lisburn|Magherafelt|Moyle|Newry and Mourne|Newtownabbey|North Down|Omagh|Strabane";\r
-aStates[111]="|Central|Haifa|Jerusalem|Northern|Southern|Tel Aviv";\r
-aStates[112]="|Abruzzi|Basilicata|Calabria|Campania|Emilia-Romagna|Friuli-Venezia Giulia|Lazio|Liguria|Lombardia|Marche|Molise|Piemonte|Puglia|Sardegna|Sicilia|Toscana|Trentino-Alto Adige|Umbria|Valle d'Aosta|Veneto";\r
-aStates[113]="|Clarendon|Hanover|Kingston|Manchester|Portland|Saint Andrew|Saint Ann|Saint Catherine|Saint Elizabeth|Saint James|Saint Mary|Saint Thomas|Trelawny|Westmoreland";\r
-aStates[114]="|Jan Mayen";\r
-aStates[115]="|Aichi|Akita|Aomori|Chiba|Ehime|Fukui|Fukuoka|Fukushima|Gifu|Gumma|Hiroshima|Hokkaido|Hyogo|Ibaraki|Ishikawa|Iwate|Kagawa|Kagoshima|Kanagawa|Kochi|Kumamoto|Kyoto|Mie|Miyagi|Miyazaki|Nagano|Nagasaki|Nara|Niigata|Oita|Okayama|Okinawa|Osaka|Saga|Saitama|Shiga|Shimane|Shizuoka|Tochigi|Tokushima|Tokyo|Tottori|Toyama|Wakayama|Yamagata|Yamaguchi|Yamanashi";\r
-aStates[116]="|Jarvis Island";\r
-aStates[117]="|Jersey";\r
-aStates[118]="|Johnston Atoll";\r
-aStates[119]="|'Amman|Ajlun|Al 'Aqabah|Al Balqa'|Al Karak|Al Mafraq|At Tafilah|Az Zarqa'|Irbid|Jarash|Ma'an|Madaba";\r
-aStates[120]="|Juan de Nova Island";\r
-aStates[121]="|Almaty|Aqmola|Aqtobe|Astana|Atyrau|Batys Qazaqstan|Bayqongyr|Mangghystau|Ongtustik Qazaqstan|Pavlodar|Qaraghandy|Qostanay|Qyzylorda|Shyghys Qazaqstan|Soltustik Qazaqstan|Zhambyl";\r
-aStates[122]="|Central|Coast|Eastern|Nairobi Area|North Eastern|Nyanza|Rift Valley|Western";\r
-aStates[123]="|Abaiang|Abemama|Aranuka|Arorae|Banaba|Banaba|Beru|Butaritari|Central Gilberts|Gilbert Islands|Kanton|Kiritimati|Kuria|Line Islands|Line Islands|Maiana|Makin|Marakei|Nikunau|Nonouti|Northern Gilberts|Onotoa|Phoenix Islands|Southern Gilberts|Tabiteuea|Tabuaeran|Tamana|Tarawa|Tarawa|Teraina";\r
-aStates[124]="|Chagang-do (Chagang Province)|Hamgyong-bukto (North Hamgyong Province)|Hamgyong-namdo (South Hamgyong Province)|Hwanghae-bukto (North Hwanghae Province)|Hwanghae-namdo (South Hwanghae Province)|Kaesong-si (Kaesong City)|Kangwon-do (Kangwon Province)|Namp'o-si (Namp'o City)|P'yongan-bukto (North P'yongan Province)|P'yongan-namdo (South P'yongan Province)|P'yongyang-si (P'yongyang City)|Yanggang-do (Yanggang Province)"\r
-aStates[125]="|Ch'ungch'ong-bukto|Ch'ungch'ong-namdo|Cheju-do|Cholla-bukto|Cholla-namdo|Inch'on-gwangyoksi|Kangwon-do|Kwangju-gwangyoksi|Kyonggi-do|Kyongsang-bukto|Kyongsang-namdo|Pusan-gwangyoksi|Soul-t'ukpyolsi|Taegu-gwangyoksi|Taejon-gwangyoksi|Ulsan-gwangyoksi";\r
-aStates[126]="|Al 'Asimah|Al Ahmadi|Al Farwaniyah|Al Jahra'|Hawalli";\r
-aStates[127]="|Batken Oblasty|Bishkek Shaary|Chuy Oblasty (Bishkek)|Jalal-Abad Oblasty|Naryn Oblasty|Osh Oblasty|Talas Oblasty|Ysyk-Kol Oblasty (Karakol)"\r
-aStates[128]="|Attapu|Bokeo|Bolikhamxai|Champasak|Houaphan|Khammouan|Louangnamtha|Louangphabang|Oudomxai|Phongsali|Salavan|Savannakhet|Viangchan|Viangchan|Xaignabouli|Xaisomboun|Xekong|Xiangkhoang";\r
-aStates[129]="|Aizkraukles Rajons|Aluksnes Rajons|Balvu Rajons|Bauskas Rajons|Cesu Rajons|Daugavpils|Daugavpils Rajons|Dobeles Rajons|Gulbenes Rajons|Jekabpils Rajons|Jelgava|Jelgavas Rajons|Jurmala|Kraslavas Rajons|Kuldigas Rajons|Leipaja|Liepajas Rajons|Limbazu Rajons|Ludzas Rajons|Madonas Rajons|Ogres Rajons|Preilu Rajons|Rezekne|Rezeknes Rajons|Riga|Rigas Rajons|Saldus Rajons|Talsu Rajons|Tukuma Rajons|Valkas Rajons|Valmieras Rajons|Ventspils|Ventspils Rajons";\r
-aStates[130]="|Beyrouth|Ech Chimal|Ej Jnoub|El Bekaa|Jabal Loubnane";\r
-aStates[131]="|Berea|Butha-Buthe|Leribe|Mafeteng|Maseru|Mohales Hoek|Mokhotlong|Qacha's Nek|Quthing|Thaba-Tseka";\r
-aStates[132]="|Bomi|Bong|Grand Bassa|Grand Cape Mount|Grand Gedeh|Grand Kru|Lofa|Margibi|Maryland|Montserrado|Nimba|River Cess|Sinoe";\r
-aStates[133]="|Ajdabiya|Al 'Aziziyah|Al Fatih|Al Jabal al Akhdar|Al Jufrah|Al Khums|Al Kufrah|An Nuqat al Khams|Ash Shati'|Awbari|Az Zawiyah|Banghazi|Darnah|Ghadamis|Gharyan|Misratah|Murzuq|Sabha|Sawfajjin|Surt|Tarabulus|Tarhunah|Tubruq|Yafran|Zlitan";\r
-aStates[134]="|Balzers|Eschen|Gamprin|Mauren|Planken|Ruggell|Schaan|Schellenberg|Triesen|Triesenberg|Vaduz";\r
-aStates[135]="|Akmenes Rajonas|Alytaus Rajonas|Alytus|Anyksciu Rajonas|Birstonas|Birzu Rajonas|Druskininkai|Ignalinos Rajonas|Jonavos Rajonas|Joniskio Rajonas|Jurbarko Rajonas|Kaisiadoriu Rajonas|Kaunas|Kauno Rajonas|Kedainiu Rajonas|Kelmes Rajonas|Klaipeda|Klaipedos Rajonas|Kretingos Rajonas|Kupiskio Rajonas|Lazdiju Rajonas|Marijampole|Marijampoles Rajonas|Mazeikiu Rajonas|Moletu Rajonas|Neringa Pakruojo Rajonas|Palanga|Panevezio Rajonas|Panevezys|Pasvalio Rajonas|Plunges Rajonas|Prienu Rajonas|Radviliskio Rajonas|Raseiniu Rajonas|Rokiskio Rajonas|Sakiu Rajonas|Salcininku Rajonas|Siauliai|Siauliu Rajonas|Silales Rajonas|Silutes Rajonas|Sirvintu Rajonas|Skuodo Rajonas|Svencioniu Rajonas|Taurages Rajonas|Telsiu Rajonas|Traku Rajonas|Ukmerges Rajonas|Utenos Rajonas|Varenos Rajonas|Vilkaviskio Rajonas|Vilniaus Rajonas|Vilnius|Zarasu Rajonas";\r
-aStates[136]="|Diekirch|Grevenmacher|Luxembourg";\r
-aStates[137]="|Macau";\r
-aStates[138]="|Aracinovo|Bac|Belcista|Berovo|Bistrica|Bitola|Blatec|Bogdanci|Bogomila|Bogovinje|Bosilovo|Brvenica|Cair (Skopje)|Capari|Caska|Cegrane|Centar (Skopje)|Centar Zupa|Cesinovo|Cucer-Sandevo|Debar|Delcevo|Delogozdi|Demir Hisar|Demir Kapija|Dobrusevo|Dolna Banjica|Dolneni|Dorce Petrov (Skopje)|Drugovo|Dzepciste|Gazi Baba (Skopje)|Gevgelija|Gostivar|Gradsko|Ilinden|Izvor|Jegunovce|Kamenjane|Karbinci|Karpos (Skopje)|Kavadarci|Kicevo|Kisela Voda (Skopje)|Klecevce|Kocani|Konce|Kondovo|Konopiste|Kosel|Kratovo|Kriva Palanka|Krivogastani|Krusevo|Kuklis|Kukurecani|Kumanovo|Labunista|Lipkovo|Lozovo|Lukovo|Makedonska Kamenica|Makedonski Brod|Mavrovi Anovi|Meseista|Miravci|Mogila|Murtino|Negotino|Negotino-Poloska|Novaci|Novo Selo|Oblesevo|Ohrid|Orasac|Orizari|Oslomej|Pehcevo|Petrovec|Plasnia|Podares|Prilep|Probistip|Radovis|Rankovce|Resen|Rosoman|Rostusa|Samokov|Saraj|Sipkovica|Sopiste|Sopotnika|Srbinovo|Star Dojran|Staravina|Staro Nagoricane|Stip|Struga|Strumica|Studenicani|Suto Orizari (Skopje)|Sveti Nikole|Tearce|Tetovo|Topolcani|Valandovo|Vasilevo|Veles|Velesta|Vevcani|Vinica|Vitoliste|Vranestica|Vrapciste|Vratnica|Vrutok|Zajas|Zelenikovo|Zileno|Zitose|Zletovo|Zrnovci";\r
-aStates[139]="|Antananarivo|Antsiranana|Fianarantsoa|Mahajanga|Toamasina|Toliara";\r
-aStates[140]="|Balaka|Blantyre|Chikwawa|Chiradzulu|Chitipa|Dedza|Dowa|Karonga|Kasungu|Likoma|Lilongwe|Machinga (Kasupe)|Mangochi|Mchinji|Mulanje|Mwanza|Mzimba|Nkhata Bay|Nkhotakota|Nsanje|Ntcheu|Ntchisi|Phalombe|Rumphi|Salima|Thyolo|Zomba";\r
-aStates[141]="|Johor|Kedah|Kelantan|Labuan|Melaka|Negeri Sembilan|Pahang|Perak|Perlis|Pulau Pinang|Sabah|Sarawak|Selangor|Terengganu|Wilayah Persekutuan";\r
-aStates[142]="|Alifu|Baa|Dhaalu|Faafu|Gaafu Alifu|Gaafu Dhaalu|Gnaviyani|Haa Alifu|Haa Dhaalu|Kaafu|Laamu|Lhaviyani|Maale|Meemu|Noonu|Raa|Seenu|Shaviyani|Thaa|Vaavu";\r
-aStates[143]="|Gao|Kayes|Kidal|Koulikoro|Mopti|Segou|Sikasso|Tombouctou";\r
-aStates[144]="|Valletta";\r
-aStates[145]="|Man, Isle of";\r
-aStates[146]="|Ailinginae|Ailinglaplap|Ailuk|Arno|Aur|Bikar|Bikini|Bokak|Ebon|Enewetak|Erikub|Jabat|Jaluit|Jemo|Kili|Kwajalein|Lae|Lib|Likiep|Majuro|Maloelap|Mejit|Mili|Namorik|Namu|Rongelap|Rongrik|Toke|Ujae|Ujelang|Utirik|Wotho|Wotje";\r
-aStates[147]="|Martinique";\r
-aStates[148]="|Adrar|Assaba|Brakna|Dakhlet Nouadhibou|Gorgol|Guidimaka|Hodh Ech Chargui|Hodh El Gharbi|Inchiri|Nouakchott|Tagant|Tiris Zemmour|Trarza";\r
-aStates[149]="|Agalega Islands|Black River|Cargados Carajos Shoals|Flacq|Grand Port|Moka|Pamplemousses|Plaines Wilhems|Port Louis|Riviere du Rempart|Rodrigues|Savanne";\r
-aStates[150]="|Mayotte";\r
-aStates[151]="|Aguascalientes|Baja California|Baja California Sur|Campeche|Chiapas|Chihuahua|Coahuila de Zaragoza|Colima|Distrito Federal|Durango|Guanajuato|Guerrero|Hidalgo|Jalisco|Mexico|Michoacan de Ocampo|Morelos|Nayarit|Nuevo Leon|Oaxaca|Puebla|Queretaro de Arteaga|Quintana Roo|San Luis Potosi|Sinaloa|Sonora|Tabasco|Tamaulipas|Tlaxcala|Veracruz-Llave|Yucatan|Zacatecas";\r
-aStates[152]="|Chuuk (Truk)|Kosrae|Pohnpei|Yap";\r
-aStates[153]="|Midway Islands";\r
-aStates[154]="|Balti|Cahul|Chisinau|Chisinau|Dubasari|Edinet|Gagauzia|Lapusna|Orhei|Soroca|Tighina|Ungheni";\r
-aStates[155]="|Fontvieille|La Condamine|Monaco-Ville|Monte-Carlo";\r
-aStates[156]="|Arhangay|Bayan-Olgiy|Bayanhongor|Bulgan|Darhan|Dornod|Dornogovi|Dundgovi|Dzavhan|Erdenet|Govi-Altay|Hentiy|Hovd|Hovsgol|Omnogovi|Ovorhangay|Selenge|Suhbaatar|Tov|Ulaanbaatar|Uvs";\r
-aStates[157]="|Saint Anthony|Saint Georges|Saint Peter's";\r
-aStates[158]="|Agadir|Al Hoceima|Azilal|Ben Slimane|Beni Mellal|Boulemane|Casablanca|Chaouen|El Jadida|El Kelaa des Srarhna|Er Rachidia|Essaouira|Fes|Figuig|Guelmim|Ifrane|Kenitra|Khemisset|Khenifra|Khouribga|Laayoune|Larache|Marrakech|Meknes|Nador|Ouarzazate|Oujda|Rabat-Sale|Safi|Settat|Sidi Kacem|Tan-Tan|Tanger|Taounate|Taroudannt|Tata|Taza|Tetouan|Tiznit";\r
-aStates[159]="|Cabo Delgado|Gaza|Inhambane|Manica|Maputo|Nampula|Niassa|Sofala|Tete|Zambezia";\r
-aStates[160]="|Caprivi|Erongo|Hardap|Karas|Khomas|Kunene|Ohangwena|Okavango|Omaheke|Omusati|Oshana|Oshikoto|Otjozondjupa";\r
-aStates[161]="|Aiwo|Anabar|Anetan|Anibare|Baiti|Boe|Buada|Denigomodu|Ewa|Ijuw|Meneng|Nibok|Uaboe|Yaren";\r
-aStates[162]="|Bagmati|Bheri|Dhawalagiri|Gandaki|Janakpur|Karnali|Kosi|Lumbini|Mahakali|Mechi|Narayani|Rapti|Sagarmatha|Seti";\r
-aStates[163]="|Drenthe|Flevoland|Friesland|Gelderland|Groningen|Limburg|Noord-Brabant|Noord-Holland|Overijssel|Utrecht|Zeeland|Zuid-Holland";\r
-aStates[164]="|Netherlands Antilles";\r
-aStates[165]="|Iles Loyaute|Nord|Sud";\r
-aStates[166]="|Akaroa|Amuri|Ashburton|Bay of Islands|Bruce|Buller|Chatham Islands|Cheviot|Clifton|Clutha|Cook|Dannevirke|Egmont|Eketahuna|Ellesmere|Eltham|Eyre|Featherston|Franklin|Golden Bay|Great Barrier Island|Grey|Hauraki Plains|Hawera|Hawke's Bay|Heathcote|Hikurangi|Hobson|Hokianga|Horowhenua|Hurunui|Hutt|Inangahua|Inglewood|Kaikoura|Kairanga|Kiwitea|Lake|Mackenzie|Malvern|Manaia|Manawatu|Mangonui|Maniototo|Marlborough|Masterton|Matamata|Mount Herbert|Ohinemuri|Opotiki|Oroua|Otamatea|Otorohanga|Oxford|Pahiatua|Paparua|Patea|Piako|Pohangina|Raglan|Rangiora|Rangitikei|Rodney|Rotorua|Runanga|Saint Kilda|Silverpeaks|Southland|Stewart Island|Stratford|Strathallan|Taranaki|Taumarunui|Taupo|Tauranga|Thames-Coromandel|Tuapeka|Vincent|Waiapu|Waiheke|Waihemo|Waikato|Waikohu|Waimairi|Waimarino|Waimate|Waimate West|Waimea|Waipa|Waipawa|Waipukurau|Wairarapa South|Wairewa|Wairoa|Waitaki|Waitomo|Waitotara|Wallace|Wanganui|Waverley|Westland|Whakatane|Whangarei|Whangaroa|Woodville";\r
-aStates[167]="|Atlantico Norte|Atlantico Sur|Boaco|Carazo|Chinandega|Chontales|Esteli|Granada|Jinotega|Leon|Madriz|Managua|Masaya|Matagalpa|Nueva Segovia|Rio San Juan|Rivas";\r
-aStates[168]="|Agadez|Diffa|Dosso|Maradi|Niamey|Tahoua|Tillaberi|Zinder";\r
-aStates[169]="|Abia|Abuja Federal Capital Territory|Adamawa|Akwa Ibom|Anambra|Bauchi|Bayelsa|Benue|Borno|Cross River|Delta|Ebonyi|Edo|Ekiti|Enugu|Gombe|Imo|Jigawa|Kaduna|Kano|Katsina|Kebbi|Kogi|Kwara|Lagos|Nassarawa|Niger|Ogun|Ondo|Osun|Oyo|Plateau|Rivers|Sokoto|Taraba|Yobe|Zamfara";\r
-aStates[170]="|Niue";\r
-aStates[171]="|Norfolk Island";\r
-aStates[172]="|Northern Islands|Rota|Saipan|Tinian";\r
-aStates[173]="|Akershus|Aust-Agder|Buskerud|Finnmark|Hedmark|Hordaland|More og Romsdal|Nord-Trondelag|Nordland|Oppland|Oslo|Ostfold|Rogaland|Sogn og Fjordane|Sor-Trondelag|Telemark|Troms|Vest-Agder|Vestfold";\r
-aStates[174]="|Ad Dakhiliyah|Al Batinah|Al Wusta|Ash Sharqiyah|Az Zahirah|Masqat|Musandam|Zufar";\r
-aStates[175]="|Balochistan|Federally Administered Tribal Areas|Islamabad Capital Territory|North-West Frontier Province|Punjab|Sindh";\r
-aStates[176]="|Aimeliik|Airai|Angaur|Hatobohei|Kayangel|Koror|Melekeok|Ngaraard|Ngarchelong|Ngardmau|Ngatpang|Ngchesar|Ngeremlengui|Ngiwal|Palau Island|Peleliu|Sonsoral|Tobi";\r
-aStates[177]="|Bocas del Toro|Chiriqui|Cocle|Colon|Darien|Herrera|Los Santos|Panama|San Blas|Veraguas";\r
-aStates[178]="|Bougainville|Central|Chimbu|East New Britain|East Sepik|Eastern Highlands|Enga|Gulf|Madang|Manus|Milne Bay|Morobe|National Capital|New Ireland|Northern|Sandaun|Southern Highlands|West New Britain|Western|Western Highlands";\r
-aStates[179]="|Alto Paraguay|Alto Parana|Amambay|Asuncion (city)|Boqueron|Caaguazu|Caazapa|Canindeyu|Central|Concepcion|Cordillera|Guaira|Itapua|Misiones|Neembucu|Paraguari|Presidente Hayes|San Pedro";\r
-aStates[180]="|Amazonas|Ancash|Apurimac|Arequipa|Ayacucho|Cajamarca|Callao|Cusco|Huancavelica|Huanuco|Ica|Junin|La Libertad|Lambayeque|Lima|Loreto|Madre de Dios|Moquegua|Pasco|Piura|Puno|San Martin|Tacna|Tumbes|Ucayali";\r
-aStates[181]="|Abra|Agusan del Norte|Agusan del Sur|Aklan|Albay|Angeles|Antique|Aurora|Bacolod|Bago|Baguio|Bais|Basilan|Basilan City|Bataan|Batanes|Batangas|Batangas City|Benguet|Bohol|Bukidnon|Bulacan|Butuan|Cabanatuan|Cadiz|Cagayan|Cagayan de Oro|Calbayog|Caloocan|Camarines Norte|Camarines Sur|Camiguin|Canlaon|Capiz|Catanduanes|Cavite|Cavite City|Cebu|Cebu City|Cotabato|Dagupan|Danao|Dapitan|Davao City Davao|Davao del Sur|Davao Oriental|Dipolog|Dumaguete|Eastern Samar|General Santos|Gingoog|Ifugao|Iligan|Ilocos Norte|Ilocos Sur|Iloilo|Iloilo City|Iriga|Isabela|Kalinga-Apayao|La Carlota|La Union|Laguna|Lanao del Norte|Lanao del Sur|Laoag|Lapu-Lapu|Legaspi|Leyte|Lipa|Lucena|Maguindanao|Mandaue|Manila|Marawi|Marinduque|Masbate|Mindoro Occidental|Mindoro Oriental|Misamis Occidental|Misamis Oriental|Mountain|Naga|Negros Occidental|Negros Oriental|North Cotabato|Northern Samar|Nueva Ecija|Nueva Vizcaya|Olongapo|Ormoc|Oroquieta|Ozamis|Pagadian|Palawan|Palayan|Pampanga|Pangasinan|Pasay|Puerto Princesa|Quezon|Quezon City|Quirino|Rizal|Romblon|Roxas|Samar|San Carlos (in Negros Occidental)|San Carlos (in Pangasinan)|San Jose|San Pablo|Silay|Siquijor|Sorsogon|South Cotabato|Southern Leyte|Sultan Kudarat|Sulu|Surigao|Surigao del Norte|Surigao del Sur|Tacloban|Tagaytay|Tagbilaran|Tangub|Tarlac|Tawitawi|Toledo|Trece Martires|Zambales|Zamboanga|Zamboanga del Norte|Zamboanga del Sur";\r
-aStates[182]="|Pitcaim Islands";\r
-aStates[183]="|Dolnoslaskie|Kujawsko-Pomorskie|Lodzkie|Lubelskie|Lubuskie|Malopolskie|Mazowieckie|Opolskie|Podkarpackie|Podlaskie|Pomorskie|Slaskie|Swietokrzyskie|Warminsko-Mazurskie|Wielkopolskie|Zachodniopomorskie";\r
-aStates[184]="|Acores (Azores)|Aveiro|Beja|Braga|Braganca|Castelo Branco|Coimbra|Evora|Faro|Guarda|Leiria|Lisboa|Madeira|Portalegre|Porto|Santarem|Setubal|Viana do Castelo|Vila Real|Viseu";\r
-aStates[185]="|Adjuntas|Aguada|Aguadilla|Aguas Buenas|Aibonito|Anasco|Arecibo|Arroyo|Barceloneta|Barranquitas|Bayamon|Cabo Rojo|Caguas|Camuy|Canovanas|Carolina|Catano|Cayey|Ceiba|Ciales|Cidra|Coamo|Comerio|Corozal|Culebra|Dorado|Fajardo|Florida|Guanica|Guayama|Guayanilla|Guaynabo|Gurabo|Hatillo|Hormigueros|Humacao|Isabela|Jayuya|Juana Diaz|Juncos|Lajas|Lares|Las Marias|Las Piedras|Loiza|Luquillo|Manati|Maricao|Maunabo|Mayaguez|Moca|Morovis|Naguabo|Naranjito|Orocovis|Patillas|Penuelas|Ponce|Quebradillas|Rincon|Rio Grande|Sabana Grande|Salinas|San German|San Juan|San Lorenzo|San Sebastian|Santa Isabel|Toa Alta|Toa Baja|Trujillo Alto|Utuado|Vega Alta|Vega Baja|Vieques|Villalba|Yabucoa|Yauco";\r
-aStates[186]="|Ad Dawhah|Al Ghuwayriyah|Al Jumayliyah|Al Khawr|Al Wakrah|Ar Rayyan|Jarayan al Batinah|Madinat ash Shamal|Umm Salal";\r
-aStates[187]="|Reunion";\r
-aStates[188]="|Alba|Arad|Arges|Bacau|Bihor|Bistrita-Nasaud|Botosani|Braila|Brasov|Bucuresti|Buzau|Calarasi|Caras-Severin|Cluj|Constanta|Covasna|Dimbovita|Dolj|Galati|Giurgiu|Gorj|Harghita|Hunedoara|Ialomita|Iasi|Maramures|Mehedinti|Mures|Neamt|Olt|Prahova|Salaj|Satu Mare|Sibiu|Suceava|Teleorman|Timis|Tulcea|Vaslui|Vilcea|Vrancea";\r
-aStates[189]="|Adygeya (Maykop)|Aginskiy Buryatskiy (Aginskoye)|Altay (Gorno-Altaysk)|Altayskiy (Barnaul)|Amurskaya (Blagoveshchensk)|Arkhangel'skaya|Astrakhanskaya|Bashkortostan (Ufa)|Belgorodskaya|Bryanskaya|Buryatiya (Ulan-Ude)|Chechnya (Groznyy)|Chelyabinskaya|Chitinskaya|Chukotskiy (Anadyr')|Chuvashiya (Cheboksary)|Dagestan (Makhachkala)|Evenkiyskiy (Tura)|Ingushetiya (Nazran')|Irkutskaya|Ivanovskaya|Kabardino-Balkariya (Nal'chik)|Kaliningradskaya|Kalmykiya (Elista)|Kaluzhskaya|Kamchatskaya (Petropavlovsk-Kamchatskiy)|Karachayevo-Cherkesiya (Cherkessk)|Kareliya (Petrozavodsk)|Kemerovskaya|Khabarovskiy|Khakasiya (Abakan)|Khanty-Mansiyskiy (Khanty-Mansiysk)|Kirovskaya|Komi (Syktyvkar)|Komi-Permyatskiy (Kudymkar)|Koryakskiy (Palana)|Kostromskaya|Krasnodarskiy|Krasnoyarskiy|Kurganskaya|Kurskaya|Leningradskaya|Lipetskaya|Magadanskaya|Mariy-El (Yoshkar-Ola)|Mordoviya (Saransk)|Moskovskaya|Moskva (Moscow)|Murmanskaya|Nenetskiy (Nar'yan-Mar)|Nizhegorodskaya|Novgorodskaya|Novosibirskaya|Omskaya|Orenburgskaya|Orlovskaya (Orel)|Penzenskaya|Permskaya|Primorskiy (Vladivostok)|Pskovskaya|Rostovskaya|Ryazanskaya|Sakha (Yakutsk)|Sakhalinskaya (Yuzhno-Sakhalinsk)|Samarskaya|Sankt-Peterburg (Saint Petersburg)|Saratovskaya|Severnaya Osetiya-Alaniya [North Ossetia] (Vladikavkaz)|Smolenskaya|Stavropol'skiy|Sverdlovskaya (Yekaterinburg)|Tambovskaya|Tatarstan (Kazan')|Taymyrskiy (Dudinka)|Tomskaya|Tul'skaya|Tverskaya|Tyumenskaya|Tyva (Kyzyl)|Udmurtiya (Izhevsk)|Ul'yanovskaya|Ust'-Ordynskiy Buryatskiy (Ust'-Ordynskiy)|Vladimirskaya|Volgogradskaya|Vologodskaya|Voronezhskaya|Yamalo-Nenetskiy (Salekhard)|Yaroslavskaya|Yevreyskaya";\r
-aStates[190]="|Butare|Byumba|Cyangugu|Gikongoro|Gisenyi|Gitarama|Kibungo|Kibuye|Kigali Rurale|Kigali-ville|Ruhengeri|Umutara";\r
-aStates[191]="|Ascension|Saint Helena|Tristan da Cunha";\r
-aStates[192]="|Christ Church Nichola Town|Saint Anne Sandy Point|Saint George Basseterre|Saint George Gingerland|Saint James Windward|Saint John Capisterre|Saint John Figtree|Saint Mary Cayon|Saint Paul Capisterre|Saint Paul Charlestown|Saint Peter Basseterre|Saint Thomas Lowland|Saint Thomas Middle Island|Trinity Palmetto Point";\r
-aStates[193]="|Anse-la-Raye|Castries|Choiseul|Dauphin|Dennery|Gros Islet|Laborie|Micoud|Praslin|Soufriere|Vieux Fort";\r
-aStates[194]="|Miquelon|Saint Pierre";\r
-aStates[195]="|Charlotte|Grenadines|Saint Andrew|Saint David|Saint George|Saint Patrick";\r
-aStates[196]="|A'ana|Aiga-i-le-Tai|Atua|Fa'asaleleaga|Gaga'emauga|Gagaifomauga|Palauli|Satupa'itea|Tuamasaga|Va'a-o-Fonoti|Vaisigano";\r
-aStates[197]="|Acquaviva|Borgo Maggiore|Chiesanuova|Domagnano|Faetano|Fiorentino|Monte Giardino|San Marino|Serravalle";\r
-aStates[198]="|Principe|Sao Tome";\r
-aStates[199]="|'Asir|Al Bahah|Al Hudud ash Shamaliyah|Al Jawf|Al Madinah|Al Qasim|Ar Riyad|Ash Sharqiyah (Eastern Province)|Ha'il|Jizan|Makkah|Najran|Tabuk";\r
-aStates[200]="|Aberdeen City|Aberdeenshire|Angus|Argyll and Bute|City of Edinburgh|Clackmannanshire|Dumfries and Galloway|Dundee City|East Ayrshire|East Dunbartonshire|East Lothian|East Renfrewshire|Eilean Siar (Western Isles)|Falkirk|Fife|Glasgow City|Highland|Inverclyde|Midlothian|Moray|North Ayrshire|North Lanarkshire|Orkney Islands|Perth and Kinross|Renfrewshire|Shetland Islands|South Ayrshire|South Lanarkshire|Stirling|The Scottish Borders|West Dunbartonshire|West Lothian";\r
-aStates[201]="|Dakar|Diourbel|Fatick|Kaolack|Kolda|Louga|Saint-Louis|Tambacounda|Thies|Ziguinchor";\r
-aStates[202]="|Anse aux Pins|Anse Boileau|Anse Etoile|Anse Louis|Anse Royale|Baie Lazare|Baie Sainte Anne|Beau Vallon|Bel Air|Bel Ombre|Cascade|Glacis|Grand' Anse (on Mahe)|Grand' Anse (on Praslin)|La Digue|La Riviere Anglaise|Mont Buxton|Mont Fleuri|Plaisance|Pointe La Rue|Port Glaud|Saint Louis|Takamaka";\r
-aStates[203]="|Eastern|Northern|Southern|Western";\r
-aStates[204]="|Singapore";\r
-aStates[205]="|Banskobystricky|Bratislavsky|Kosicky|Nitriansky|Presovsky|Trenciansky|Trnavsky|Zilinsky";\r
-aStates[206]="|Ajdovscina|Beltinci|Bled|Bohinj|Borovnica|Bovec|Brda|Brezice|Brezovica|Cankova-Tisina|Celje|Cerklje na Gorenjskem|Cerknica|Cerkno|Crensovci|Crna na Koroskem|Crnomelj|Destrnik-Trnovska Vas|Divaca|Dobrepolje|Dobrova-Horjul-Polhov Gradec|Dol pri Ljubljani|Domzale|Dornava|Dravograd|Duplek|Gorenja Vas-Poljane|Gorisnica|Gornja Radgona|Gornji Grad|Gornji Petrovci|Grosuplje|Hodos Salovci|Hrastnik|Hrpelje-Kozina|Idrija|Ig|Ilirska Bistrica|Ivancna Gorica|Izola|Jesenice|Jursinci|Kamnik|Kanal|Kidricevo|Kobarid|Kobilje|Kocevje|Komen|Koper|Kozje|Kranj|Kranjska Gora|Krsko|Kungota|Kuzma|Lasko|Lenart|Lendava|Litija|Ljubljana|Ljubno|Ljutomer|Logatec|Loska Dolina|Loski Potok|Luce|Lukovica|Majsperk|Maribor|Medvode|Menges|Metlika|Mezica|Miren-Kostanjevica|Mislinja|Moravce|Moravske Toplice|Mozirje|Murska Sobota|Muta|Naklo|Nazarje|Nova Gorica|Novo Mesto|Odranci|Ormoz|Osilnica|Pesnica|Piran|Pivka|Podcetrtek|Podvelka-Ribnica|Postojna|Preddvor|Ptuj|Puconci|Race-Fram|Radece|Radenci|Radlje ob Dravi|Radovljica|Ravne-Prevalje|Ribnica|Rogasevci|Rogaska Slatina|Rogatec|Ruse|Semic|Sencur|Sentilj|Sentjernej|Sentjur pri Celju|Sevnica|Sezana|Skocjan|Skofja Loka|Skofljica|Slovenj Gradec|Slovenska Bistrica|Slovenske Konjice|Smarje pri Jelsah|Smartno ob Paki|Sostanj|Starse|Store|Sveti Jurij|Tolmin|Trbovlje|Trebnje|Trzic|Turnisce|Velenje|Velike Lasce|Videm|Vipava|Vitanje|Vodice|Vojnik|Vrhnika|Vuzenica|Zagorje ob Savi|Zalec|Zavrc|Zelezniki|Ziri|Zrece";\r
-aStates[207]="|Bellona|Central|Choiseul (Lauru)|Guadalcanal|Honiara|Isabel|Makira|Malaita|Rennell|Temotu|Western";\r
-aStates[208]="|Awdal|Bakool|Banaadir|Bari|Bay|Galguduud|Gedo|Hiiraan|Jubbada Dhexe|Jubbada Hoose|Mudug|Nugaal|Sanaag|Shabeellaha Dhexe|Shabeellaha Hoose|Sool|Togdheer|Woqooyi Galbeed";\r
-aStates[209]="|Eastern Cape|Free State|Gauteng|KwaZulu-Natal|Mpumalanga|North-West|Northern Cape|Northern Province|Western Cape";\r
-aStates[210]="|Bird Island|Bristol Island|Clerke Rocks|Montagu Island|Saunders Island|South Georgia|Southern Thule|Traversay Islands";\r
-aStates[211]="|Andalucia|Aragon|Asturias|Baleares (Balearic Islands)|Canarias (Canary Islands)|Cantabria|Castilla y Leon|Castilla-La Mancha|Cataluna|Ceuta|Communidad Valencian|Extremadura|Galicia|Islas Chafarinas|La Rioja|Madrid|Melilla|Murcia|Navarra|Pais Vasco (Basque Country)|Penon de Alhucemas|Penon de Velez de la Gomera";\r
-aStates[212]="|Spratly Islands";\r
-aStates[213]="|Central|Eastern|North Central|North Eastern|North Western|Northern|Sabaragamuwa|Southern|Uva|Western";\r
-aStates[214]="|A'ali an Nil|Al Bahr al Ahmar|Al Buhayrat|Al Jazirah|Al Khartum|Al Qadarif|Al Wahdah|An Nil al Abyad|An Nil al Azraq|Ash Shamaliyah|Bahr al Jabal|Gharb al Istiwa'iyah|Gharb Bahr al Ghazal|Gharb Darfur|Gharb Kurdufan|Janub Darfur|Janub Kurdufan|Junqali|Kassala|Nahr an Nil|Shamal Bahr al Ghazal|Shamal Darfur|Shamal Kurdufan|Sharq al Istiwa'iyah|Sinnar|Warab";\r
-aStates[215]="|Brokopondo|Commewijne|Coronie|Marowijne|Nickerie|Para|Paramaribo|Saramacca|Sipaliwini|Wanica";\r
-aStates[216]="|Barentsoya|Bjornoya|Edgeoya|Hopen|Kvitoya|Nordaustandet|Prins Karls Forland|Spitsbergen";\r
-aStates[217]="|Hhohho|Lubombo|Manzini|Shiselweni";\r
-aStates[218]="|Blekinge|Dalarnas|Gavleborgs|Gotlands|Hallands|Jamtlands|Jonkopings|Kalmar|Kronobergs|Norrbottens|Orebro|Ostergotlands|Skane|Sodermanlands|Stockholms|Uppsala|Varmlands|Vasterbottens|Vasternorrlands|Vastmanlands|Vastra Gotalands";\r
-aStates[219]="|Aargau|Ausser-Rhoden|Basel-Landschaft|Basel-Stadt|Bern|Fribourg|Geneve|Glarus|Graubunden|Inner-Rhoden|Jura|Luzern|Neuchatel|Nidwalden|Obwalden|Sankt Gallen|Schaffhausen|Schwyz|Solothurn|Thurgau|Ticino|Uri|Valais|Vaud|Zug|Zurich";\r
-aStates[220]="|Al Hasakah|Al Ladhiqiyah|Al Qunaytirah|Ar Raqqah|As Suwayda'|Dar'a|Dayr az Zawr|Dimashq|Halab|Hamah|Hims|Idlib|Rif Dimashq|Tartus";\r
-aStates[221]="|Chang-hua|Chi-lung|Chia-i|Chia-i|Chung-hsing-hsin-ts'un|Hsin-chu|Hsin-chu|Hua-lien|I-lan|Kao-hsiung|Kao-hsiung|Miao-li|Nan-t'ou|P'eng-hu|P'ing-tung|T'ai-chung|T'ai-chung|T'ai-nan|T'ai-nan|T'ai-pei|T'ai-pei|T'ai-tung|T'ao-yuan|Yun-lin";\r
-aStates[222]="|Viloyati Khatlon|Viloyati Leninobod|Viloyati Mukhtori Kuhistoni Badakhshon";\r
-aStates[223]="|Arusha|Dar es Salaam|Dodoma|Iringa|Kagera|Kigoma|Kilimanjaro|Lindi|Mara|Mbeya|Morogoro|Mtwara|Mwanza|Pemba North|Pemba South|Pwani|Rukwa|Ruvuma|Shinyanga|Singida|Tabora|Tanga|Zanzibar Central/South|Zanzibar North|Zanzibar Urban/West";\r
-aStates[224]="|Amnat Charoen|Ang Thong|Buriram|Chachoengsao|Chai Nat|Chaiyaphum|Chanthaburi|Chiang Mai|Chiang Rai|Chon Buri|Chumphon|Kalasin|Kamphaeng Phet|Kanchanaburi|Khon Kaen|Krabi|Krung Thep Mahanakhon (Bangkok)|Lampang|Lamphun|Loei|Lop Buri|Mae Hong Son|Maha Sarakham|Mukdahan|Nakhon Nayok|Nakhon Pathom|Nakhon Phanom|Nakhon Ratchasima|Nakhon Sawan|Nakhon Si Thammarat|Nan|Narathiwat|Nong Bua Lamphu|Nong Khai|Nonthaburi|Pathum Thani|Pattani|Phangnga|Phatthalung|Phayao|Phetchabun|Phetchaburi|Phichit|Phitsanulok|Phra Nakhon Si Ayutthaya|Phrae|Phuket|Prachin Buri|Prachuap Khiri Khan|Ranong|Ratchaburi|Rayong|Roi Et|Sa Kaeo|Sakon Nakhon|Samut Prakan|Samut Sakhon|Samut Songkhram|Sara Buri|Satun|Sing Buri|Sisaket|Songkhla|Sukhothai|Suphan Buri|Surat Thani|Surin|Tak|Trang|Trat|Ubon Ratchathani|Udon Thani|Uthai Thani|Uttaradit|Yala|Yasothon";\r
-aStates[225]="|Tobago";\r
-aStates[226]="|De La Kara|Des Plateaux|Des Savanes|Du Centre|Maritime";\r
-aStates[227]="|Atafu|Fakaofo|Nukunonu";\r
-aStates[228]="|Ha'apai|Tongatapu|Vava'u";\r
-aStates[229]="|Arima|Caroni|Mayaro|Nariva|Port-of-Spain|Saint Andrew|Saint David|Saint George|Saint Patrick|San Fernando|Victoria";\r
-aStates[230]="|Ariana|Beja|Ben Arous|Bizerte|El Kef|Gabes|Gafsa|Jendouba|Kairouan|Kasserine|Kebili|Mahdia|Medenine|Monastir|Nabeul|Sfax|Sidi Bou Zid|Siliana|Sousse|Tataouine|Tozeur|Tunis|Zaghouan";\r
-aStates[231]="|Adana|Adiyaman|Afyon|Agri|Aksaray|Amasya|Ankara|Antalya|Ardahan|Artvin|Aydin|Balikesir|Bartin|Batman|Bayburt|Bilecik|Bingol|Bitlis|Bolu|Burdur|Bursa|Canakkale|Cankiri|Corum|Denizli|Diyarbakir|Duzce|Edirne|Elazig|Erzincan|Erzurum|Eskisehir|Gaziantep|Giresun|Gumushane|Hakkari|Hatay|Icel|Igdir|Isparta|Istanbul|Izmir|Kahramanmaras|Karabuk|Karaman|Kars|Kastamonu|Kayseri|Kilis|Kirikkale|Kirklareli|Kirsehir|Kocaeli|Konya|Kutahya|Malatya|Manisa|Mardin|Mugla|Mus|Nevsehir|Nigde|Ordu|Osmaniye|Rize|Sakarya|Samsun|Sanliurfa|Siirt|Sinop|Sirnak|Sivas|Tekirdag|Tokat|Trabzon|Tunceli|Usak|Van|Yalova|Yozgat|Zonguldak";\r
-aStates[232]="|Ahal Welayaty|Balkan Welayaty|Dashhowuz Welayaty|Lebap Welayaty|Mary Welayaty";\r
-aStates[233]="|Tuvalu";\r
-aStates[234]="|Adjumani|Apac|Arua|Bugiri|Bundibugyo|Bushenyi|Busia|Gulu|Hoima|Iganga|Jinja|Kabale|Kabarole|Kalangala|Kampala|Kamuli|Kapchorwa|Kasese|Katakwi|Kibale|Kiboga|Kisoro|Kitgum|Kotido|Kumi|Lira|Luwero|Masaka|Masindi|Mbale|Mbarara|Moroto|Moyo|Mpigi|Mubende|Mukono|Nakasongola|Nebbi|Ntungamo|Pallisa|Rakai|Rukungiri|Sembabule|Soroti|Tororo";\r
-aStates[235]="|Avtonomna Respublika Krym (Simferopol')|Cherkas'ka (Cherkasy)|Chernihivs'ka (Chernihiv)|Chernivets'ka (Chernivtsi)|Dnipropetrovs'ka (Dnipropetrovs'k)|Donets'ka (Donets'k)|Ivano-Frankivs'ka (Ivano-Frankivs'k)|Kharkivs'ka (Kharkiv)|Khersons'ka (Kherson)|Khmel'nyts'ka (Khmel'nyts'kyy)|Kirovohrads'ka (Kirovohrad)|Kyyiv|Kyyivs'ka (Kiev)|L'vivs'ka (L'viv)|Luhans'ka (Luhans'k)|Mykolayivs'ka (Mykolayiv)|Odes'ka (Odesa)|Poltavs'ka (Poltava)|Rivnens'ka (Rivne)|Sevastopol'|Sums'ka (Sumy)|Ternopil's'ka (Ternopil')|Vinnyts'ka (Vinnytsya)|Volyns'ka (Luts'k)|Zakarpats'ka (Uzhhorod)|Zaporiz'ka (Zaporizhzhya)|Zhytomyrs'ka (Zhytomyr)"\r
-aStates[236]="|'Ajman|Abu Zaby (Abu Dhabi)|Al Fujayrah|Ash Shariqah (Sharjah)|Dubayy (Dubai)|Ra's al Khaymah|Umm al Qaywayn";\r
-aStates[237]="|Barking and Dagenham|Barnet|Barnsley|Bath and North East Somerset|Bedfordshire|Bexley|Birmingham|Blackburn with Darwen|Blackpool|Bolton|Bournemouth|Bracknell Forest|Bradford|Brent|Brighton and Hove|Bromley|Buckinghamshire|Bury|Calderdale|Cambridgeshire|Camden|Cheshire|City of Bristol|City of Kingston upon Hull|City of London|Cornwall|Coventry|Croydon|Cumbria|Darlington|Derby|Derbyshire|Devon|Doncaster|Dorset|Dudley|Durham|Ealing|East Riding of Yorkshire|East Sussex|Enfield|Essex|Gateshead|Gloucestershire|Greenwich|Hackney|Halton|Hammersmith and Fulham|Hampshire|Haringey|Harrow|Hartlepool|Havering|Herefordshire|Hertfordshire|Hillingdon|Hounslow|Isle of Wight|Islington|Kensington and Chelsea|Kent|Kingston upon Thames|Kirklees|Knowsley|Lambeth|Lancashire|Leeds|Leicester|Leicestershire|Lewisham|Lincolnshire|Liverpool|Luton|Manchester|Medway|Merton|Middlesbrough|Milton Keynes|Newcastle upon Tyne|Newham|Norfolk|North East Lincolnshire|North Lincolnshire|North Somerset|North Tyneside|North Yorkshire|Northamptonshire|Northumberland|Nottingham|Nottinghamshire|Oldham|Oxfordshire|Peterborough|Plymouth|Poole|Portsmouth|Reading|Redbridge|Redcar and Cleveland|Richmond upon Thames|Rochdale|Rotherham|Rutland|Salford|Sandwell|Sefton|Sheffield|Shropshire|Slough|Solihull|Somerset|South Gloucestershire|South Tyneside|Southampton|Southend-on-Sea|Southwark|St. Helens|Staffordshire|Stockport|Stockton-on-Tees|Stoke-on-Trent|Suffolk|Sunderland|Surrey|Sutton|Swindon|Tameside|Telford and Wrekin|Thurrock|Torbay|Tower Hamlets|Trafford|Wakefield|Walsall|Waltham Forest|Wandsworth|Warrington|Warwickshire|West Berkshire|West Sussex|Westminster|Wigan|Wiltshire|Windsor and Maidenhead|Wirral|Wokingham|Wolverhampton|Worcestershire|York";\r
-aStates[238]="|Artigas|Canelones|Cerro Largo|Colonia|Durazno|Flores|Florida|Lavalleja|Maldonado|Montevideo|Paysandu|Rio Negro|Rivera|Rocha|Salto|San Jose|Soriano|Tacuarembo|Treinta y Tres";\r
-aStates[239]="|Alabama|Alaska|Arizona|Arkansas|California|Colorado|Connecticut|Delaware|District of Columbia|Florida|Georgia|Hawaii|Idaho|Illinois|Indiana|Iowa|Kansas|Kentucky|Louisiana|Maine|Maryland|Massachusetts|Michigan|Minnesota|Mississippi|Missouri|Montana|Nebraska|Nevada|New Hampshire|New Jersey|New Mexico|New York|North Carolina|North Dakota|Ohio|Oklahoma|Oregon|Pennsylvania|Rhode Island|South Carolina|South Dakota|Tennessee|Texas|Utah|Vermont|Virginia|Washington|West Virginia|Wisconsin|Wyoming";\r
-aStates[240]="|Andijon Wiloyati|Bukhoro Wiloyati|Farghona Wiloyati|Jizzakh Wiloyati|Khorazm Wiloyati (Urganch)|Namangan Wiloyati|Nawoiy Wiloyati|Qashqadaryo Wiloyati (Qarshi)|Qoraqalpoghiston (Nukus)|Samarqand Wiloyati|Sirdaryo Wiloyati (Guliston)|Surkhondaryo Wiloyati (Termiz)|Toshkent Shahri|Toshkent Wiloyati";\r
-aStates[241]="|Malampa|Penama|Sanma|Shefa|Tafea|Torba";\r
-aStates[242]="|Amazonas|Anzoategui|Apure|Aragua|Barinas|Bolivar|Carabobo|Cojedes|Delta Amacuro|Dependencias Federales|Distrito Federal|Falcon|Guarico|Lara|Merida|Miranda|Monagas|Nueva Esparta|Portuguesa|Sucre|Tachira|Trujillo|Vargas|Yaracuy|Zulia";\r
-aStates[243]="|An Giang|Ba Ria-Vung Tau|Bac Giang|Bac Kan|Bac Lieu|Bac Ninh|Ben Tre|Binh Dinh|Binh Duong|Binh Phuoc|Binh Thuan|Ca Mau|Can Tho|Cao Bang|Da Nang|Dac Lak|Dong Nai|Dong Thap|Gia Lai|Ha Giang|Ha Nam|Ha Noi|Ha Tay|Ha Tinh|Hai Duong|Hai Phong|Ho Chi Minh|Hoa Binh|Hung Yen|Khanh Hoa|Kien Giang|Kon Tum|Lai Chau|Lam Dong|Lang Son|Lao Cai|Long An|Nam Dinh|Nghe An|Ninh Binh|Ninh Thuan|Phu Tho|Phu Yen|Quang Binh|Quang Nam|Quang Ngai|Quang Ninh|Quang Tri|Soc Trang|Son La|Tay Ninh|Thai Binh|Thai Nguyen|Thanh Hoa|Thua Thien-Hue|Tien Giang|Tra Vinh|Tuyen Quang|Vinh Long|Vinh Phuc|Yen Bai";\r
-aStates[244]="|Saint Croix|Saint John|Saint Thomas";\r
-aStates[245]="|Blaenau Gwent|Bridgend|Caerphilly|Cardiff|Carmarthenshire|Ceredigion|Conwy|Denbighshire|Flintshire|Gwynedd|Isle of Anglesey|Merthyr Tydfil|Monmouthshire|Neath Port Talbot|Newport|Pembrokeshire|Powys|Rhondda Cynon Taff|Swansea|The Vale of Glamorgan|Torfaen|Wrexham";\r
-aStates[246]="|Alo|Sigave|Wallis";\r
-aStates[247]="|West Bank";\r
-aStates[248]="|Western Sahara";\r
-aStates[249]="|'Adan|'Ataq|Abyan|Al Bayda'|Al Hudaydah|Al Jawf|Al Mahrah|Al Mahwit|Dhamar|Hadhramawt|Hajjah|Ibb|Lahij|Ma'rib|Sa'dah|San'a'|Ta'izz";\r
-aStates[250]="|Kosovo|Montenegro|Serbia|Vojvodina";\r
-aStates[251]="|Central|Copperbelt|Eastern|Luapula|Lusaka|North-Western|Northern|Southern|Western";\r
-aStates[252]="|Bulawayo|Harare|ManicalandMashonaland Central|Mashonaland East|Mashonaland West|Masvingo|Matabeleland North|Matabeleland South|Midlands";\r
-\r
-/* \r
- * gArCountryInfo\r
- * (0) Country name\r
- * (1) Name length\r
- * (2) Number of states\r
- * (3) Max state length\r
- */\r
-gLngNumberCountries = sCountryString.split("|").length;\r
-//gArCountryInfo = new Array(gLngNumberCountries);\r
-gArCountryInfo=sCountryString.split("|");\r
-/* \r
- * gArStateInfo[country][statenames][namelengths]\r
- * (0) Country\r
- * (1) States (Multi-sized Array)\r
- *    (0) name\r
- *    (1) nameLength\r
- */\r
-gArStateInfo   = new Array(gLngNumberCountries);\r
-\r
-/* \r
- * fInitgArStateInfo()\r
- * purpose: build gArStateInfo array\r
- * gArStateInfo[Country][States][1]\r
- *   (0) State name\r
- *   (1) State name length\r
- * gArStateInfo[i] is an array of state names\r
- * gArStateInfo[i][j]=state name, name length\r
- */\r
-function fInitgArStateInfo() {\r
- var i=0, j=0, sStateName="", iNumberOfStates=0;\r
- var iMaxLength=0, iLength=0;\r
- var oldNumber=0;\r
\r
- for (i=0;i<gLngNumberCountries;i++) {\r
-  // i is selected country\r
-  iNumberOfStates=aStates[i].split("|").length+1;\r
-  gLngNumberStates=gLngNumberStates+iNumberOfStates;\r
-  gArStateInfo[i]=new Array(iNumberOfStates);\r
-  iMaxLength=0;\r
-  \r
-  // Add the additional information\r
-  for (j=0;j<iNumberOfStates;j++) {\r
-   if (iLength>iMaxLength) {\r
-    iMaxLength=iLength;\r
-    gArStateInfo[i][j][0]=sStateName;\r
-   }\r
-  }\r
-  gArCountryInfo[i][3]=parseInt(iMaxLength);\r
- }\r
- Update_Globals();\r
- return;\r
-}\r
-\r
-/* \r
- * Working on this one.\r
- * Fills in region from the arrays\r
- * \r
- */\r
-function xFillState() {\r
- var i=0;\r
\r
- // reset region\r
- document.form1.region.options.length=0;\r
\r
- // get selected country\r
- gLngSelectedCountry=document.form1.country_name.selectedIndex;\r
\r
- // get number of states for selected country\r
- gLngNumberStates=gArCountryInfo[[gLngSelectedCountry][2]];\r
\r
- // update options in region\r
- for (i=0;i<gLngNumberStates;i++) {\r
-  document.form1.region.options[i]=new\r
-    Option(gArStateInfo[[gLngSelectedCountry][i][0]]);\r
- }\r
- gLngSelectedState=\r
-  document.form1.region.options.selectedIndex;\r
\r
- return;\r
-}\r
-\r
-/* \r
- * FillStates() function works.\r
- * Fills region from aStates\r
- */\r
-function Fill_States(current) {\r
-       var i=0, iLen=0, iNumStates=0;\r
\r
-       // reset region\r
-       document.form1.region.options.length=0;\r
-       // get selected country\r
-       gLngSelectedCountry=document.form1.country_name.selectedIndex;\r
-       iNumStates = aStates[gLngSelectedCountry].split("|").length;\r
\r
-       // update the text boxes\r
-\r
-       // fill the state combobox with the list of states\r
-       for (i=0;i<iNumStates;i++) {\r
-               document.form1.region.options[i]=new \r
-                       Option(aStates[document.form1.country_name.selectedIndex].split("|")[i]);\r
-\r
-               sRegionName=document.form1.region.options[i];\r
-               if(sRegionName.text == current) {\r
-                       document.form1.region.selectedIndex = i;\r
-               }\r
-\r
-       }\r
-\r
-       return;\r
-}\r
-\r
-/*\r
- * FillCountry()\r
- * gArCountryInfo matrix holds the following information:\r
- * (0) Country name\r
- * (1) Name length\r
- * (2) Number of states\r
- * (3) Max state length\r
- */\r
-function Fill_Country(current) {\r
-       var i=0;\r
-       var sCountryName="";\r
\r
-       // reset country_name.options\r
-       document.form1.country_name.options.length=0;\r
-       // get number of countries from the string\r
\r
-       // ----------------------------------------------------\r
-       // gArCountryInfo = new Array(gLngNumberCountries, 4);\r
-       // ----------------------------------------------------\r
-       for (i=0;i<gLngNumberCountries;i++) {\r
-               gArCountryInfo[i]=new Array(4);\r
-       }\r
\r
-       for (i=0;i<gLngNumberCountries;i++) {\r
-               document.form1.country_name.options[i]=new Option(sCountryString.split("|")[i]);\r
-               sCountryName=document.form1.country_name.options[i];\r
-               if(sCountryName.text == current) {\r
-                       document.form1.country_name.selectedIndex = i;\r
-               }\r
-               gArCountryInfo[i]=\r
-                       [sCountryName, \r
-                               parseInt(sCountryName.length),\r
-                               aStates,\r
-                       0];\r
-       }\r
-\r
-       fInitgArStateInfo();\r
-\r
-       return;\r
-}\r
-\r
-function Update_Globals() {\r
-       gLngSelectedCountry=parseInt(document.form1.country_name.selectedIndex);\r
-       gLngSelectedState=parseInt(document.form1.region.selectedIndex);\r
-       return;\r
-}\r
-\r
-\r
-//-->\r
index a20606db540a5313b67b7dcb67e147df74e33a62..0feb45c2474b58edbb0f27e066d7c382eaf2e992 100644 (file)
@@ -225,3 +225,71 @@ function pkcs5_unpad($text)
     if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
     return substr($text, 0, -1 * $pad);
 } 
+
+function AES256CBC_encrypt($data,$key,$iv) {
+       return mcrypt_encrypt(
+               MCRYPT_RIJNDAEL_128, 
+               str_pad($key,32,"\0"), 
+               pkcs5_pad($data,16), 
+               MCRYPT_MODE_CBC, 
+               str_pad($iv,16,"\0"));
+}
+
+function AES256CBC_decrypt($data,$key,$iv) {
+       return pkcs5_unpad(mcrypt_decrypt(
+               MCRYPT_RIJNDAEL_128, 
+               str_pad($key,32,"\0"), 
+               $data, 
+               MCRYPT_MODE_CBC, 
+               str_pad($iv,16,"\0")));
+}
+
+function aes_encapsulate($data,$pubkey) {
+       $key = random_string(32,RANDOM_STRING_TEXT);
+       $iv  = random_string(16,RANDOM_STRING_TEXT);
+       $result['data'] = base64url_encode(AES256CBC_encrypt($data,$key,$iv),true);
+       openssl_public_encrypt($key,$k,$pubkey);
+       $result['key'] = base64url_encode($k,true);
+       openssl_public_encrypt($iv,$i,$pubkey);
+       $result['iv'] = base64url_encode($i,true);
+       return $result;
+}
+
+function aes_unencapsulate($data,$prvkey) {
+       openssl_private_decrypt(base64url_decode($data['key']),$k,$prvkey);
+       openssl_private_decrypt(base64url_decode($data['iv']),$i,$prvkey);
+       return AES256CBC_decrypt(base64url_decode($data['data']),$k,$i);
+}
+
+
+// This has been superceded.
+
+function zot_encapsulate($data,$envelope,$pubkey) {
+$res = aes_encapsulate($data,$pubkey);
+
+return <<< EOT
+<?xml version='1.0' encoding='UTF-8'?>
+<zot:msg xmlns:zot='http://purl.org/zot/1.0'>
+ <zot:key>{$res['key']}</zot:key>
+ <zot:iv>{$res['iv']}</zot:iv>
+ <zot:env>$s1</zot:env>
+ <zot:sig key_id="$keyid">$sig</zot:sig>
+ <zot:alg>AES-256-CBC</zot:alg>
+ <zot:data type='application/magic-envelope+xml'>{$res['data']}</zot:data>
+</zot:msg>
+EOT;
+
+}
+
+// so has this
+
+function zot_unencapsulate($data,$prvkey) {
+       $ret = array();
+       $c = array();
+       $x = parse_xml_string($data);
+       $c = array('key' => $x->key,'iv' => $x->iv,'data' => $x->data);
+       openssl_private_decrypt(base64url_decode($x->sender),$s,$prvkey);
+       $ret['sender'] = $s;
+       $ret['data'] = aes_unencapsulate($x,$prvkey);
+       return $ret;
+}
\ No newline at end of file
diff --git a/include/delivery.php b/include/delivery.php
new file mode 100644 (file)
index 0000000..46112d7
--- /dev/null
@@ -0,0 +1,476 @@
+<?php
+require_once("boot.php");
+
+function delivery_run($argv, $argc){
+       global $a, $db;
+
+       if(is_null($a)){
+               $a = new App;
+       }
+  
+       if(is_null($db)) {
+               @include(".htconfig.php");
+               require_once("dba.php");
+               $db = new dba($db_host, $db_user, $db_pass, $db_data);
+                       unset($db_host, $db_user, $db_pass, $db_data);
+       }
+
+       require_once("session.php");
+       require_once("datetime.php");
+       require_once('include/items.php');
+       require_once('include/bbcode.php');
+       require_once('include/diaspora.php');
+
+       load_config('config');
+       load_config('system');
+
+       load_hooks();
+
+       if($argc < 3)
+               return;
+
+       $a->set_baseurl(get_config('system','url'));
+
+       logger('delivery: invoked: ' . print_r($argv,true), LOGGER_DEBUG);
+
+       $cmd        = $argv[1];
+       $item_id    = intval($argv[2]);
+       $contact_id = intval($argv[3]);
+
+       // Some other process may have delivered this item already.
+
+       $r = q("select * from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
+               dbesc($cmd),
+               dbesc($item_id),
+               dbesc($contact_id)
+       );
+       if(! count($r)) {
+               return;
+       }       
+
+       // It's ours to deliver. Remove it from the queue.
+
+       q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
+               dbesc($cmd),
+               dbesc($item_id),
+               dbesc($contact_id)
+       );
+
+       if((! $item_id) || (! $contact_id))
+               return;
+
+       $expire = false;
+       $top_level = false;
+       $recipients = array();
+       $url_recipients = array();
+
+       $normal_mode = true;
+
+       $recipients[] = $contact_id;
+
+       if($cmd === 'expire') {
+               $normal_mode = false;
+               $expire = true;
+               $items = q("SELECT * FROM `item` WHERE `uid` = %d AND `wall` = 1 
+                       AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP() - INTERVAL 30 MINUTE",
+                       intval($item_id)
+               );
+               $uid = $item_id;
+               $item_id = 0;
+               if(! count($items))
+                       return;
+       }
+       else {
+
+               // find ancestors
+               $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
+                       intval($item_id)
+               );
+
+               if((! count($r)) || (! intval($r[0]['parent']))) {
+                       return;
+               }
+
+               $target_item = $r[0];
+               $parent_id = intval($r[0]['parent']);
+               $uid = $r[0]['uid'];
+               $updated = $r[0]['edited'];
+
+               if(! $parent_id)
+                       return;
+
+
+               $items = q("SELECT `item`.*, `sign`.`signed_text`,`sign`.`signature`,`sign`.`signer` 
+                       FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d ORDER BY `id` ASC",
+                       intval($parent_id)
+               );
+
+               if(! count($items)) {
+                       return;
+               }
+
+               $icontacts = null;
+               $contacts_arr = array();
+               foreach($items as $item)
+                       if(! in_array($item['contact-id'],$contacts_arr))
+                               $contacts_arr[] = intval($item['contact-id']);
+               if(count($contacts_arr)) {
+                       $str_contacts = implode(',',$contacts_arr); 
+                       $icontacts = q("SELECT * FROM `contact` 
+                               WHERE `id` IN ( $str_contacts ) "
+                       );
+               }
+               if( ! ($icontacts && count($icontacts)))
+                       return;
+
+
+               // avoid race condition with deleting entries
+
+               if($items[0]['deleted']) {
+                       foreach($items as $item)
+                               $item['deleted'] = 1;
+               }
+
+               if((count($items) == 1) && ($items[0]['uri'] === $items[0]['parent-uri'])) {
+                       logger('delivery: top level post');
+                       $top_level = true;
+               }
+       }
+
+       $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, 
+               `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, 
+               `user`.`page-flags`, `user`.`prvnets`
+               FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` 
+               WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
+               intval($uid)
+       );
+
+       if(! count($r))
+               return;
+
+       $owner = $r[0];
+
+       $walltowall = ((($top_level) && ($owner['id'] != $items[0]['contact-id'])) ? true : false);
+
+       $public_message = true;
+
+       // fill this in with a single salmon slap if applicable
+
+       $slap = '';
+
+       require_once('include/group.php');
+
+       $parent = $items[0];
+
+               // This is IMPORTANT!!!!
+
+               // We will only send a "notify owner to relay" or followup message if the referenced post
+               // originated on our system by virtue of having our hostname somewhere
+               // in the URI, AND it was a comment (not top_level) AND the parent originated elsewhere.
+               // if $parent['wall'] == 1 we will already have the parent message in our array
+               // and we will relay the whole lot.
+               // expire sends an entire group of expire messages and cannot be forwarded.
+               // However the conversation owner will be a part of the conversation and will 
+               // be notified during this run.
+               // Other DFRN conversation members will be alerted during polled updates.
+
+               // Diaspora members currently are not notified of expirations, and other networks have
+               // either limited or no ability to process deletions. We should at least fix Diaspora 
+               // by stringing togther an array of retractions and sending them onward.
+                
+       
+       $localhost = $a->get_hostname();
+       if(strpos($localhost,':'))
+               $localhost = substr($localhost,0,strpos($localhost,':'));
+
+               /**
+                *
+                * Be VERY CAREFUL if you make any changes to the following line. Seemingly innocuous changes 
+                * have been known to cause runaway conditions which affected several servers, along with 
+                * permissions issues. 
+                *
+                */
+       if((! $top_level) && ($parent['wall'] == 0) && (! $expire) && (stristr($target_item['uri'],$localhost))) {
+               logger('relay denied for delivery agent.');
+
+               /* no relay allowed for direct contact delivery */
+               return;
+       }
+
+       if((strlen($parent['allow_cid'])) 
+               || (strlen($parent['allow_gid'])) 
+               || (strlen($parent['deny_cid'])) 
+               || (strlen($parent['deny_gid']))) {
+               $public_message = false; // private recipients, not public
+       }
+
+       $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `blocked` = 0 AND `pending` = 0",
+               intval($contact_id)
+       );
+
+       if(count($r))
+               $contact = $r[0];
+       
+       $hubxml = feed_hublinks();
+
+       logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
+
+       require_once('include/salmon.php');
+
+       if($contact['self'])
+               return;
+
+       $deliver_status = 0;
+
+       switch($contact['network']) {
+
+               case NETWORK_DFRN :
+                       logger('notifier: dfrndelivery: ' . $contact['name']);
+
+                       $feed_template = get_markup_template('atom_feed.tpl');
+                       $mail_template = get_markup_template('atom_mail.tpl');
+
+                       $atom = '';
+
+
+                       $birthday = feed_birthday($owner['uid'],$owner['timezone']);
+
+                       if(strlen($birthday))
+                               $birthday = '<dfrn:birthday>' . xmlify($birthday) . '</dfrn:birthday>';
+
+                       $atom .= replace_macros($feed_template, array(
+                                       '$version'      => xmlify(FRIENDIKA_VERSION),
+                                       '$feed_id'      => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ),
+                                       '$feed_title'   => xmlify($owner['name']),
+                                       '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) ,
+                                       '$hub'          => $hubxml,
+                                       '$salmon'       => '',  // private feed, we don't use salmon here
+                                       '$name'         => xmlify($owner['name']),
+                                       '$profile_page' => xmlify($owner['url']),
+                                       '$photo'        => xmlify($owner['photo']),
+                                       '$thumb'        => xmlify($owner['thumb']),
+                                       '$picdate'      => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) ,
+                                       '$uridate'      => xmlify(datetime_convert('UTC','UTC',$owner['uri-date']    . '+00:00' , ATOM_TIME)) ,
+                                       '$namdate'      => xmlify(datetime_convert('UTC','UTC',$owner['name-date']   . '+00:00' , ATOM_TIME)) ,
+                                       '$birthday'     => $birthday
+                       ));
+
+                       foreach($items as $item) {
+                               if(! $item['parent'])
+                                       continue;
+
+                               // private emails may be in included in public conversations. Filter them.
+                               if(($public_message) && $item['private'])
+                                       continue;
+
+                               $item_contact = get_item_contact($item,$icontacts);
+                               if(! $item_contact)
+                                       continue;
+
+                               $atom .= atom_entry($item,'text',$item_contact,$owner,true);
+
+                       }
+
+                       $atom .= '</feed>' . "\r\n";
+
+                       logger('notifier: ' . $atom, LOGGER_DATA);
+
+                       $deliver_status = dfrn_deliver($owner,$contact,$atom);
+
+                       logger('notifier: dfrn_delivery returns ' . $deliver_status);
+       
+                       if($deliver_status == (-1)) {
+                               logger('notifier: delivery failed: queuing message');
+                               // queue message for redelivery
+                               q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+                                       VALUES ( %d, '%s', '%s', '%s') ",
+                                       intval($contact['id']),
+                                       dbesc(datetime_convert()),
+                                       dbesc(datetime_convert()),
+                                       dbesc($atom)
+                               );
+                       }
+                       break;
+
+               case NETWORK_OSTATUS :
+
+                       // Do not send to otatus if we are not configured to send to public networks
+                       if($owner['prvnets'])
+                               break;
+                       if(get_config('system','ostatus_disabled') || get_config('system','dfrn_only'))
+                               break;
+
+                       // only send salmon if public - e.g. if it's ok to notify
+                       // a public hub, it's ok to send a salmon
+
+                       if(($public_message) && (! $expire)) {
+                               $slaps = array();
+
+                               foreach($items as $item) {
+                                       if(! $item['parent'])
+                                               continue;
+
+                                       // private emails may be in included in public conversations. Filter them.
+                                       if(($public_message) && $item['private'])
+                                               continue;
+
+                                       $item_contact = get_item_contact($item,$icontacts);
+                                       if(! $item_contact)
+                                               continue;
+
+                                       if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire)) 
+                                               $slaps[] = atom_entry($item,'html',$item_contact,$owner,true);
+                               }
+
+                               logger('notifier: slapdelivery: ' . $contact['name']);
+                               foreach($slaps as $slappy) {
+                                       if($contact['notify']) {
+                                               $deliver_status = slapper($owner,$contact['notify'],$slappy);
+                                               if($deliver_status == (-1)) {
+                                                       // queue message for redelivery
+                                                       q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+                                                               VALUES ( %d, '%s', '%s', '%s') ",
+                                                               intval($contact['id']),
+                                                               dbesc(datetime_convert()),
+                                                               dbesc(datetime_convert()),
+                                                               dbesc($slappy)
+                                                       );                                                              
+                                               }
+                                       }
+                               }
+                       }
+
+                       break;
+
+               case NETWORK_MAIL :
+                                               
+                       if(get_config('system','dfrn_only'))
+                               break;
+                       // WARNING: does not currently convert to RFC2047 header encodings, etc.
+
+                       $addr = $contact['addr'];
+                       if(! strlen($addr))
+                               break;
+
+                       if($cmd === 'wall-new' || $cmd === 'comment-new') {
+
+                               $it = null;
+                               if($cmd === 'wall-new') 
+                                       $it = $items[0];
+                               else {
+                                       $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", 
+                                               intval($argv[2]),
+                                               intval($uid)
+                                       );
+                                       if(count($r))
+                                               $it = $r[0];
+                               }
+                               if(! $it)
+                                       break;
+                                       
+
+                               $local_user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
+                                       intval($uid)
+                               );
+                               if(! count($local_user))
+                                       break;
+                                       
+                               $reply_to = '';
+                               $r1 = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
+                                       intval($uid)
+                               );
+                               if($r1 && $r1[0]['reply_to'])
+                                       $reply_to = $r1[0]['reply_to'];
+
+                               $subject  = (($it['title']) ? $it['title'] : t("\x28no subject\x29")) ;
+                               $headers  = 'From: ' . $local_user[0]['username'] . ' <' . $local_user[0]['email'] . '>' . "\n";
+                               if($reply_to)
+                                       $headers .= 'Reply-to: ' . $reply_to . "\n";
+                               $headers .= 'Message-id: <' . $it['uri'] . '>' . "\n";
+                               if($it['uri'] !== $it['parent-uri']) {
+                                       $header .= 'References: <' . $it['parent-uri'] . '>' . "\n";
+                                       if(! strlen($it['title'])) {
+                                               $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1",
+                                                       dbesc($it['parent-uri'])
+                                               );
+                                               if(count($r)) {
+                                                       $subtitle = $r[0]['title'];
+                                                       if($subtitle) {
+                                                               if(strncasecmp($subtitle,'RE:',3))
+                                                                       $subject = $subtitle;
+                                                               else
+                                                                       $subject = 'Re: ' . $subtitle;
+                                                       }
+                                               }
+                                       }
+                               }
+                               $headers .= 'MIME-Version: 1.0' . "\n";
+                               $headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
+                               $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n";
+                               $html    = prepare_body($it);
+                               $message = '<html><body>' . $html . '</body></html>';
+                               logger('notifier: email delivery to ' . $addr);
+                               mail($addr, $subject, $message, $headers);
+                       }
+                       break;
+
+               case NETWORK_DIASPORA :
+                       if($public_message)
+                               $loc = 'public batch ' . $contact['batch'];
+                       else 
+                               $loc = $contact['name'];
+
+                       logger('delivery: diaspora batch deliver: ' . $loc);
+
+                       if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
+                               break;
+
+                       if((! $contact['pubkey']) && (! $public_message))
+                               break;
+                                       
+                       if($target_item['verb'] === ACTIVITY_DISLIKE) {
+                               // unsupported
+                               break;
+                       }
+                       elseif(($target_item['deleted']) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
+                       logger('delivery: diaspora retract: ' . $loc);
+                               // diaspora delete, 
+                               diaspora_send_retraction($target_item,$owner,$contact,$public_message);
+                               break;
+                       }
+                       elseif($target_item['parent'] != $target_item['id']) {
+
+                       logger('delivery: diaspora relay: ' . $loc);
+
+                               // we are the relay - send comments, likes and unlikes to our conversants
+                               diaspora_send_relay($target_item,$owner,$contact,$public_message);
+                               break;
+                       }               
+                       elseif(($top_level) && (! $walltowall)) {
+                               // currently no workable solution for sending walltowall
+                               logger('delivery: diaspora status: ' . $loc);
+                               diaspora_send_status($target_item,$owner,$contact,$public_message);
+                               break;
+                       }
+
+                       logger('delivery: diaspora unknown mode: ' . $contact['name']);
+
+                       break;
+
+               case NETWORK_FEED :
+               case NETWORK_FACEBOOK :
+                       if(get_config('system','dfrn_only'))
+                               break;
+               default:
+                       break;
+       }
+
+       return;
+}
+
+if (array_search(__file__,get_included_files())===0){
+  delivery_run($argv,$argc);
+  killme();
+}
index 75d47e05aa5902ed9bf9c9d1f4c5c5fc929b1469..1ae8ca8006e3d4f3cf3551d7ac3e27c4266e1129 100644 (file)
@@ -3,35 +3,57 @@
 require_once('include/crypto.php');
 require_once('include/items.php');
 require_once('include/bb2diaspora.php');
+require_once('include/contact_selectors.php');
+
+
+function diaspora_dispatch_public($msg) {
+
+       $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) AND `account_expired` = 0 ",
+               dbesc(NETWORK_DIASPORA),
+               dbesc($msg['author'])
+       );
+       if(count($r)) {
+               foreach($r as $rr) {
+                       logger('diaspora_public: delivering to: ' . $rr['username']);
+                       diaspora_dispatch($rr,$msg);
+               }
+       }
+       else
+               logger('diaspora_public: no subscribers');
+}
+
+
 
 function diaspora_dispatch($importer,$msg) {
 
+       $ret = 0;
+
        $parsed_xml = parse_xml_string($msg['message'],false);
 
        $xmlbase = $parsed_xml->post;
 
        if($xmlbase->request) {
-               diaspora_request($importer,$xmlbase->request);
+               $ret = diaspora_request($importer,$xmlbase->request);
        }
        elseif($xmlbase->status_message) {
-               diaspora_post($importer,$xmlbase->status_message);
+               $ret = diaspora_post($importer,$xmlbase->status_message);
        }
        elseif($xmlbase->comment) {
-               diaspora_comment($importer,$xmlbase->comment,$msg);
+               $ret = diaspora_comment($importer,$xmlbase->comment,$msg);
        }
        elseif($xmlbase->like) {
-               diaspora_like($importer,$xmlbase->like,$msg);
+               $ret = diaspora_like($importer,$xmlbase->like,$msg);
        }
        elseif($xmlbase->retraction) {
-               diaspora_retraction($importer,$xmlbase->retraction,$msg);
+               $ret = diaspora_retraction($importer,$xmlbase->retraction,$msg);
        }
        elseif($xmlbase->photo) {
-               diaspora_photo($importer,$xmlbase->photo,$msg);
+               $ret = diaspora_photo($importer,$xmlbase->photo,$msg);
        }
        else {
                logger('diaspora_dispatch: unknown message type: ' . print_r($xmlbase,true));
        }
-       return;
+       return $ret;
 }
 
 function diaspora_get_contact_by_handle($uid,$handle) {
@@ -46,6 +68,7 @@ function diaspora_get_contact_by_handle($uid,$handle) {
 }
 
 function find_diaspora_person_by_handle($handle) {
+       $update = false;
        $r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1",
                dbesc(NETWORK_DIASPORA),
                dbesc($handle)
@@ -53,18 +76,14 @@ function find_diaspora_person_by_handle($handle) {
        if(count($r)) {
                // update record occasionally so it doesn't get stale
                $d = strtotime($r[0]['updated'] . ' +00:00');
-               if($d < strtotime('now - 14 days')) {
-                       q("delete from fcontact where id = %d limit 1",
-                               intval($r[0]['id'])
-                       );
-               }
-               else
+               if($d > strtotime('now - 14 days'))
                        return $r[0];
+               $update = true;
        }
        require_once('include/Scrape.php');
        $r = probe_url($handle, PROBE_DIASPORA);
        if((count($r)) && ($r['network'] === NETWORK_DIASPORA)) {
-               add_fcontact($r);
+               add_fcontact($r,$update);
                return ($r);
        }
        return false;
@@ -81,9 +100,60 @@ function get_diaspora_key($uri) {
 }
 
 
-function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) {
+function diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey) {
+       $a = get_app();
+
+       logger('diaspora_pubmsg_build: ' . $msg, LOGGER_DATA);
+
+       
+       $handle = $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+
+//     $b64_data = base64_encode($msg);
+//     $b64url_data = base64url_encode($b64_data);
+
+       $b64url_data = base64url_encode($msg);
+
+       $data = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data);
+
+       $type = 'application/xml';
+       $encoding = 'base64url';
+       $alg = 'RSA-SHA256';
+
+       $signable_data = $data  . '.' . base64url_encode($type) . '.' 
+               . base64url_encode($encoding) . '.' . base64url_encode($alg) ;
+
+       $signature = rsa_sign($signable_data,$prvkey);
+       $sig = base64url_encode($signature);
+
+$magic_env = <<< EOT
+<?xml version='1.0' encoding='UTF-8'?>
+<diaspora xmlns="https://joindiaspora.com/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env" >
+  <header>
+    <author_id>$handle</author_id>
+  </header>
+  <me:env>
+    <me:encoding>base64url</me:encoding>
+    <me:alg>RSA-SHA256</me:alg>
+    <me:data type="application/xml">$data</me:data>
+    <me:sig>$sig</me:sig>
+  </me:env>
+</diaspora>
+EOT;
+
+       logger('diaspora_pubmsg_build: magic_env: ' . $magic_env, LOGGER_DATA);
+       return $magic_env;
+
+}
+
+
+
+
+function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey,$public = false) {
        $a = get_app();
 
+       if($public)
+               return diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey);
+
        logger('diaspora_msg_build: ' . $msg, LOGGER_DATA);
 
        $inner_aes_key = random_string(32);
@@ -96,7 +166,7 @@ function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) {
        $outer_iv = random_string(16);
        $b_outer_iv = base64_encode($outer_iv);
        
-       $handle = 'acct:' . $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+       $handle = $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
 
        $padded_data = pkcs5_pad($msg,16);
        $inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv);
@@ -105,16 +175,14 @@ function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) {
 
 
        $b64url_data = base64url_encode($b64_data);
-       $b64url_stripped = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data);
-    $lines = str_split($b64url_stripped,60);
-    $data = implode("\n",$lines);
-       $data = $data . (($data[-1] != "\n") ? "\n" : '') ;
-       $type = 'application/atom+xml';
+       $data = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data);
+
+       $type = 'application/xml';
        $encoding = 'base64url';
        $alg = 'RSA-SHA256';
 
-       $signable_data = $data  . '.' . base64url_encode($type) . "\n" . '.' 
-               . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
+       $signable_data = $data  . '.' . base64url_encode($type) . '.' 
+               . base64url_encode($encoding) . '.' . base64url_encode($alg) ;
 
        $signature = rsa_sign($signable_data,$prvkey);
        $sig = base64url_encode($signature);
@@ -123,10 +191,7 @@ $decrypted_header = <<< EOT
 <decrypted_header>
   <iv>$b_inner_iv</iv>
   <aes_key>$b_inner_aes_key</aes_key>
-  <author>
-    <name>{$user['username']}</name>
-    <uri>$handle</uri>
-  </author>
+  <author_id>$handle</author_id>
 </decrypted_header>
 EOT;
 
@@ -139,10 +204,9 @@ EOT;
        $encrypted_outer_key_bundle = '';
        openssl_public_encrypt($outer_json,$encrypted_outer_key_bundle,$pubkey);
 
-       logger('outer_bundle_encrypt: ' . openssl_error_string());
        $b64_encrypted_outer_key_bundle = base64_encode($encrypted_outer_key_bundle);
 
-       logger('outer_bundle: ' . $b64_encrypted_outer_key_bundle . ' key: ' . $pubkey);
+       logger('outer_bundle: ' . $b64_encrypted_outer_key_bundle . ' key: ' . $pubkey, LOGGER_DATA);
 
        $encrypted_header_json_object = json_encode(array('aes_key' => base64_encode($encrypted_outer_key_bundle), 
                'ciphertext' => base64_encode($ciphertext)));
@@ -152,15 +216,15 @@ EOT;
 
 $magic_env = <<< EOT
 <?xml version='1.0' encoding='UTF-8'?>
-<entry xmlns='http://www.w3.org/2005/Atom'>
+<diaspora xmlns="https://joindiaspora.com/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env" >
   $encrypted_header
-  <me:env xmlns:me="http://salmon-protocol.org/ns/magic-env">
+  <me:env>
     <me:encoding>base64url</me:encoding>
     <me:alg>RSA-SHA256</me:alg>
-    <me:data type="application/atom+xml">$data</me:data>
+    <me:data type="application/xml">$data</me:data>
     <me:sig>$sig</me:sig>
   </me:env>
-</entry>
+</diaspora>
 EOT;
 
        logger('diaspora_msg_build: magic_env: ' . $magic_env, LOGGER_DATA);
@@ -185,50 +249,67 @@ EOT;
 
 function diaspora_decode($importer,$xml) {
 
+       $public = false;
        $basedom = parse_xml_string($xml);
 
-       $atom = $basedom->children(NAMESPACE_ATOM1);
+       $children = $basedom->children('https://joindiaspora.com/protocol');
 
-       // Diaspora devs: This is kind of sucky - 'encrypted_header' does not belong in the atom namespace
+       if($children->header) {
+               $public = true;
+               $author_link = str_replace('acct:','',$children->header->author_id);
+       }
+       else {
 
-       $encrypted_header = json_decode(base64_decode($atom->encrypted_header));
+               $encrypted_header = json_decode(base64_decode($children->encrypted_header));
        
-       $encrypted_aes_key_bundle = base64_decode($encrypted_header->aes_key);
-       $ciphertext = base64_decode($encrypted_header->ciphertext);
+               $encrypted_aes_key_bundle = base64_decode($encrypted_header->aes_key);
+               $ciphertext = base64_decode($encrypted_header->ciphertext);
+
+               $outer_key_bundle = '';
+               openssl_private_decrypt($encrypted_aes_key_bundle,$outer_key_bundle,$importer['prvkey']);
+
+               $j_outer_key_bundle = json_decode($outer_key_bundle);
+
+               $outer_iv = base64_decode($j_outer_key_bundle->iv);
+               $outer_key = base64_decode($j_outer_key_bundle->key);
+
+               $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $outer_key, $ciphertext, MCRYPT_MODE_CBC, $outer_iv);
 
-       $outer_key_bundle = '';
-       openssl_private_decrypt($encrypted_aes_key_bundle,$outer_key_bundle,$importer['prvkey']);
 
-       $j_outer_key_bundle = json_decode($outer_key_bundle);
+               $decrypted = pkcs5_unpad($decrypted);
 
-       $outer_iv = base64_decode($j_outer_key_bundle->iv);
-       $outer_key = base64_decode($j_outer_key_bundle->key);
+               /**
+                * $decrypted now contains something like
+                *
+                *  <decrypted_header>
+                *     <iv>8e+G2+ET8l5BPuW0sVTnQw==</iv>
+                *     <aes_key>UvSMb4puPeB14STkcDWq+4QE302Edu15oaprAQSkLKU=</aes_key>
 
-       $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $outer_key, $ciphertext, MCRYPT_MODE_CBC, $outer_iv);
+***** OBSOLETE
 
+                *     <author>
+                *       <name>Ryan Hughes</name>
+                *       <uri>acct:galaxor@diaspora.pirateship.org</uri>
+                *     </author>
 
-       $decrypted = pkcs5_unpad($decrypted);
+***** CURRENT
 
-       /**
-        * $decrypted now contains something like
-        *
-        *  <decrypted_header>
-        *     <iv>8e+G2+ET8l5BPuW0sVTnQw==</iv>
-        *     <aes_key>UvSMb4puPeB14STkcDWq+4QE302Edu15oaprAQSkLKU=</aes_key>
-        *     <author>
-        *       <name>Ryan Hughes</name>
-        *       <uri>acct:galaxor@diaspora.pirateship.org</uri>
-        *     </author>
-        *  </decrypted_header>
-        */
+                *     <author_id>galaxor@diaspora.priateship.org</author_id>
 
-       logger('decrypted: ' . $decrypted);
-       $idom = parse_xml_string($decrypted,false);
+***** END DIFFS
 
-       $inner_iv = base64_decode($idom->iv);
-       $inner_aes_key = base64_decode($idom->aes_key);
+                *  </decrypted_header>
+                */
 
-       $author_link = str_replace('acct:','',$idom->author->uri);
+               logger('decrypted: ' . $decrypted, LOGGER_DEBUG);
+               $idom = parse_xml_string($decrypted,false);
+
+               $inner_iv = base64_decode($idom->iv);
+               $inner_aes_key = base64_decode($idom->aes_key);
+
+               $author_link = str_replace('acct:','',$idom->author_id);
+
+       }
 
        $dom = $basedom->children(NAMESPACE_SALMON_ME);
 
@@ -255,16 +336,6 @@ function diaspora_decode($importer,$xml) {
        // strip whitespace so our data element will return to one big base64 blob
        $data = str_replace(array(" ","\t","\r","\n"),array("","","",""),$base->data);
 
-       // Add back the 60 char linefeeds
-
-       // This completely violates the entire principle of salmon magic signatures,
-       // which was to have a message signing format that was completely ambivalent to linefeeds 
-       // and transport whitespace mangling, and base64 wrapping rules. Guess what? PHP and Ruby 
-       // use different linelengths for base64 output. 
-
-    $lines = str_split($data,60);
-    $data = implode("\n",$lines);
-
 
        // stash away some other stuff for later
 
@@ -273,22 +344,25 @@ function diaspora_decode($importer,$xml) {
        $encoding = $base->encoding;
        $alg = $base->alg;
 
-       // I can't even begin to tell you how sucky this is. Please read the spec.
 
-       $signed_data = $data  . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
+       $signed_data = $data  . '.' . base64url_encode($type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($alg);
 
 
        // decode the data
        $data = base64url_decode($data);
 
-       // Now pull out the inner encrypted blob
 
-       $inner_encrypted = base64_decode($data);
+       if($public) {
+               $inner_decrypted = $data;
+       }
+       else {
 
-       $inner_decrypted = 
-       $inner_decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $inner_encrypted, MCRYPT_MODE_CBC, $inner_iv);
+               // Decode the encrypted blob
 
-       $inner_decrypted = pkcs5_unpad($inner_decrypted);
+               $inner_encrypted = base64_decode($data);
+               $inner_decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $inner_encrypted, MCRYPT_MODE_CBC, $inner_iv);
+               $inner_decrypted = pkcs5_unpad($inner_decrypted);
+       }
 
        if(! $author_link) {
                logger('mod-diaspora: Could not retrieve author URI.');
@@ -321,7 +395,6 @@ function diaspora_decode($importer,$xml) {
 }
 
        
-
 function diaspora_request($importer,$xml) {
 
        $sender_handle = unxmlify($xml->sender_handle);
@@ -332,7 +405,6 @@ function diaspora_request($importer,$xml) {
         
        $contact = diaspora_get_contact_by_handle($importer['uid'],$sender_handle);
 
-
        if($contact) {
 
                // perhaps we were already sharing with this person. Now they're sharing with us.
@@ -357,13 +429,16 @@ function diaspora_request($importer,$xml) {
                return;
        }
 
-       $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`)
-               VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ",
+       $batch = (($ret['batch']) ? $ret['batch'] : implode('/', array_slice(explode('/',$ret['url']),0,3)) . '/receive/public');
+
+       $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`batch`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`)
+               VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ",
                intval($importer['uid']),
                dbesc($ret['network']),
                dbesc($ret['addr']),
                datetime_convert(),
                dbesc($ret['url']),
+               dbesc($batch),
                dbesc($ret['name']),
                dbesc($ret['nick']),
                dbesc($ret['photo']),
@@ -398,6 +473,7 @@ function diaspora_request($importer,$xml) {
 
 function diaspora_post($importer,$xml) {
 
+       $a = get_app();
        $guid = notags(unxmlify($xml->guid));
        $diaspora_handle = notags(unxmlify($xml->diaspora_handle));
 
@@ -407,8 +483,7 @@ function diaspora_post($importer,$xml) {
 
        if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
                logger('diaspora_post: Ignoring this author.');
-               http_status_exit(202);
-               // NOTREACHED
+               return 202;
        }
 
        $message_id = $diaspora_handle . ':' . $guid;
@@ -417,8 +492,10 @@ function diaspora_post($importer,$xml) {
                dbesc($message_id),
                dbesc($guid)
        );
-       if(count($r))
+       if(count($r)) {
+               logger('diaspora_post: message exists: ' . $guid);
                return;
+       }
 
     // allocate a guid on our system - we aren't fixing any collisions.
        // we're ignoring them
@@ -435,32 +512,7 @@ function diaspora_post($importer,$xml) {
        $created = unxmlify($xml->created_at);
        $private = ((unxmlify($xml->public) == 'false') ? 1 : 0);
 
-       $body = unxmlify($xml->raw_message);
-
-       require_once('library/HTMLPurifier.auto.php');
-       require_once('include/html2bbcode.php');
-
-       $maxlen = get_max_import_size();
-       if($maxlen && (strlen($body) > $maxlen))
-               $body = substr($body,0, $maxlen);
-
-       if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) {
-
-               $body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
-                       '[youtube]$1[/youtube]', $body);
-
-               $body = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
-                       '[youtube]$1[/youtube]', $body);
-
-               $body = oembed_html2bbcode($body);
-
-               $config = HTMLPurifier_Config::createDefault();
-               $config->set('Cache.DefinitionImpl', null);
-               $purifier = new HTMLPurifier($config);
-               $body = $purifier->purify($body);
-
-               $body = html2bbcode($body);
-       }
+       $body = diaspora2bb($xml->raw_message);
 
        $datarray = array();
        $datarray['uid'] = $importer['uid'];
@@ -478,8 +530,16 @@ function diaspora_post($importer,$xml) {
        $datarray['author-link'] = $contact['url'];
        $datarray['author-avatar'] = $contact['thumb'];
        $datarray['body'] = $body;
+       $datarray['app']  = 'Diaspora';
+
+       $message_id = item_store($datarray);
 
-       item_store($datarray);
+       if($message_id) {
+               q("update item set plink = '%s' where id = %d limit 1",
+                       dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
+                       intval($message_id)
+               );
+       }
 
        return;
 
@@ -487,6 +547,7 @@ function diaspora_post($importer,$xml) {
 
 function diaspora_comment($importer,$xml,$msg) {
 
+       $a = get_app();
        $guid = notags(unxmlify($xml->guid));
        $parent_guid = notags(unxmlify($xml->parent_guid));
        $diaspora_handle = notags(unxmlify($xml->diaspora_handle));
@@ -499,13 +560,23 @@ function diaspora_comment($importer,$xml,$msg) {
        $text = $xml->text;
 
        $contact = diaspora_get_contact_by_handle($importer['uid'],$msg['author']);
-       if(! $contact)
+       if(! $contact) {
+               logger('diaspora_comment: cannot find contact: ' . $msg['author']);
                return;
+       }
 
        if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
                logger('diaspora_comment: Ignoring this author.');
-               http_status_exit(202);
-               // NOTREACHED
+               return 202;
+       }
+
+       $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
+               intval($importer['uid']),
+               dbesc($guid)
+       );
+       if(count($r)) {
+               logger('diaspora_comment: our comment just got relayed back to us (or there was a guid collision) : ' . $guid);
+               return;
        }
 
        $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
@@ -537,7 +608,7 @@ function diaspora_comment($importer,$xml,$msg) {
                }
        }
 
-       if(! rsa_verify($author_signed_data,$author_signature,$key,'sha')) {
+       if(! rsa_verify($author_signed_data,$author_signature,$key,'sha256')) {
                logger('diaspora_comment: verification failed.');
                return;
        }
@@ -550,7 +621,7 @@ function diaspora_comment($importer,$xml,$msg) {
 
                $key = $msg['key'];
 
-               if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha')) {
+               if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha256')) {
                        logger('diaspora_comment: owner verification failed.');
                        return;
                }
@@ -558,32 +629,7 @@ function diaspora_comment($importer,$xml,$msg) {
 
        // Phew! Everything checks out. Now create an item.
 
-       require_once('library/HTMLPurifier.auto.php');
-       require_once('include/html2bbcode.php');
-
-       $body = $text;
-
-       $maxlen = get_max_import_size();
-       if($maxlen && (strlen($body) > $maxlen))
-               $body = substr($body,0, $maxlen);
-
-       if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) {
-
-               $body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
-                       '[youtube]$1[/youtube]', $body);
-
-               $body = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
-                       '[youtube]$1[/youtube]', $body);
-
-               $body = oembed_html2bbcode($body);
-
-               $config = HTMLPurifier_Config::createDefault();
-               $config->set('Cache.DefinitionImpl', null);
-               $purifier = new HTMLPurifier($config);
-               $body = $purifier->purify($body);
-
-               $body = html2bbcode($body);
-       }
+       $body = diaspora2bb($text);
 
        $message_id = $diaspora_handle . ':' . $guid;
 
@@ -608,9 +654,17 @@ function diaspora_comment($importer,$xml,$msg) {
        $datarray['author-link'] = $person['url'];
        $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
        $datarray['body'] = $body;
+       $datarray['app']  = 'Diaspora';
 
        $message_id = item_store($datarray);
 
+       if($message_id) {
+               q("update item set plink = '%s' where id = %d limit 1",
+                       dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
+                       intval($message_id)
+               );
+       }
+
        if(! $parent_author_signature) {
                q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
                        intval($message_id),
@@ -630,6 +684,7 @@ function diaspora_comment($importer,$xml,$msg) {
 
 function diaspora_photo($importer,$xml,$msg) {
 
+       $a = get_app();
        $remote_photo_path = notags(unxmlify($xml->remote_photo_path));
 
        $remote_photo_name = notags(unxmlify($xml->remote_photo_name));
@@ -651,8 +706,7 @@ function diaspora_photo($importer,$xml,$msg) {
 
        if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
                logger('diaspora_photo: Ignoring this author.');
-               http_status_exit(202);
-               // NOTREACHED
+               return 202;
        }
 
        $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
@@ -697,13 +751,14 @@ function diaspora_like($importer,$xml,$msg) {
                return;
 
        $contact = diaspora_get_contact_by_handle($importer['uid'],$msg['author']);
-       if(! $contact)
+       if(! $contact) {
+               logger('diaspora_like: cannot find contact: ' . $msg['author']);
                return;
+       }
 
        if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
                logger('diaspora_like: Ignoring this author.');
-               http_status_exit(202);
-               // NOTREACHED
+               return 202;
        }
 
        $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
@@ -759,20 +814,20 @@ function diaspora_like($importer,$xml,$msg) {
                }
        }
 
-       if(! rsa_verify($author_signed_data,$author_signature,$key,'sha')) {
+       if(! rsa_verify($author_signed_data,$author_signature,$key,'sha256')) {
                logger('diaspora_like: verification failed.');
                return;
        }
 
        if($parent_author_signature) {
-//             $owner_signed_data = $guid . ';' . $parent_guid . ';' . $target_type . ';' . $positive . ';' . $msg['author'];
-               $owner_signed_data = $guid . ';' . $parent_guid . ';' . $target_type . ';' . $positive . ';' . $diaspora_handle;
+
+               $owner_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
 
                $parent_author_signature = base64_decode($parent_author_signature);
 
                $key = $msg['key'];
 
-               if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha')) {
+               if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha256')) {
                        logger('diaspora_like: owner verification failed.');
                        return;
                }
@@ -826,6 +881,8 @@ EOT;
        $plink = '[url=' . $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $parent_item['id'] . ']' . $post_type . '[/url]';
        $arr['body'] =  sprintf( $bodyverb, $ulink, $alink, $plink );
 
+       $arr['app']  = 'Diaspora';
+
        $arr['private'] = $parent_item['private'];
        $arr['verb'] = $activity;
        $arr['object-type'] = $objtype;
@@ -836,6 +893,14 @@ EOT;
 
        $message_id = item_store($arr);
 
+
+       if($message_id) {
+               q("update item set plink = '%s' where id = %d limit 1",
+                       dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
+                       intval($message_id)
+               );
+       }
+
        if(! $parent_author_signature) {
                q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
                        intval($message_id),
@@ -883,7 +948,7 @@ function diaspora_retraction($importer,$xml) {
                }
        }
 
-       http_exit_status(202);
+       return 202;
        // NOTREACHED
 }
 
@@ -923,7 +988,7 @@ function diaspora_unshare($me,$contact) {
 
 
 
-function diaspora_send_status($item,$owner,$contact) {
+function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
@@ -947,11 +1012,12 @@ function diaspora_send_status($item,$owner,$contact) {
                }
        }       
 
-       $body = xmlify(bb2diaspora($body));
+       $body = xmlify(html_entity_decode(bb2diaspora($body)));
+
        $public = (($item['private']) ? 'false' : 'true');
 
        require_once('include/datetime.php');
-       $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d h:i:s \U\T\C');
+       $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C');
 
        $tpl = get_markup_template('diaspora_post.tpl');
        $msg = replace_macros($tpl, array(
@@ -964,19 +1030,19 @@ function diaspora_send_status($item,$owner,$contact) {
 
        logger('diaspora_send_status: ' . $owner['username'] . ' -> ' . $contact['name'] . ' base message: ' . $msg, LOGGER_DATA);
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       $return_code = diaspora_transmit($owner,$contact,$slap);
+       $return_code = diaspora_transmit($owner,$contact,$slap,$public_batch);
 
        if(count($images)) {
-               diaspora_send_images($item,$owner,$contact,$images);
+               diaspora_send_images($item,$owner,$contact,$images,$public_batch);
        }
 
        return $return_code;
 }
 
 
-function diaspora_send_images($item,$owner,$contact,$images) {
+function diaspora_send_images($item,$owner,$contact,$images,$public_batch = false) {
        $a = get_app();
        if(! count($images))
                return;
@@ -1003,19 +1069,19 @@ function diaspora_send_images($item,$owner,$contact,$images) {
                        '$guid' => xmlify($r[0]['guid']),
                        '$handle' => xmlify($image['handle']),
                        '$public' => xmlify($public),
-                       '$created_at' => xmlify(datetime_convert('UTC','UTC',$r[0]['created'],'Y-m-d h:i:s \U\T\C'))
+                       '$created_at' => xmlify(datetime_convert('UTC','UTC',$r[0]['created'],'Y-m-d H:i:s \U\T\C'))
                ));
 
 
                logger('diaspora_send_photo: base message: ' . $msg, LOGGER_DATA);
-               $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+               $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-               diaspora_transmit($owner,$contact,$slap);
+               diaspora_transmit($owner,$contact,$slap,$public_batch);
        }
 
 }
 
-function diaspora_send_followup($item,$owner,$contact) {
+function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
@@ -1040,7 +1106,7 @@ function diaspora_send_followup($item,$owner,$contact) {
                $like = false;
        }
 
-       $text = bb2diaspora($item['body']);
+       $text = html_entity_decode(bb2diaspora($item['body']));
 
        // sign it
 
@@ -1049,7 +1115,7 @@ function diaspora_send_followup($item,$owner,$contact) {
        else
                $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr;
 
-       $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha'));
+       $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
 
        $msg = replace_macros($tpl,array(
                '$guid' => xmlify($item['guid']),
@@ -1063,13 +1129,13 @@ function diaspora_send_followup($item,$owner,$contact) {
 
        logger('diaspora_followup: base message: ' . $msg, LOGGER_DATA);
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       return(diaspora_transmit($owner,$contact,$slap));
+       return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 }
 
 
-function diaspora_send_relay($item,$owner,$contact) {
+function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
 
 
        $a = get_app();
@@ -1085,14 +1151,6 @@ function diaspora_send_relay($item,$owner,$contact) {
        else
                return;
 
-       // fetch the original signature 
-       $r = q("select * from sign where iid = %d limit 1",
-               intval($item['id'])
-       );
-       if(! count($r)) 
-               return;
-       $orig_sign = $r[0];
-
        if($item['verb'] === ACTIVITY_LIKE) {
                $tpl = get_markup_template('diaspora_like_relay.tpl');
                $like = true;
@@ -1104,16 +1162,61 @@ function diaspora_send_relay($item,$owner,$contact) {
                $like = false;
        }
 
-       $text = bb2diaspora($item['body']);
+       $body = $item['body'];
 
-       // sign it
+       $text = html_entity_decode(bb2diaspora($body));
 
-       if($like)
-               $parent_signed_text = $orig_sign['signed_text'];
-       else
-               $parent_signed_text = $orig_sign['signed_text'];
+       // fetch the original signature if somebody sent the post to us to relay
+       // If we are relaying for a reply originating on our own account, there wasn't a 'send to relay'
+       // action. It wasn't needed. In that case create the original signature and the 
+       // owner (parent author) signature
+       // comments from other networks will be relayed under our name, with a brief 
+       // preamble to describe what's happening and noting the real author
+
+       $r = q("select * from sign where iid = %d limit 1",
+               intval($item['id'])
+       );
+       if(count($r)) { 
+               $orig_sign = $r[0];
+               $signed_text = $orig_sign['signed_text'];
+               $authorsig = $orig_sign['signature'];
+               $handle = $orig_sign['signer'];
+       }
+       else {
+
+               $itemcontact = q("select * from contact where `id` = %d limit 1",
+                       intval($item['contact-id'])
+               );
+               if(count($itemcontact)) {
+                       if(! $itemcontact[0]['self']) {
+                               $prefix = sprintf( t('[Relayed] Comment authored by %s from network %s'),
+                                       '['. $item['author-name'] . ']' . '(' . $item['author-link'] . ')',  
+                                       network_to_name($itemcontact['network'])) . "\n";
+                               $body = $prefix . $body;
+                       }
+               }
+               else {
+
+                       if($like)
+                               $signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $myaddr;
+                       else
+                               $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr;
+
+                       $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
+
+                       q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+                               intval($item['id']),
+                               dbesc($signed_text),
+                               dbesc(base64_encode($authorsig)),
+                               dbesc($myaddr)
+                       );
+                       $handle = $myaddr;
+               }
+       }
 
-       $parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha'));
+       // sign it
+
+       $parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
 
        $msg = replace_macros($tpl,array(
                '$guid' => xmlify($item['guid']),
@@ -1121,29 +1224,22 @@ function diaspora_send_relay($item,$owner,$contact) {
                '$target_type' =>xmlify($target_type),
                '$authorsig' => xmlify($orig_sign['signature']),
                '$parentsig' => xmlify($parentauthorsig),
-               '$text' => xmlify($text),
+               '$body' => xmlify($text),
                '$positive' => xmlify($positive),
-               '$diaspora_handle' => xmlify($myaddr)
+               '$handle' => xmlify($handle)
        ));
 
-       // fetch the original signature 
-       $r = q("select * from sign where iid = %d limit 1",
-               intval($item['id'])
-       );
-       if(! count($r)) 
-               return;
-
        logger('diaspora_relay_comment: base message: ' . $msg, LOGGER_DATA);
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       return(diaspora_transmit($owner,$contact,$slap));
+       return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 
 }
 
 
 
-function diaspora_send_retraction($item,$owner,$contact) {
+function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
@@ -1155,32 +1251,35 @@ function diaspora_send_retraction($item,$owner,$contact) {
                '$handle' => $myaddr
        ));
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       return(diaspora_transmit($owner,$contact,$slap));
+       return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 }
 
 
 
-function diaspora_transmit($owner,$contact,$slap) {
+function diaspora_transmit($owner,$contact,$slap,$public_batch) {
 
        $a = get_app();
-
-       post_url($contact['notify'] . '/',$slap);
+       $logid = random_string(4);
+       logger('diaspora_transmit: ' . $logid . ' ' . (($public_batch) ? $contact['batch'] : $contact['notify']));
+       post_url((($public_batch) ? $contact['batch'] : $contact['notify']) . '/',$slap);
        $return_code = $a->get_curl_code();
-       logger('diaspora_transmit: returns: ' . $return_code);
+       logger('diaspora_transmit: ' . $logid . ' returns: ' . $return_code);
 
-       if(! $return_code) {
+       if((! $return_code) || (($curl_stat == 503) && (stristr($a->get_curl_headers(),'retry-after')))) {
                logger('diaspora_transmit: queue message');
                // queue message for redelivery
-               q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
-                       VALUES ( %d, '%s', '%s', '%s') ",
+               q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`,`batch`)
+                       VALUES ( %d, '%s', '%s', '%s', %d) ",
                        intval($contact['id']),
                        dbesc(datetime_convert()),
                        dbesc(datetime_convert()),
-                       dbesc($slap)
+                       dbesc($slap),
+                       intval($public_batch)
                );
        }
 
+
        return(($return_code) ? $return_code : (-1));
 }
index 1f485e430fa0ab5ab55d4630970ef2dde8e64e6c..3e6a8186d8fb9eafdc541696220aa3d2d4e16935 100644 (file)
@@ -4,7 +4,7 @@ function email_connect($mailbox,$username,$password) {
        if(! function_exists('imap_open'))
                return false;
 
-       $mbox = imap_open($mailbox,$username,$password);
+       $mbox = @imap_open($mailbox,$username,$password);
 
        return $mbox;
 }
@@ -14,19 +14,19 @@ function email_poll($mbox,$email_addr) {
        if(! ($mbox && $email_addr))
                return array();
 
-       $search1 = imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID);
+       $search1 = @imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID);
        if(! $search1)
                $search1 = array();
 
-       $search2 = imap_search($mbox,'TO "' . $email_addr . '"', SE_UID);
+       $search2 = @imap_search($mbox,'TO "' . $email_addr . '"', SE_UID);
        if(! $search2)
                $search2 = array();
 
-       $search3 = imap_search($mbox,'CC "' . $email_addr . '"', SE_UID);
+       $search3 = @imap_search($mbox,'CC "' . $email_addr . '"', SE_UID);
        if(! $search3)
                $search3 = array();
 
-       $search4 = imap_search($mbox,'BCC "' . $email_addr . '"', SE_UID);
+       $search4 = @imap_search($mbox,'BCC "' . $email_addr . '"', SE_UID);
        if(! $search4)
                $search4 = array();
 
@@ -45,12 +45,12 @@ function construct_mailbox_name($mailacct) {
 
 
 function email_msg_meta($mbox,$uid) {
-       $ret = (($mbox && $uid) ? imap_fetch_overview($mbox,$uid,FT_UID) : array(array()));
+       $ret = (($mbox && $uid) ? @imap_fetch_overview($mbox,$uid,FT_UID) : array(array()));
        return ((count($ret)) ? $ret[0] : array());
 }
 
 function email_msg_headers($mbox,$uid) {
-       $raw_header = (($mbox && $uid) ? imap_fetchheader($mbox,$uid,FT_UID) : '');
+       $raw_header = (($mbox && $uid) ? @imap_fetchheader($mbox,$uid,FT_UID) : '');
        $raw_header = str_replace("\r",'',$raw_header);
        $ret = array();
        $h = split("\n",$raw_header);
@@ -74,7 +74,7 @@ function email_msg_headers($mbox,$uid) {
 function email_get_msg($mbox,$uid) {
        $ret = array();
 
-       $struc = (($mbox && $uid) ? imap_fetchstructure($mbox,$uid,FT_UID) : null);
+       $struc = (($mbox && $uid) ? @imap_fetchstructure($mbox,$uid,FT_UID) : null);
 
        if(! $struc)
                return $ret;
@@ -103,8 +103,8 @@ function email_get_part($mbox,$uid,$p,$partno) {
 
     // DECODE DATA
     $data = ($partno)
-               ? imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
-        : imap_body($mbox,$uid,FT_UID|FT_PEEK);
+               ? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
+        : @imap_body($mbox,$uid,FT_UID|FT_PEEK);
 
     // Any part may be encoded, even plain text messages, so check everything.
     if ($p->encoding==4)
@@ -169,6 +169,17 @@ function email_get_part($mbox,$uid,$p,$partno) {
 
 function email_header_encode($in_str, $charset) {
     $out_str = $in_str;
+       $need_to_convert = false;
+
+       for($x = 0; $x < strlen($in_str); $x ++) {
+               if((ord($in_str[$x]) == 0) || ((ord($in_str[$x]) > 128))) {
+                       $need_to_convert = true;
+               }
+       }
+
+       if(! $need_to_convert)
+               return $in_str;
+
     if ($out_str && $charset) {
 
         // define start delimimter, end delimiter and spacer
@@ -205,4 +216,6 @@ function email_header_encode($in_str, $charset) {
         $out_str = $start . $out_str . $end;
     }
     return $out_str;
-} 
\ No newline at end of file
+} 
+
+
index f21ce42e09f95ff89c223a0007dbf43a10852cc3..e3c7d33d4a97bd32dcba1027e6bda1002e58c16f 100644 (file)
@@ -6,8 +6,26 @@ function group_add($uid,$name) {
        $ret = false;
        if(x($uid) && x($name)) {
                $r = group_byname($uid,$name); // check for dups
-               if($r !== false) 
+               if($r !== false) {
+
+                       // This could be a problem. 
+                       // Let's assume we've just created a group which we once deleted
+                       // all the old members are gone, but the group remains so we don't break any security
+                       // access lists. What we're doing here is reviving the dead group, but old content which
+                       // was restricted to this group may now be seen by the new group members. 
+
+                       $z = q("SELECT * FROM `group` WHERE `id` = %d LIMIT 1",
+                               intval($r)
+                       );
+                       if(count($z) && $z[0]['deleted']) {
+                               $r = q("UPDATE `group` SET `deleted` = 0 WHERE `uid` = %d AND `name` = '%s' LIMIT 1",
+                                       intval($uid),
+                                       dbesc($name)
+                               );
+                               notice( t('A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL); 
+                       }
                        return true;
+               }
                $r = q("INSERT INTO `group` ( `uid`, `name` )
                        VALUES( %d, '%s' ) ",
                        intval($uid),
@@ -124,7 +142,7 @@ function group_public_members($gid) {
                $r = q("SELECT `contact`.`id` AS `contact-id` FROM `group_member` 
                        LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` 
                        WHERE `gid` = %d AND `group_member`.`uid` = %d 
-                       AND ( `contact`.`network` = '%s' OR `contact`.`notify` = '' )",
+                       AND  `contact`.`network` = '%s' AND `contact`.`notify` != '' ",
                        intval($gid),
                        intval(local_user()),
                        dbesc(NETWORK_OSTATUS)
@@ -146,15 +164,15 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0
 
        $createtext = t('Create a new group');
        $linktext= t('Everybody');
-       $selected = (($group_id == 0) ? ' class="group-selected" ' : '');
+       $selected = (($group_id == 0) ? ' group-selected' : '');
 $o .= <<< EOT
 
-<div id="group-sidebar">
+<div id="group-sidebar" class="widget">
 <h3>Groups</h3>
 
 <div id="sidebar-group-list">
        <ul id="sidebar-group-ul">
-       <li class="sidebar-group-li" ><a href="$every" $selected >$linktext</a></li>
+       <li class="sidebar-group-li" ><a href="$every" class="sidebar-group-element$selected" >$linktext</a></li>
 
 EOT;
 
@@ -167,13 +185,13 @@ EOT;
 
        if(count($r)) {
                foreach($r as $rr) {
-                       $selected = (($group_id == $rr['id']) ? ' class="group-selected" ' : '');
+                       $selected = (($group_id == $rr['id']) ? ' group-selected' : '');
                        $o .= ' <li class="sidebar-group-li">' 
                        . (($edit) ? "<a href=\"group/{$rr['id']}\" title=\"" . t('Edit') 
-                               . "\" ><img src=\"images/spencil.gif\" alt=\"" . t('Edit') . "\"></a> " : "") 
+                               . "\" class=\"groupsideedit\" ><img src=\"images/spencil.gif\" alt=\"" . t('Edit') . "\"></a> " : "") 
                        . (($cid) ? '<input type="checkbox" class="' . (($selected) ? 'ticked' : 'unticked') . '" onclick="contactgroupChangeMember(' . $rr['id'] . ',' . $cid . ');return true;" '
                                . ((in_array($rr['id'],$member_of)) ? ' checked="checked" ' : '') . '/>' : '')
-                       . "<a href=\"$each/{$rr['id']}\" $selected >{$rr['name']}</a></li>\r\n";
+                       . "<a href=\"$each/{$rr['id']}\" class=\"sidebar-group-element" . $selected ."\"  >{$rr['name']}</a></li>\r\n";
                }
        }
        $o .= " </ul>\r\n       </div>";
index d4e8cce6661cf84ebba4bac9ea9c819dba62c292..8025c336bc9ca5b3aa7cf7ce6044af7bd90108e7 100644 (file)
@@ -24,6 +24,10 @@ function html2bbcode($s) {
                '/\<u\>(.*?)\<\/u\>/is',
                '/\<ul\>(.*?)\<\/ul\>/is',
                '/\<li\>(.*?)\<\/li\>/is',
+               '/\<img(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is',
+               '/\<img(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is',
+               '/\<img(.*?)src=\"(.*?)\"(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)\>/is',
+               '/\<img(.*?)src=\"(.*?)\"(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)\>/is',
                '/\<img(.*?) src=\"(.*?)\" (.*?)\>/is',
                '/\<div(.*?)\>(.*?)\<\/div\>/is',
                '/\<br(.*?)\>/is',
@@ -50,6 +54,10 @@ function html2bbcode($s) {
                '[u]$1[/u]',
                '[list]$1[/list]',
                '[*]$1',
+               '[img=$2x$4]$6[/img]',
+               '[img=$4x$2]$6[/img]',
+               '[img=$4x$6]$2[/img]',
+               '[img=$6x$4]$2[/img]',
                '[img]$2[/img]',
                '$2',
                "\n",
index 150be27070dd8d5f8118d5147917afdccda1a6f6..d907aeddba21ed9bb59636e805a1b7aa1685bdd2 100644 (file)
@@ -20,6 +20,8 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0)
                for($x = 2; $x < $a->argc; $x++) {
                        if($a->argv[$x] == 'converse')
                                $converse = true;
+                       if($a->argv[$x] == 'starred')
+                               $starred = true;
                }
        }
 
@@ -112,8 +114,10 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0)
                `contact`.`name`, `contact`.`photo`, `contact`.`url`, 
                `contact`.`name-date`, `contact`.`uri-date`, `contact`.`avatar-date`,
                `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, 
-               `contact`.`id` AS `contact-id`, `contact`.`uid` AS `contact-uid`
+               `contact`.`id` AS `contact-id`, `contact`.`uid` AS `contact-uid`,
+               `sign`.`signed_text`, `sign`.`signature`, `sign`.`signer`
                FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+               LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id`
                WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`parent` != 0 
                AND `item`.`wall` = 1 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
                AND ( `item`.`edited` > '%s' OR `item`.`changed` > '%s' )
@@ -363,6 +367,22 @@ function get_atom_elements($feed,$item) {
                        $res['app'] = 'OStatus';
        }                  
 
+       // base64 encoded json structure representing Diaspora signature
+
+       $dsig = $item->get_item_tags(NAMESPACE_DFRN,'diaspora_signature');
+       if($dsig) {
+               $res['dsprsig'] = unxmlify($dsig[0]['data']);
+       }
+
+       $dguid = $item->get_item_tags(NAMESPACE_DFRN,'diaspora_guid');
+       if($dguid)
+               $res['guid'] = unxmlify($dguid[0]['data']);
+
+       $bm = $item->get_item_tags(NAMESPACE_DFRN,'bookmark');
+       if($bm)
+               $res['bookmark'] = ((unxmlify($bm[0]['data']) === 'true') ? 1 : 0);
+
+
        /**
         * If there's a copy of the body content which is guaranteed to have survived mangling in transit, use it.
         */
@@ -659,6 +679,15 @@ function encode_rel_links($links) {
 
 function item_store($arr,$force_parent = false) {
 
+       // If a Diaspora signature structure was passed in, pull it out of the 
+       // item array and set it aside for later storage.
+
+       $dsprsig = null;
+       if(x($arr,'dsprsig')) {
+               $dsprsig = json_decode(base64_decode($arr['dsprsig']));
+               unset($arr['dsprsig']);
+       }
+
        if($arr['gravity'])
                $arr['gravity'] = intval($arr['gravity']);
        elseif($arr['parent-uri'] == $arr['uri'])
@@ -688,6 +717,7 @@ function item_store($arr,$force_parent = false) {
        $arr['owner-avatar']  = ((x($arr,'owner-avatar'))  ? notags(trim($arr['owner-avatar']))  : '');
        $arr['created']       = ((x($arr,'created') !== false) ? datetime_convert('UTC','UTC',$arr['created']) : datetime_convert());
        $arr['edited']        = ((x($arr,'edited')  !== false) ? datetime_convert('UTC','UTC',$arr['edited'])  : datetime_convert());
+       $arr['commented']     = datetime_convert();
        $arr['received']      = datetime_convert();
        $arr['changed']       = datetime_convert();
        $arr['title']         = ((x($arr,'title'))         ? notags(trim($arr['title']))         : '');
@@ -708,6 +738,7 @@ function item_store($arr,$force_parent = false) {
        $arr['deny_cid']      = ((x($arr,'deny_cid'))      ? trim($arr['deny_cid'])              : '');
        $arr['deny_gid']      = ((x($arr,'deny_gid'))      ? trim($arr['deny_gid'])              : '');
        $arr['private']       = ((x($arr,'private'))       ? intval($arr['private'])             : 0 );
+       $arr['bookmark']      = ((x($arr,'bookmark'))      ? intval($arr['bookmark'])            : 0 );
        $arr['body']          = ((x($arr,'body'))          ? trim($arr['body'])                  : '');
        $arr['tag']           = ((x($arr,'tag'))           ? notags(trim($arr['tag']))           : '');
        $arr['attach']        = ((x($arr,'attach'))        ? notags(trim($arr['attach']))        : '');
@@ -776,6 +807,14 @@ function item_store($arr,$force_parent = false) {
                }
        }
 
+       $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+               dbesc($arr['uri']),
+               dbesc($arr['uid'])
+       );
+       if($r && count($r)) {
+               logger('item-store: duplicate item ignored. ' . print_r($arr,true));
+               return 0;
+       }
 
        call_hooks('post_remote',$arr);
 
@@ -835,6 +874,24 @@ function item_store($arr,$force_parent = false) {
                intval($current_post)
        );
 
+       // update the commented timestamp on the parent
+
+       q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1",
+               dbesc(datetime_convert()),
+               dbesc(datetime_convert()),
+               intval($parent_id)
+       );
+
+       if($dsprsig) {
+               q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+                       intval($current_post),
+                       dbesc($dsprsig->signed_text),
+                       dbesc($dsprsig->signature),
+                       dbesc($dsprsig->signer)
+               );
+       }
+
+
        /**
         * If this is now the last-child, force all _other_ children of this parent to *not* be last-child
         */
@@ -894,7 +951,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
        if(! $curl_stat)
                return(-1); // timed out
 
-       logger('dfrn_deliver: ' . $xml);
+       logger('dfrn_deliver: ' . $xml, LOGGER_DATA);
 
        if(! $xml)
                return 3;
@@ -958,7 +1015,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
                $key = substr(random_string(),0,16);
                $data = bin2hex(aes_encrypt($postvars['data'],$key));
                $postvars['data'] = $data;
-               logger('rino: sent key = ' . $key);     
+               logger('rino: sent key = ' . $key, LOGGER_DEBUG);       
 
 
                if($dfrn_version >= 2.1) {      
@@ -993,6 +1050,9 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
        if((! $curl_stat) || (! strlen($xml)))
                return(-1); // timed out
 
+       if(($curl_stat == 503) && (stristr($a->get_curl_headers(),'retry-after')))
+               return(-1);
+
        if(strpos($xml,'<?xml') === false) {
                logger('dfrn_deliver: phase 2: no valid XML returned');
                logger('dfrn_deliver: phase 2: returned XML: ' . $xml, LOGGER_DATA);
@@ -1439,6 +1499,20 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_fee
                                        lose_follower($importer,$contact,$datarray,$item);
                                        return;
                                }
+
+                               if(activity_match($datarray['verb'],ACTIVITY_REQ_FRIEND)) {
+                                       logger('consume-feed: New friend request');
+                                       new_follower($importer,$contact,$datarray,$item,true);
+                                       return;
+                               }
+                               if(activity_match($datarray['verb'],ACTIVITY_UNFRIEND))  {
+                                       lose_sharer($importer,$contact,$datarray,$item);
+                                       return;
+                               }
+
+
+
+
                                if(! is_array($contact))
                                        return;
 
@@ -1470,7 +1544,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_fee
        }
 }
 
-function new_follower($importer,$contact,$datarray,$item) {
+function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
        $url = notags(trim($datarray['author-link']));
        $name = notags(trim($datarray['author-name']));
        $photo = notags(trim($datarray['author-avatar']));
@@ -1480,14 +1554,14 @@ function new_follower($importer,$contact,$datarray,$item) {
                $nick = $rawtag[0]['child'][NAMESPACE_POCO]['preferredUsername'][0]['data'];
 
        if(is_array($contact)) {
-               if($contact['network'] == 'stat' && $contact['rel'] == CONTACT_IS_SHARING) {
+               if(($contact['network'] == NETWORK_OSTATUS && $contact['rel'] == CONTACT_IS_SHARING)
+                       || ($sharing && $contact['rel'] == CONTACT_IS_FOLLOWER)) {
                        $r = q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
                                intval(CONTACT_IS_FRIEND),
                                intval($contact['id']),
                                intval($importer['uid'])
                        );
                }
-
                // send email notification to owner?
        }
        else {
@@ -1503,13 +1577,12 @@ function new_follower($importer,$contact,$datarray,$item) {
                        dbesc($name),
                        dbesc($nick),
                        dbesc($photo),
-                       dbesc('stat'),
-                       intval(CONTACT_IS_FOLLOWER)
+                       dbesc(($sharing) ? NETWORK_ZOT : NETWORK_OSTATUS),
+                       intval(($sharing) ? CONTACT_IS_SHARING : CONTACT_IS_FOLLOWER)
                );
-               $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `pending` = 1 AND `rel` = %d LIMIT 1",
+               $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `pending` = 1 LIMIT 1",
                                intval($importer['uid']),
-                               dbesc($url),
-                               intval(CONTACT_IS_FOLLOWER)
+                               dbesc($url)
                );
                if(count($r))
                                $contact_record = $r[0];
@@ -1541,7 +1614,7 @@ function new_follower($importer,$contact,$datarray,$item) {
                                        '$sitename' => $a->config['sitename']
                                ));
                                $res = mail($r[0]['email'], 
-                                       t("You have a new follower at ") . $a->config['sitename'],
+                                       (($sharing) ? t('A new person is sharing with you at ') : t("You have a new follower at ")) . $a->config['sitename'],
                                        $email,
                                        'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
                                        . 'Content-type: text/plain; charset=UTF-8' . "\n"
@@ -1565,14 +1638,32 @@ function lose_follower($importer,$contact,$datarray,$item) {
        }
 }
 
+function lose_sharer($importer,$contact,$datarray,$item) {
 
-function subscribe_to_hub($url,$importer,$contact) {
+       if(($contact['rel'] == CONTACT_IS_FRIEND) || ($contact['rel'] == CONTACT_IS_FOLLOWER)) {
+               q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d LIMIT 1",
+                       intval(CONTACT_IS_FOLLOWER),
+                       intval($contact['id'])
+               );
+       }
+       else {
+               contact_remove($contact['id']);
+       }
+}
+
+
+function subscribe_to_hub($url,$importer,$contact,$submode = 'subscribe') {
 
        if(is_array($importer)) {
                $r = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1",
                        intval($importer['uid'])
                );
        }
+
+       // Diaspora has different message-ids in feeds than they do 
+       // through the direct Diaspora protocol. If we try and use
+       // the feed, we'll get duplicates. So don't.
+
        if((! count($r)) || $contact['network'] === NETWORK_DIASPORA)
                return;
 
@@ -1582,7 +1673,7 @@ function subscribe_to_hub($url,$importer,$contact) {
 
        $verify_token = ((strlen($contact['hub-verify'])) ? $contact['hub-verify'] : random_string());
 
-       $params= 'hub.mode=subscribe&hub.callback=' . urlencode($push_url) . '&hub.topic=' . urlencode($contact['poll']) . '&hub.verify=async&hub.verify_token=' . $verify_token;
+       $params= 'hub.mode=' . $hubmode . '&hub.callback=' . urlencode($push_url) . '&hub.topic=' . urlencode($contact['poll']) . '&hub.verify=async&hub.verify_token=' . $verify_token;
 
        logger('subscribe_to_hub: subscribing ' . $contact['name'] . ' to hub ' . $url . ' with verifier ' . $verify_token);
 
@@ -1670,10 +1761,21 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
                $o .= '<dfrn:private>1</dfrn:private>' . "\r\n";
 
        if($item['extid'])
-               $o .= '<dfrn:extid>' . $item['extid'] . '</dfrn:extid>' . "\r\n";
+               $o .= '<dfrn:extid>' . xmlify($item['extid']) . '</dfrn:extid>' . "\r\n";
+       if($item['bookmark'])
+               $o .= '<dfrn:bookmark>true</dfrn:bookmark>' . "\r\n";
 
        if($item['app'])
-               $o .= '<statusnet:notice_info local_id="' . $item['id'] . '" source="' . $item['app'] . '" ></statusnet:notice_info>';
+               $o .= '<statusnet:notice_info local_id="' . $item['id'] . '" source="' . xmlify($item['app']) . '" ></statusnet:notice_info>' . "\r\n";
+
+       if($item['guid'])
+               $o .= '<dfrn:diaspora_guid>' . $item['guid'] . '</dfrn:diaspora_guid>' . "\r\n";
+
+       if($item['signed_text']) {
+               $sign = base64_encode(json_encode(array('signed_text' => $item['signed_text'],'signature' => $item['signature'],'signer' => $item['signer'])));
+               $o .= '<dfrn:diaspora_signature>' . xmlify($sign) . '</dfrn:diaspora_signature>' . "\r\n";
+       }
+
        $verb = construct_verb($item);
        $o .= '<as:verb>' . xmlify($verb) . '</as:verb>' . "\r\n";
        $actobj = construct_activity_object($item);
diff --git a/include/jquery.htmlstream.js b/include/jquery.htmlstream.js
deleted file mode 100644 (file)
index c62c538..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/* jQuery ajax stream plugin
-* Version 0.1
-* Copyright (C) 2009 Chris Tarquini
-* Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License (http://creativecommons.org/licenses/by-sa/3.0/)
-* Permissions beyond the scope of this license may be available by contacting petros000[at]hotmail.com.
-*/
-
-(function($) {
-
-// Save the original AJAX function
-var ajax_old = $.ajax;
-var get_old = $.get;
-var post_old =  $.post;
-var active = true;
-// Add our settings
-$.ajaxSetup({stream: false,pollInterval: 500/*, onDataRecieved: function(){}*/ });
-$.enableAjaxStream = function(enable)
-{
-if(typeof enable == 'undefined') enable = !active;
-if(!enable)
-{
-$.ajax = ajax_old;
-$.get = get_old;
-$.post = post_old;
-active = false;
-}
-else
-{
-$.ajax = ajax_stream;
-$.get = ajax_get_stream;
-$.post = ajax_post_stream;
-active = true;
-}
-
-}
-var ajax_stream = $.ajax = function(options)
-{
-//copied from original ajax function
-        options  = jQuery.extend(true, options, jQuery.extend(true, {}, jQuery.ajaxSettings, options));
-if(options.stream)
-{
-var timer = 0;
-var offset = 0;
-var xmlhttp = null;
-var lastlen = 0;
-var done = false;
-var hook = function(xhr)
-{
-xmlhttp = xhr;
-checkagain();
-}
-var fix = function(){ check('stream'); };// fixes weird bug with random numbers as arg
-var checkagain = function(){if(!done) timer = setTimeout(fix,options.pollInterval);}
-var check = function(status)
-{
-if(typeof status == 'undefined') status = "stream";
-if(xmlhttp.status < 3) return; //only get the latest packet if data has been sent
-var text = xmlhttp.responseText;
-if(status == 'stream') //if we arent streaming then just flush the buffer
-{
-if(text.length <= lastlen) { checkagain(); return;}
-lastlength = text.length;
-if(offset == text.length) { checkagain(); return;}
-}
-var pkt = text.substr(offset);
-offset =  text.length;
-if($.isFunction(options.OnDataRecieved))
-{
-options.OnDataRecieved(pkt, status, xmlhttp.responseText, xmlhttp);
-}
-if(xmlhttp.status != 4)
-checkagain();
-}
-var complete = function(xhr,s)
-{
-clearTimeout(timer);//done..stop polling
-done = true;
-// send final call
-check(s);
-}
-// If the complete callback is set create a new callback that calls the users and outs
-if($.isFunction(options.success))
-{
-var oc = options.success;
-options.success = function(xhr,s){ complete(xhr,s); oc(xhr,s);};
-
-}
-else options.success = complete;
-// Set up our hook on the beforeSend
-if($.isFunction(options.beforeSend))
-{
-var obs = options.beforeSend;
-options.beforeSend = function(xhr){ obs(xhr); hook(xhr);};
-}
-else options.beforeSend = hook;
-
-}
-ajax_old(options);
-}
-
-var ajax_get_stream = $.get = function(url,data,callback,type,stream)
-{
-       if($.isFunction(data))
-       {
-               var orgcb = callback;
-               callback = data;
-               if($.isFunction(orgcb))
-               {
-                       stream = orgcb;
-               }
-               data = null;
-       }
-       if($.isFunction(type))
-       {
-               stream = type;
-               type = undefined;
-       }
-       var dostream = $.isFunction(stream);
-       return jQuery.ajax({
-                                       type: "GET",
-                                       url: url,
-                                       data: data,
-                                       success: callback,
-                                       dataType: type,
-                                       stream: dostream,
-                                       OnDataRecieved: stream
-                       });
-
-}
-
-var ajax_post_stream = $.post = function(url,data,callback,type,stream)
-{
-        if($.isFunction(data))
-        {
-                               var orgcb = callback;
-                callback = data;
-        }
-               if($.isFunction(type))
-               {
-                       stream = type;
-                       type = undefined;
-               }
-               var dostream = $.isFunction(stream);
-               return jQuery.ajax({
-                               type: "POST",
-                               url: url,
-                               data: data,
-                               success: callback,
-                               dataType: type,
-                               stream: dostream,
-                               OnDataRecieved: stream
-               });
-
-}
-
-})(jQuery);    
-       
diff --git a/include/jquery.js b/include/jquery.js
deleted file mode 100644 (file)
index 7c24308..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/include/main.js b/include/main.js
deleted file mode 100644 (file)
index d59c992..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-
-  function openClose(theID) {
-    if(document.getElementById(theID).style.display == "block") { 
-      document.getElementById(theID).style.display = "none" 
-    }
-    else { 
-      document.getElementById(theID).style.display = "block" 
-    } 
-  }
-
-  function openMenu(theID) {
-      document.getElementById(theID).style.display = "block" 
-  }
-
-  function closeMenu(theID) {
-      document.getElementById(theID).style.display = "none" 
-  }
-
-       
-       var src = null;
-       var prev = null;
-       var livetime = null;
-       var msie = false;
-       var stopped = false;
-       var timer = null;
-       var pr = 0;
-       var liking = 0;
-       var in_progress = false;
-       var langSelect = false;
-       var commentBusy = false;
-
-       $(function() {
-               $.ajaxSetup({cache: false});
-
-               msie = $.browser.msie ;
-               
-               
-               /* setup onoff widgets */
-               $(".onoff input").each(function(){
-                       val = $(this).val();
-                       id = $(this).attr("id");
-                       $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
-                       
-               });
-               $(".onoff > a").click(function(event){
-                       event.preventDefault(); 
-                       var input = $(this).siblings("input");
-                       var val = 1-input.val();
-                       var id = input.attr("id");
-                       $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
-                       $("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
-                       input.val(val);
-                       //console.log(id);
-               });
-               
-               /* setup field_richtext */
-               setupFieldRichtext();
-               
-               /* load tinyMCE if needed and setup field_richtext */
-               /*if(typeof tinyMCE == "undefined") {
-                       window.tinyMCEPreInit = {
-                               suffix:"",
-                               base: baseurl+"/library/tinymce/jscripts/tiny_mce/",
-                               query:"",
-                       };
-                       $.getScript(baseurl     +"/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js", setupFieldRichtext);
-               } else {
-               }*/
-               
-               
-               
-               /* nav update event  */
-               $('nav').bind('nav-update', function(e,data){;
-                       var net = $(data).find('net').text();
-                       if(net == 0) { net = ''; $('#net-update').hide() } else { $('#net-update').show() }
-                       $('#net-update').html(net);
-                       var home = $(data).find('home').text();
-                       if(home == 0) { home = '';  $('#home-update').hide() } else { $('#home-update').show() }
-                       $('#home-update').html(home);
-                       var mail = $(data).find('mail').text();
-                       if(mail == 0) { mail = '';  $('#mail-update').hide() } else { $('#mail-update').show() }
-                       $('#mail-update').html(mail);
-                       var intro = $(data).find('intro').text();
-                       if(intro == 0) { intro = ''; $('#notify-update').hide() } else { $('#notify-update').show() }
-                       $('#notify-update').html(intro);
-               });
-               
-               
-               NavUpdate(); 
-               // Allow folks to stop the ajax page updates with the pause/break key
-               $(document).keypress(function(event) {
-                       if(event.keyCode == '19') {
-                               event.preventDefault();
-                               if(stopped == false) {
-                                       stopped = true;
-                                       $('#pause').html('<img src="images/pause.gif" alt="pause" style="border: 1px solid black;" />');
-                               }
-                               else {
-                                       stopped = false;
-                                       $('#pause').html('');
-                               }
-                       }
-                       else {
-                               // any key to resume
-                               if(stopped == true) {
-                                       stopped = false;
-                                       $('#pause').html('');
-                               }
-                       }
-
-               });                                     
-       });
-
-       function NavUpdate() {
-
-               if($('#live-network').length)   { src = 'network'; liveUpdate(); }
-               if($('#live-profile').length)   { src = 'profile'; liveUpdate(); }
-               if($('#live-community').length) { src = 'community'; liveUpdate(); }
-               if($('#live-display').length) { 
-                       if(liking) {
-                               liking = 0;
-                               window.location.href=window.location.href 
-                       }
-               }
-               if($('#live-photos').length)  { 
-                       if(liking) {
-                               liking = 0;
-                               window.location.href=window.location.href 
-                       }
-               }
-
-               if(! stopped) {
-                       $.get("ping",function(data) {
-                               $(data).find('result').each(function() {
-                                       // send nav-update event
-                                       $('nav').trigger('nav-update', this);
-                               });
-                       }) ;
-               }
-               timer = setTimeout(NavUpdate,30000);
-       }
-
-       function liveUpdate() {
-               if((src == null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
-               if(($('.comment-edit-text-full').length) || (in_progress)) {
-                       livetime = setTimeout(liveUpdate, 10000);
-                       return;
-               }
-               prev = 'live-' + src;
-
-               in_progress = true;
-               var udargs = ((netargs.length) ? '/' + netargs : '');
-               var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&msie=' + ((msie) ? 1 : 0);
-
-               $.get(update_url,function(data) {
-                       in_progress = false;
-                       $('.ccollapse-wrapper',data).each(function() {
-                               var ident = $(this).attr('id');
-                               var is_hidden = $('#' + ident).is(':hidden');
-                               if($('#' + ident).length) {
-                                       $('#' + ident).replaceWith($(this));
-                                       if(is_hidden)
-                                               $('#' + ident).hide();
-                               }
-                       });
-                       $('.wall-item-outside-wrapper',data).each(function() {
-                               var ident = $(this).attr('id');
-                               if($('#' + ident).length == 0) {
-                                       $('img',this).each(function() {
-                                               $(this).attr('src',$(this).attr('dst'));
-                                       });
-                                       $('#' + prev).after($(this));
-                               }
-                               else { 
-
-                                       $('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago')); 
-                                       if($('#' + ident + ' ' + '.comment-edit-text-empty').length)
-                                               $('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
-                                       $('#' + ident + ' ' + '.wall-item-like').replaceWith($(this).find('.wall-item-like'));
-                                       $('#' + ident + ' ' + '.wall-item-dislike').replaceWith($(this).find('.wall-item-dislike'));
-                                       $('#' + ident + ' ' + '.my-comment-photo').each(function() {
-                                               $(this).attr('src',$(this).attr('dst'));
-                                       });
-                               }
-                               prev = ident; 
-                       });
-                       $('.like-rotator').hide();
-                       if(commentBusy) {
-                               commentBusy = false;
-                               $('body').css('cursor', 'auto');
-                       }
-               });
-       }
-
-       function imgbright(node) {
-               $(node).removeClass("drophide").addClass("drop");
-       }
-
-       function imgdull(node) {
-               $(node).removeClass("drop").addClass("drophide");
-       }
-
-       // Since our ajax calls are asynchronous, we will give a few 
-       // seconds for the first ajax call (setting like/dislike), then 
-       // run the updater to pick up any changes and display on the page.
-       // The updater will turn any rotators off when it's done. 
-       // This function will have returned long before any of these
-       // events have completed and therefore there won't be any
-       // visible feedback that anything changed without all this
-       // trickery. This still could cause confusion if the "like" ajax call
-       // is delayed and NavUpdate runs before it completes.
-
-       function dolike(ident,verb) {
-               $('#like-rotator-' + ident.toString()).show();
-               $.get('like/' + ident.toString() + '?verb=' + verb );
-               if(timer) clearTimeout(timer);
-               timer = setTimeout(NavUpdate,3000);
-               liking = 1;
-       }
-
-       function dostar(ident) {
-               $('#like-rotator-' + ident.toString()).show();
-               $.get('starred/' + ident.toString(), function(data) {
-                       if(data.match(/1/)) {
-                               $('#starred-' + ident.toString()).addClass('starred');
-                               $('#starred-' + ident.toString()).removeClass('unstarred');
-                       }
-                       else {                  
-                               $('#starred-' + ident.toString()).addClass('unstarred');
-                               $('#starred-' + ident.toString()).removeClass('starred');
-                       }
-                       $('#like-rotator-' + ident.toString()).hide();  
-               });
-       }
-
-       function getPosition(e) {
-               var cursor = {x:0, y:0};
-               if ( e.pageX || e.pageY  ) {
-                       cursor.x = e.pageX;
-                       cursor.y = e.pageY;
-               }
-               else {
-                       if( e.clientX || e.clientY ) {
-                               cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
-                               cursor.y = e.clientY + (document.documentElement.scrollTop  || document.body.scrollTop)  - document.documentElement.clientTop;
-                       }
-                       else {
-                               if( e.x || e.y ) {
-                                       cursor.x = e.x;
-                                       cursor.y = e.y;
-                               }
-                       }
-               }
-               return cursor;
-       }
-
-       var lockvisible = false;
-
-       function lockview(event,id) {
-               event = event || window.event;
-               cursor = getPosition(event);
-               if(lockvisible) {
-                       lockviewhide();
-               }
-               else {
-                       lockvisible = true;
-                       $.get('lockview/' + id, function(data) {
-                               $('#panel').html(data);
-                               $('#panel').css({ 'left': cursor.x + 5 , 'top': cursor.y + 5});
-                               $('#panel').show();
-                       });
-               }
-       }
-
-       function lockviewhide() {
-               lockvisible = false;
-               $('#panel').hide();
-       }
-
-       function post_comment(id) {
-               commentBusy = true;
-               $('body').css('cursor', 'wait');
-               $.post(  
-             "item",  
-             $("#comment-edit-form-" + id).serialize(),
-                       function(data) {
-                               if(data.success) {
-                                       $("#comment-edit-wrapper-" + id).hide();
-                                       $("#comment-edit-text-" + id).val('');
-                               var tarea = document.getElementById("comment-edit-text-" + id);
-                                       if(tarea)
-                                               commentClose(tarea,id);
-                                       if(timer) clearTimeout(timer);
-                                       timer = setTimeout(NavUpdate,10);
-                               }
-                               if(data.reload) {
-                                       window.location.href=data.reload;
-                               }
-                       },
-                       "json"  
-         );  
-         return false;  
-       }
-
-
-    function bin2hex(s){  
-        // Converts the binary representation of data to hex    
-        //   
-        // version: 812.316  
-        // discuss at: http://phpjs.org/functions/bin2hex  
-        // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)  
-        // +   bugfixed by: Onno Marsman  
-        // +   bugfixed by: Linuxworld  
-        // *     example 1: bin2hex('Kev');  
-        // *     returns 1: '4b6576'  
-        // *     example 2: bin2hex(String.fromCharCode(0x00));  
-        // *     returns 2: '00'  
-        var v,i, f = 0, a = [];  
-        s += '';  
-        f = s.length;  
-          
-        for (i = 0; i<f; i++) {  
-            a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");  
-        }  
-          
-        return a.join('');  
-    }  
-
-       function groupChangeMember(gid,cid) {
-               $('body .fakelink').css('cursor', 'wait');
-               $.get('group/' + gid + '/' + cid, function(data) {
-                               $('#group-update-wrapper').html(data);
-                               $('body .fakelink').css('cursor', 'auto');                              
-               });
-       }
-
-       function profChangeMember(gid,cid) {
-               $('body .fakelink').css('cursor', 'wait');
-               $.get('profperm/' + gid + '/' + cid, function(data) {
-                               $('#prof-update-wrapper').html(data);
-                               $('body .fakelink').css('cursor', 'auto');                              
-               });
-       }
-
-       function contactgroupChangeMember(gid,cid) {
-               $('body').css('cursor', 'wait');
-               $.get('contactgroup/' + gid + '/' + cid, function(data) {
-                               $('body').css('cursor', 'auto');
-               });
-       }
-
-
-function checkboxhighlight(box) {
-  if($(box).is(':checked')) {
-       $(box).addClass('checkeditem');
-  }
-  else {
-       $(box).removeClass('checkeditem');
-  }
-}
-
-function setupFieldRichtext(){
-       tinyMCE.init({
-               theme : "advanced",
-               mode : "specific_textareas",
-               editor_selector: "fieldRichtext",
-               plugins : "bbcode,paste",
-               theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
-               theme_advanced_buttons2 : "",
-               theme_advanced_buttons3 : "",
-               theme_advanced_toolbar_location : "top",
-               theme_advanced_toolbar_align : "center",
-               theme_advanced_blockformats : "blockquote,code",
-               paste_text_sticky : true,
-               entity_encoding : "raw",
-               add_unload_trigger : false,
-               remove_linebreaks : false,
-               force_p_newlines : false,
-               force_br_newlines : true,
-               forced_root_block : '',
-               convert_urls: false,
-               content_css: baseurl+"/view/custom_tinymce.css",
-               theme_advanced_path : false,
-       });
-}
-
-/** 
- * sprintf in javascript 
- *     "{0} and {1}".format('zero','uno'); 
- **/
-String.prototype.format = function() {
-    var formatted = this;
-    for (var i = 0; i < arguments.length; i++) {
-        var regexp = new RegExp('\\{'+i+'\\}', 'gi');
-        formatted = formatted.replace(regexp, arguments[i]);
-    }
-    return formatted;
-};
-// Array Remove
-Array.prototype.remove = function(item) {
-  to=undefined; from=this.indexOf(item);
-  var rest = this.slice((to || from) + 1 || this.length);
-  this.length = from < 0 ? this.length + from : from;
-  return this.push.apply(this, rest);
-};
-
index 895c321e6ad39ac893d3dadd3585c1d34377a97f..16ec941aa8b9d007c6fa133950e8d9c0e70fbe2c 100644 (file)
@@ -37,11 +37,29 @@ function nav(&$a) {
         * Display login or logout
         */
 
+       $nav['usermenu']=array();
+       $userinfo = null;
+
        if(local_user()) {
                $nav['logout'] = Array('logout',t('Logout'), "", t('End this session'));
+               
+               // user menu
+               $nav['usermenu'][] = Array('profile/' . $a->user['nickname'], t('Status'), "", t('Your posts and conversations'));
+               $nav['usermenu'][] = Array('profile/' . $a->user['nickname']. '?tab=profile', t('Profile'), "", t('Your profile page'));
+               $nav['usermenu'][] = Array('photos/' . $a->user['nickname'], t('Photos'), "", t('Your photos'));
+               $nav['usermenu'][] = Array('events/', t('Events'), "", t('Your events'));
+               $nav['usermenu'][] = Array('notes/', t('Personal notes'), "", t('Your personal photos'));
+               
+               // user info
+               $r = q("SELECT micro FROM contact WHERE uid=%d AND self=1", intval($a->user['uid']));
+               $userinfo = array(
+                       'icon' => (count($r) ? $r[0]['micro']: $a->get_baseurl()."/images/default-profile-mm.jpg"),
+                       'name' => $a->user['username'],
+               );
+               
        }
        else {
-               $nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'nav-selected':''), t('Sign in'));
+               $nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'selected':''), t('Sign in'));
        }
 
 
@@ -63,7 +81,7 @@ function nav(&$a) {
        if(! get_config('system','hide_help'))
                $nav['help'] = array($help_url, t('Help'), "", t('Help and documentation'));
 
-       if($a->apps)
+       if(count($a->apps)>0)
                $nav['apps'] = array('apps', t('Apps'), "", t('Addon applications, utilities, games'));
 
        $nav['search'] = array('search', t('Search'), "", t('Search site content'));
@@ -137,8 +155,31 @@ function nav(&$a) {
                '$sitelocation' => $sitelocation,
                '$nav' => $nav,
                '$banner' =>  $banner,
+               '$emptynotifications' => t('Nothing new here'),
+               '$userinfo' => $userinfo,
+               '$sel' =>       $a->nav_sel,
+               '$apps' => $a->apps,
        ));
 
        call_hooks('page_header', $a->page['nav']);
+}
 
+/*
+ * Set a menu item in navbar as selected
+ * 
+ */
+function nav_set_selected($item){
+       $a = get_app();
+    $a->nav_sel = array(
+               'community'     => null,
+               'network'               => null,
+               'home'                  => null,
+               'profiles'              => null,
+               'notifications' => null,
+               'messages'              => null,
+               'directory'     => null,
+               'settings'              => null,
+               'contacts'              => null,
+       );
+       $a->nav_sel[$item] = 'selected';
 }
index f0dd828d14cb7508b45a4d7f373f35d62c564f01..ec99d1e0dc12a0c0ec1f206187ae958782d60f91 100644 (file)
@@ -9,37 +9,37 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) {
 
        $a = get_app();
 
-       $ch = curl_init($url);
+       $ch = @curl_init($url);
        if(($redirects > 8) || (! $ch)) 
                return false;
 
-       curl_setopt($ch, CURLOPT_HEADER, true);
-       curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
-       curl_setopt($ch, CURLOPT_USERAGENT, "Friendika");
+       @curl_setopt($ch, CURLOPT_HEADER, true);
+       @curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
+       @curl_setopt($ch, CURLOPT_USERAGENT, "Friendika");
 
        if(intval($timeout)) {
-               curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
+               @curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        }
        else {
                $curl_time = intval(get_config('system','curl_timeout'));
-               curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
+               @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
        }
        // by default we will allow self-signed certs
        // but you can override this
 
        $check_cert = get_config('system','verifyssl');
-       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+       @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
 
        $prx = get_config('system','proxy');
        if(strlen($prx)) {
-               curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
-               curl_setopt($ch, CURLOPT_PROXY, $prx);
-               $prxusr = get_config('system','proxyuser');
+               @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
+               @curl_setopt($ch, CURLOPT_PROXY, $prx);
+               $prxusr = @get_config('system','proxyuser');
                if(strlen($prxusr))
-                       curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr);
+                       @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr);
        }
        if($binary)
-               curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
+               @curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
 
        $a->set_curl_code(0);
 
@@ -49,7 +49,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) {
        $s = @curl_exec($ch);
 
        $base = $s;
-       $curl_info = curl_getinfo($ch);
+       $curl_info = @curl_getinfo($ch);
        $http_code = $curl_info['http_code'];
 
        $header = '';
@@ -80,7 +80,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) {
 
        $a->set_curl_headers($header);
 
-       curl_close($ch);
+       @curl_close($ch);
        return($body);
 }}
 
@@ -259,22 +259,29 @@ function convert_xml_element_to_array($xml_element, &$recursion_depth=0) {
 // or if the resultant personal XRD doesn't contain a supported 
 // subscription/friend-request attribute.
 
+// amended 7/9/2011 to return an hcard which could save potentially loading 
+// a lengthy content page to scrape dfrn attributes
+
 if(! function_exists('webfinger_dfrn')) {
-function webfinger_dfrn($s) {
+function webfinger_dfrn($s,&$hcard) {
        if(! strstr($s,'@')) {
                return $s;
        }
+       $profile_link = '';
+
        $links = webfinger($s);
        logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA);
        if(count($links)) {
-               foreach($links as $link)
+               foreach($links as $link) {
                        if($link['@attributes']['rel'] === NAMESPACE_DFRN)
-                               return $link['@attributes']['href'];
-               foreach($links as $link)
+                               $profile_link = $link['@attributes']['href'];
                        if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB)
-                               return 'stat:' . $link['@attributes']['template'];              
+                               $profile_link = 'stat:' . $link['@attributes']['template'];     
+                       if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard')
+                               $hcard = $link['@attributes']['href'];                          
+               }
        }
-       return '';
+       return $profile_link;
 }}
 
 // Given an email style address, perform webfinger lookup and 
@@ -536,7 +543,7 @@ function fetch_xrd_links($url) {
                        $aliases = array($alias);
                else
                        $aliases = $alias;
-               if($aliases && count($aliases)) {
+               if(is_array($aliases) && count($aliases)) {
                        foreach($aliases as $alias) {
                                $links[]['@attributes'] = array('rel' => 'alias' , 'href' => $alias);
                        }
@@ -694,24 +701,59 @@ function parse_xml_string($s,$strict = true) {
        return $x;
 }}
 
-function add_fcontact($arr) {
-
-       $r = q("insert into fcontact ( `url`,`name`,`photo`,`request`,`nick`,`addr`,
-               `notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated` )
-               values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
-               dbesc($arr['url']),
-               dbesc($arr['name']),
-               dbesc($arr['photo']),
-               dbesc($arr['request']),
-               dbesc($arr['nick']),
-               dbesc($arr['addr']),
-               dbesc($arr['notify']),
-               dbesc($arr['poll']),
-               dbesc($arr['confirm']),
-               dbesc($arr['network']),
-               dbesc($arr['alias']),
-               dbesc($arr['pubkey']),
-               dbesc(datetime_convert())
-       );
+function add_fcontact($arr,$update = false) {
+
+       if($update) {
+               $r = q("UPDATE `fcontact` SET
+                       `name` = '%s',
+                       `photo` = '%s',
+                       `request` = '%s',
+                       `nick` = '%s',
+                       `addr` = '%s',
+                       `batch` = '%s',
+                       `notify` = '%s',
+                       `poll` = '%s',
+                       `confirm` = '%s',
+                       `alias` = '%s',
+                       `pubkey` = '%s',
+                       `updated` = '%s'
+                       WHERE `url` = '%s' AND `network` = '%s' LIMIT 1", 
+                       dbesc($arr['name']),
+                       dbesc($arr['photo']),
+                       dbesc($arr['request']),
+                       dbesc($arr['nick']),
+                       dbesc($arr['addr']),
+                       dbesc($arr['batch']),
+                       dbesc($arr['notify']),
+                       dbesc($arr['poll']),
+                       dbesc($arr['confirm']),
+                       dbesc($arr['network']),
+                       dbesc($arr['alias']),
+                       dbesc($arr['pubkey']),
+                       dbesc(datetime_convert()),
+                       dbesc($arr['url']),
+                       dbesc($arr['network'])
+               );
+       }
+       else {
+               $r = q("insert into fcontact ( `url`,`name`,`photo`,`request`,`nick`,`addr`,
+                       `batch`, `notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated` )
+                       values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
+                       dbesc($arr['url']),
+                       dbesc($arr['name']),
+                       dbesc($arr['photo']),
+                       dbesc($arr['request']),
+                       dbesc($arr['nick']),
+                       dbesc($arr['addr']),
+                       dbesc($arr['batch']),
+                       dbesc($arr['notify']),
+                       dbesc($arr['poll']),
+                       dbesc($arr['confirm']),
+                       dbesc($arr['network']),
+                       dbesc($arr['alias']),
+                       dbesc($arr['pubkey']),
+                       dbesc(datetime_convert())
+               );
+       }
        return $r;
 }
index 7b645844f6985ca4722d834d1e7a8343a57d1424..d1cd1cc7399c8f5ba84527407020135e7f21eaff 100644 (file)
@@ -1,6 +1,21 @@
 <?php
+
 require_once("boot.php");
 
+/*
+ * This file was at one time responsible for doing all deliveries, but this caused
+ * big problems on shared hosting systems, where the process might get killed by the 
+ * hosting provider and nothing would get delivered. 
+ * It now only delivers one message under certain cases, and invokes a queued
+ * delivery mechanism (include/deliver.php) to deliver individual contacts at 
+ * controlled intervals.
+ * This has a much better chance of surviving random processes getting killed
+ * by the hosting provider. 
+ * A lot of this code is duplicated in include/deliver.php until we have time to go back
+ * and re-structure the delivery procedure based on the obstacles that have been thrown at 
+ * us by hosting providers. 
+ */
+
 function notifier_run($argv, $argc){
        global $a, $db;
 
@@ -35,7 +50,6 @@ function notifier_run($argv, $argc){
        $cmd = $argv[1];
 
        switch($cmd) {
-
                case 'mail':
                default:
                        $item_id = intval($argv[2]);
@@ -46,6 +60,8 @@ function notifier_run($argv, $argc){
        }
 
        $expire = false;
+       $mail = false;
+       $fsuggest = false;
        $top_level = false;
        $recipients = array();
        $url_recipients = array();
@@ -54,6 +70,7 @@ function notifier_run($argv, $argc){
 
        if($cmd === 'mail') {
                $normal_mode = false;
+               $mail = true;
                $message = q("SELECT * FROM `mail` WHERE `id` = %d LIMIT 1",
                                intval($item_id)
                );
@@ -69,7 +86,7 @@ function notifier_run($argv, $argc){
                $normal_mode = false;
                $expire = true;
                $items = q("SELECT * FROM `item` WHERE `uid` = %d AND `wall` = 1 
-                       AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP - INTERVAL 10 MINUTE",
+                       AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP() - INTERVAL 10 MINUTE",
                        intval($item_id)
                );
                $uid = $item_id;
@@ -79,6 +96,8 @@ function notifier_run($argv, $argc){
        }
        elseif($cmd === 'suggest') {
                $normal_mode = false;
+               $fsuggest = true;
+
                $suggest = q("SELECT * FROM `fsuggest` WHERE `id` = %d LIMIT 1",
                        intval($item_id)
                );
@@ -104,7 +123,11 @@ function notifier_run($argv, $argc){
                $uid = $r[0]['uid'];
                $updated = $r[0]['edited'];
 
-               $items = q("SELECT * FROM `item` WHERE `parent` = %d ORDER BY `id` ASC",
+               if(! $parent_id)
+                       return;
+
+               $items = q("SELECT `item`.*, `sign`.`signed_text`,`sign`.`signature`,`sign`.`signer` 
+                       FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d ORDER BY `id` ASC",
                        intval($parent_id)
                );
 
@@ -119,8 +142,11 @@ function notifier_run($argv, $argc){
                                $item['deleted'] = 1;
                }
 
-               if(count($items) == 1 && $items[0]['uri'] === $items[0]['parent-uri'])
+               if((count($items) == 1) && ($items[0]['uri'] === $items[0]['parent-uri'])) {
+                       logger('notifier: top level post');
                        $top_level = true;
+               }
+
        }
 
        $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, 
@@ -136,6 +162,8 @@ function notifier_run($argv, $argc){
 
        $owner = $r[0];
 
+       $walltowall = ((($top_level) && ($owner['id'] != $items[0]['contact-id'])) ? true : false);
+
        $hub = get_config('system','huburl');
 
        // If this is a public conversation, notify the feed hub
@@ -144,7 +172,7 @@ function notifier_run($argv, $argc){
        // fill this in with a single salmon slap if applicable
        $slap = '';
 
-       if($cmd != 'mail' && $cmd != 'suggest') {
+       if(! ($mail || $fsuggest)) {
 
                require_once('include/group.php');
 
@@ -235,7 +263,6 @@ function notifier_run($argv, $argc){
 
                $r = q("SELECT * FROM `contact` WHERE `id` IN ( $conversant_str ) AND `blocked` = 0 AND `pending` = 0");
 
-
                if(count($r))
                        $contacts = $r;
        }
@@ -270,7 +297,7 @@ function notifier_run($argv, $argc){
                        '$birthday'     => $birthday
        ));
 
-       if($cmd === 'mail') {
+       if($mail) {
                $public_message = false;  // mail is  not public
 
                $body = fix_private_photos($item['body'],$owner['uid']);
@@ -286,7 +313,7 @@ function notifier_run($argv, $argc){
                        '$parent_id'    => xmlify($item['parent-uri'])
                ));
        }
-       elseif($cmd === 'suggest') {
+       elseif($fsuggest) {
                $public_message = false;  // suggestions are not public
 
                $sugg_template = get_markup_template('atom_suggest.tpl');
@@ -374,17 +401,45 @@ function notifier_run($argv, $argc){
                dbesc($recip_str)
        );
 
-       // delivery loop
 
        require_once('include/salmon.php');
 
+       $interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval')));
+
+       // delivery loop
+
        if(count($r)) {
+
+               foreach($r as $contact) {
+                       if((! $mail) && (! $fsuggest) && (! $followup) && (! $contact['self'])) {
+                               if(($contact['network'] === NETWORK_DIASPORA) && ($public_message))
+                                       continue;
+                               q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )",
+                                       dbesc($cmd),
+                                       intval($item_id),
+                                       intval($contact['id'])
+                               );
+                       }
+               }
+
                foreach($r as $contact) {
                        if($contact['self'])
                                continue;
 
+                       // potentially more than one recipient. Start a new process and space them out a bit.
+                       // we will deliver single recipient types of message and email receipients here. 
+
+                       if((! $mail) && (! $fsuggest) && (! $followup)) {
+                               proc_run('php','include/delivery.php',$cmd,$item_id,$contact['id']);
+                               if($interval)
+                                       @time_sleep_until(microtime(true) + (float) $interval);
+                               continue;
+                       }
+
                        $deliver_status = 0;
 
+                       logger("main delivery by notifier: followup=$followup mail=$mail fsuggest=$fsuggest");
+
                        switch($contact['network']) {
                                case NETWORK_DFRN:
                                        logger('notifier: dfrndelivery: ' . $contact['name']);
@@ -533,9 +588,19 @@ function notifier_run($argv, $argc){
                                        break;
                                case NETWORK_DIASPORA:
                                        require_once('include/diaspora.php');
+
                                        if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
                                                break;
 
+                                       // special handling for followup to public post
+                                       // all other public posts processed as public batches further below
+
+                                       if($public_message) {
+                                               if($followup)
+                                                       diaspora_send_followup($target_item,$owner,$contact, true);
+                                               break;
+                                       }
+
                                        if(! $contact['pubkey'])
                                                break;
                                        
@@ -558,7 +623,8 @@ function notifier_run($argv, $argc){
                                                diaspora_send_relay($target_item,$owner,$contact);
                                                break;
                                        }               
-                                       elseif($top_level) {
+                                       elseif(($top_level) && (! $walltowall)) {
+                                               // currently no workable solution for sending walltowall
                                                diaspora_send_status($target_item,$owner,$contact);
                                                break;
                                        }
@@ -589,109 +655,77 @@ function notifier_run($argv, $argc){
                }
        }
 
-       if((strlen($hub)) && ($public_message)) {
-               $hubs = explode(',', $hub);
-               if(count($hubs)) {
-                       foreach($hubs as $h) {
-                               $h = trim($h);
-                               if(! strlen($h))
-                                       continue;
-                               $params = 'hub.mode=publish&hub.url=' . urlencode($a->get_baseurl() . '/dfrn_poll/' . $owner['nickname'] );
-                               post_url($h,$params);
-                               logger('pubsub: publish: ' . $h . ' ' . $params . ' returned ' . $a->get_curl_code());
-                               if(count($hubs) > 1)
-                                       sleep(7);                               // try and avoid multiple hubs responding at precisely the same time
-                       }
-               }
-       }
 
        if($public_message) {
 
-               /**
-                *
-                * If you have less than 999 dfrn friends and it's a public message,
-                * we'll just go ahead and push them out securely with dfrn/rino or Diaspora.
-                * If you've got more than that, you'll have to rely on PuSH delivery.
-                *
-                */
-
-               $max_allowed = ((get_config('system','maxpubdeliver') === false) ? 999 : intval(get_config('system','maxpubdeliver')));
-                               
-               /**
-                *
-                * Only get the bare essentials and go back for the full record. 
-                * If you've got a lot of friends and we grab all the details at once it could exhaust memory. 
-                *
-                */
-
-               $r = q("SELECT `id`, `name` FROM `contact` 
-                       WHERE `network` in ('%s','%s') AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
-                       AND `rel` != %d ",
-                       dbesc(NETWORK_DFRN),
+               $r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s' 
+                       AND `uid` = %d AND `rel` != %d ORDER BY rand() ",
                        dbesc(NETWORK_DIASPORA),
                        intval($owner['uid']),
                        intval(CONTACT_IS_SHARING)
                );
+                       
+               $r2 = q("SELECT `id`, `name`,`network` FROM `contact` 
+                       WHERE `network` = '%s' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
+                       AND `rel` != %d order by rand() ",
+                       dbesc(NETWORK_DFRN),
+                       intval($owner['uid']),
+                       intval(CONTACT_IS_SHARING)
+               );
 
-               if((count($r)) && (($max_allowed == 0) || (count($r) < $max_allowed))) {
+               $r = array_merge($r2,$r1);
 
-                       logger('pubdeliver: ' . print_r($r,true));
+               if(count($r)) {
+                       logger('pubdeliver: ' . print_r($r,true), LOGGER_DEBUG);
+
+                       // throw everything into the queue in case we get killed
 
                        foreach($r as $rr) {
+                               if((! $mail) && (! $fsuggest) && (! $followup)) {
+                                       q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )",
+                                               dbesc($cmd),
+                                               intval($item_id),
+                                               intval($rr['id'])
+                                       );
+                               }
+                       }
 
-                               /* Don't deliver to folks who have already been delivered to */
+                       foreach($r as $rr) {
+
+                               // except for Diaspora batch jobs
+                               // Don't deliver to folks who have already been delivered to
 
-                               if(in_array($rr['id'],$conversants))
+                               if(($rr['network'] !== NETWORK_DIASPORA) && (in_array($rr['id'],$conversants))) {
+                                       logger('notifier: already delivered id=' . $rr['id']);
                                        continue;
+                               }
 
-                               $n = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
-                                               intval($rr['id'])
-                               );
+                               if((! $mail) && (! $fsuggest) && (! $followup)) {
+                                       logger('notifier: delivery agent: ' . $rr['name'] . ' ' . $rr['id']); 
+                                       proc_run('php','include/delivery.php',$cmd,$item_id,$rr['id']);
+                                       if($interval)
+                                               @time_sleep_until(microtime(true) + (float) $interval);
+                               }
+                       }
+               }
 
-                               if(count($n)) {
-                                       $contact = $n[0];
-                                       switch($contact['network']) {
-                                               case NETWORK_DFRN :
-                                                       logger('notifier: dfrnpubdelivery: ' . $contact['name']);
-                                                       $deliver_status = dfrn_deliver($owner,$contact,$atom);
-                                                       break;
-                                               case NETWORK_DIASPORA :
-                                                       require_once('include/diaspora.php');
-                                                       if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
-                                                               break;
-                                                       
-                                                       if(! $contact['pubkey'])
-                                                               break;
-                                       
-                                                       if($target_item['verb'] === ACTIVITY_DISLIKE) {
-                                                               // unsupported
-                                                               break;
-                                                       }
-                                                       elseif(($target_item['deleted']) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
-                                                               // diaspora delete, 
-                                                               diaspora_send_retraction($target_item,$owner,$contact);
-                                                               break;
-                                                       }
-                                                       elseif($followup) {
-                                                               // send comments, likes and retractions of likes to owner to relay
-                                                               diaspora_send_followup($target_item,$owner,$contact);
-                                                               break;
-                                                       }
-                                                       elseif($target_item['parent'] != $target_item['id']) {
-                                                               // we are the relay - send comments, likes and unlikes to our conversants
-                                                               diaspora_send_relay($target_item,$owner,$contact);
-                                                               break;
-                                                       }               
-                                                       elseif($top_level) {
-                                                               diaspora_send_status($target_item,$owner,$contact);
-                                                               break;
-                                                       }
-                                               default:
-                                                       break;
-                                       }
+
+               if(strlen($hub)) {
+                       $hubs = explode(',', $hub);
+                       if(count($hubs)) {
+                               foreach($hubs as $h) {
+                                       $h = trim($h);
+                                       if(! strlen($h))
+                                               continue;
+                                       $params = 'hub.mode=publish&hub.url=' . urlencode($a->get_baseurl() . '/dfrn_poll/' . $owner['nickname'] );
+                                       post_url($h,$params);
+                                       logger('pubsub: publish: ' . $h . ' ' . $params . ' returned ' . $a->get_curl_code());
+                                       if(count($hubs) > 1)
+                                               sleep(7);                               // try and avoid multiple hubs responding at precisely the same time
                                }
                        }
                }
+
        }
 
        return;
index 49f10073702f8b58e5995eec45bcc8a821bfa220..83e76ba9d60b9b1c0d05254a53b3647fb64090bc 100644 (file)
@@ -90,8 +90,11 @@ if(! function_exists('load_translation_table')) {
 function load_translation_table($lang) {
        global $a;
 
-       if(file_exists("view/$lang/strings.php"))
+       if(file_exists("view/$lang/strings.php")) {
                include("view/$lang/strings.php");
+       }
+       else
+               $a->strings = array();
 }}
 
 // translate string if translation exists
@@ -110,12 +113,15 @@ function t($s) {
 
 if(! function_exists('tt')){
 function tt($singular, $plural, $count){
-       
+       global $lang;
        $a = get_app();
 
        if(x($a->strings,$singular)) {
                $t = $a->strings[$singular];
-               $k = string_plural_select($count);
+               $f = 'string_plural_select_' . str_replace('-','_',$lang);
+               if(! function_exists($f))
+                       $f = 'string_plural_select_default';
+               $k = $f($count);
                return is_array($t)?$t[$k]:$t;
        }
        
@@ -124,4 +130,13 @@ function tt($singular, $plural, $count){
        } else {
                return $singular;
        }
-}}
\ No newline at end of file
+}}
+
+// provide a fallback which will not collide with 
+// a function defined in any language file 
+
+if(! function_exists('string_plural_select_default')) {
+function string_plural_select_default($n) {
+       return ($n != 1);
+}}
+
index e80b696bf8615f9ca89df7963f01a76f1cd4d9c1..89a3408ec90efcf04deca6aa7f5e1dd00afecee2 100644 (file)
@@ -38,6 +38,18 @@ function poller_run($argv, $argc){
 
        proc_run('php',"include/queue.php");
        
+       // expire any expired accounts
+
+       q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0 
+               AND `account_expires_on` != '0000-00-00 00:00:00' 
+               AND `account_expires_on` < UTC_TIMESTAMP() ");
+  
+       $abandon_days = intval(get_config('system','account_abandon_days'));
+       if($abandon_days < 1)
+               $abandon_days = 0;
+
+       
+
        // once daily run expire in background
 
        $d1 = get_config('system','last_expire_day');
@@ -86,11 +98,17 @@ function poller_run($argv, $argc){
        // and which have a polling address and ignore Diaspora since 
        // we are unable to match those posts with a Diaspora GUID and prevent duplicates.
 
-       $contacts = q("SELECT `id` FROM `contact` 
+       $abandon_sql = (($abandon_days) 
+               ? sprintf(" AND `user`.`login_date` > UTC_TIMESTAMP() - INTERVAL %d DAY ", intval($abandon_days)) 
+               : '' 
+       );
+
+       $contacts = q("SELECT `contact`.`id` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` 
                WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
                AND `network` != '%s'
                $sql_extra 
-               AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()",
+               AND `self` = 0 AND `contact`.`blocked` = 0 AND `contact`.`readonly` = 0 
+               AND `user`.`account_expired` = 0 $abandon_sql ORDER BY RAND()",
                intval(CONTACT_IS_SHARING),
                intval(CONTACT_IS_FRIEND),
                dbesc(NETWORK_DIASPORA)
@@ -137,6 +155,8 @@ function poller_run($argv, $argc){
                                        if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force)
                                                        $hub_update = true;
                                }
+                               else
+                                       $hub_update = false;
 
                                /**
                                 * Based on $contact['priority'], should we poll this site now? Or later?
@@ -472,21 +492,25 @@ function poller_run($argv, $argc){
        
                                consume_feed($xml,$importer,$contact,$hub,1);
 
+                               $hubmode = 'subscribe';
+                               if($contact['network'] === NETWORK_DFRN || $contact['blocked'] || $contact['readonly'])
+                                       $hubmode = 'unsubscribe';
 
-                               if((strlen($hub)) && ($hub_update) && (($contact['rel'] == CONTACT_IS_FRIEND) || (($contact['network'] === NETWORK_OSTATUS) && (! $contact['readonly'])))) {
-                                       logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
+                               if((strlen($hub)) && ($hub_update) && ($contact['rel'] != CONTACT_IS_FOLLOWER)) {
+                                       logger('poller: hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
                                        $hubs = explode(',', $hub);
                                        if(count($hubs)) {
                                                foreach($hubs as $h) {
                                                        $h = trim($h);
                                                        if(! strlen($h))
                                                                continue;
-                                                       subscribe_to_hub($h,$importer,$contact);
+                                                       subscribe_to_hub($h,$importer,$contact,$hubmode);
                                                }
                                        }
                                }
                        }
 
+
                        $updated = datetime_convert();
 
                        $r = q("UPDATE `contact` SET `last-update` = '%s', `success_update` = '%s' WHERE `id` = %d LIMIT 1",
index c1dfad66f4e2c6f2dbc4e75a9887f3edf45417bc..22e035fe64758178de83b3bb47ef9ffa6560d227 100644 (file)
@@ -12,8 +12,8 @@ if($a->profile['name']) {
 
 $o .= <<< EOT
 <div id="advanced-profile-name-wrapper" >
-<div id="advanced-profile-name-text">$lbl_fullname</div>
-<div id="advanced-profile-name">$fullname</div>
+<div id="advanced-profile-name-text" class="advanced-profile-label">$lbl_fullname</div>
+<div id="advanced-profile-name" class="advanced-profile-content">$fullname</div>
 </div>
 <div id="advanced-profile-name-end"></div>
 EOT;
@@ -25,8 +25,8 @@ if($a->profile['gender']) {
 
 $o .= <<< EOT
 <div id="advanced-profile-gender-wrapper" >
-<div id="advanced-profile-gender-text">$lbl_gender</div>
-<div id="advanced-profile-gender">$gender</div>
+<div id="advanced-profile-gender-text" class="advanced-profile-label">$lbl_gender</div>
+<div id="advanced-profile-gender" class="advanced-profile-content">$gender</div>
 </div>
 <div id="advanced-profile-gender-end"></div>
 EOT;
@@ -37,7 +37,7 @@ if(($a->profile['dob']) && ($a->profile['dob'] != '0000-00-00')) {
 
 $o .= <<< EOT
 <div id="advanced-profile-dob-wrapper" >
-<div id="advanced-profile-dob-text">$lbl_birthday</div>
+<div id="advanced-profile-dob-text" class="advanced-profile-label">$lbl_birthday</div>
 EOT;
 
 // If no year, add an arbitrary one so just we can parse the month and day.
@@ -45,7 +45,7 @@ EOT;
 $year_bd_format = t('j F, Y');
 $short_bd_format = t('j F');
 
-$o .= '<div id="advanced-profile-dob">' 
+$o .= '<div id="advanced-profile-dob" class="advanced-profile-content">' 
        . ((intval($a->profile['dob'])) 
                ? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00',$year_bd_format))
                : day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00',$short_bd_format))) 
@@ -59,8 +59,8 @@ if($age = age($a->profile['dob'],$a->profile['timezone'],'')) {
        $lbl_age = t('Age:');
 $o .= <<< EOT
 <div id="advanced-profile-age-wrapper" >
-<div id="advanced-profile-age-text">$lbl_age</div>
-<div id="advanced-profile-age">$age</div>
+<div id="advanced-profile-age-text" class="advanced-profile-label">$lbl_age</div>
+<div id="advanced-profile-age" class="advanced-profile-content">$age</div>
 </div>
 <div id="advanced-profile-age-end"></div>
 EOT;
@@ -72,8 +72,8 @@ if($a->profile['marital']) {
 
 $o .= <<< EOT
 <div id="advanced-profile-marital-wrapper" >
-<div id="advanced-profile-marital-text">$lbl_marital</div>
-<div id="advanced-profile-marital">$marital</div>
+<div id="advanced-profile-marital-text" class="advanced-profile-label">$lbl_marital</div>
+<div id="advanced-profile-marital" class="advanced-profile-content">$marital</div>
 EOT;
 
 if($a->profile['with']) {
@@ -92,8 +92,8 @@ if($a->profile['sexual']) {
 
 $o .= <<< EOT
 <div id="advanced-profile-sexual-wrapper" >
-<div id="advanced-profile-sexual-text">$lbl_sexual</div>
-<div id="advanced-profile-sexual">$sexual</div>
+<div id="advanced-profile-sexual-text" class="advanced-profile-label">$lbl_sexual</div>
+<div id="advanced-profile-sexual" class="advanced-profile-content">$sexual</div>
 </div>
 <div id="advanced-profile-sexual-end"></div>
 EOT;
@@ -104,8 +104,8 @@ if($a->profile['homepage']) {
        $homepage = linkify($a->profile['homepage']);
 $o .= <<< EOT
 <div id="advanced-profile-homepage-wrapper" >
-<div id="advanced-profile-homepage-text">$lbl_homepage</div>
-<div id="advanced-profile-homepage">$homepage</div>
+<div id="advanced-profile-homepage-text" class="advanced-profile-label">$lbl_homepage</div>
+<div id="advanced-profile-homepage" class="advanced-profile-content">$homepage</div>
 </div>
 <div id="advanced-profile-homepage-end"></div>
 EOT;
@@ -116,8 +116,8 @@ if($a->profile['politic']) {
        $politic = $a->profile['politic'];
 $o .= <<< EOT
 <div id="advanced-profile-politic-wrapper" >
-<div id="advanced-profile-politic-text">$lbl_politic</div>
-<div id="advanced-profile-politic">$politic</div>
+<div id="advanced-profile-politic-text" class="advanced-profile-label">$lbl_politic</div>
+<div id="advanced-profile-politic" class="advanced-profile-content">$politic</div>
 </div>
 <div id="advanced-profile-politic-end"></div>
 EOT;
@@ -128,8 +128,8 @@ if($a->profile['religion']) {
        $religion = $a->profile['religion'];
 $o .= <<< EOT
 <div id="advanced-profile-religion-wrapper" >
-<div id="advanced-profile-religion-text">$lbl_religion</div>
-<div id="advanced-profile-religion">$religion</div>
+<div id="advanced-profile-religion-text" class="advanced-profile-label">$lbl_religion</div>
+<div id="advanced-profile-religion" class="advanced-profile-content">$religion</div>
 </div>
 <div id="advanced-profile-religion-end"></div>
 EOT;
@@ -138,9 +138,9 @@ if($txt = prepare_text($a->profile['about'])) {
        $lbl_about = t('About:');
 $o .= <<< EOT
 <div id="advanced-profile-about-wrapper" >
-<div id="advanced-profile-about-text">$lbl_about</div>
+<div id="advanced-profile-about-text" class="advanced-profile-label">$lbl_about</div>
 <br />
-<div id="advanced-profile-about">$txt</div>
+<div id="advanced-profile-about" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-about-end"></div>
 EOT;
@@ -150,9 +150,9 @@ if($txt = prepare_text($a->profile['interest'])) {
        $lbl_interests = t('Hobbies/Interests:');
 $o .= <<< EOT
 <div id="advanced-profile-interest-wrapper" >
-<div id="advanced-profile-interest-text">$lbl_interests</div>
+<div id="advanced-profile-interest-text" class="advanced-profile-label">$lbl_interests</div>
 <br />
-<div id="advanced-profile-interest">$txt</div>
+<div id="advanced-profile-interest" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-interest-end"></div>
 EOT;
@@ -162,9 +162,9 @@ if($txt = prepare_text($a->profile['contact'])) {
        $lbl_contact = t('Contact information and Social Networks:');
 $o .= <<< EOT
 <div id="advanced-profile-contact-wrapper" >
-<div id="advanced-profile-contact-text">$lbl_contact</div>
+<div id="advanced-profile-contact-text" class="advanced-profile-label">$lbl_contact</div>
 <br />
-<div id="advanced-profile-contact">$txt</div>
+<div id="advanced-profile-contact" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-contact-end"></div>
 EOT;
@@ -174,9 +174,9 @@ if($txt = prepare_text($a->profile['music'])) {
        $lbl_music = t('Musical interests:');
 $o .= <<< EOT
 <div id="advanced-profile-music-wrapper" >
-<div id="advanced-profile-music-text">$lbl_music</div>
+<div id="advanced-profile-music-text" class="advanced-profile-label">$lbl_music</div>
 <br />
-<div id="advanced-profile-music">$txt</div>
+<div id="advanced-profile-music" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-music-end"></div>
 EOT;
@@ -186,9 +186,9 @@ if($txt = prepare_text($a->profile['book'])) {
        $lbl_book = t('Books, literature:');
 $o .= <<< EOT
 <div id="advanced-profile-book-wrapper" >
-<div id="advanced-profile-book-text">$lbl_book</div>
+<div id="advanced-profile-book-text" class="advanced-profile-label">$lbl_book</div>
 <br />
-<div id="advanced-profile-book">$txt</div>
+<div id="advanced-profile-book" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-book-end"></div>
 EOT;
@@ -198,9 +198,9 @@ if($txt = prepare_text($a->profile['tv'])) {
        $lbl_tv = t('Television:');
 $o .= <<< EOT
 <div id="advanced-profile-tv-wrapper" >
-<div id="advanced-profile-tv-text">$lbl_tv</div>
+<div id="advanced-profile-tv-text" class="advanced-profile-label">$lbl_tv</div>
 <br />
-<div id="advanced-profile-tv">$txt</div>
+<div id="advanced-profile-tv" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-tv-end"></div>
 EOT;
@@ -210,9 +210,9 @@ if($txt = prepare_text($a->profile['film'])) {
        $lbl_film = t('Film/dance/culture/entertainment:');
 $o .= <<< EOT
 <div id="advanced-profile-film-wrapper" >
-<div id="advanced-profile-film-text">$lbl_film</div>
+<div id="advanced-profile-film-text" class="advanced-profile-label">$lbl_film</div>
 <br />
-<div id="advanced-profile-film">$txt</div>
+<div id="advanced-profile-film" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-film-end"></div>
 EOT;
@@ -222,9 +222,9 @@ if($txt = prepare_text($a->profile['romance'])) {
        $lbl_romance = t('Love/Romance:');
 $o .= <<< EOT
 <div id="advanced-profile-romance-wrapper" >
-<div id="advanced-profile-romance-text">$lbl_romance</div>
+<div id="advanced-profile-romance-text" class="advanced-profile-label">$lbl_romance</div>
 <br />
-<div id="advanced-profile-romance">$txt</div>
+<div id="advanced-profile-romance" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-romance-end"></div>
 EOT;
@@ -234,9 +234,9 @@ if($txt = prepare_text($a->profile['work'])) {
        $lbl_work = t('Work/employment:');
 $o .= <<< EOT
 <div id="advanced-profile-work-wrapper" >
-<div id="advanced-profile-work-text">$lbl_work</div>
+<div id="advanced-profile-work-text" class="advanced-profile-label">$lbl_work</div>
 <br />
-<div id="advanced-profile-work">$txt</div>
+<div id="advanced-profile-work" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-work-end"></div>
 EOT;
@@ -246,9 +246,9 @@ if($txt = prepare_text($a->profile['education'])) {
        $lbl_education = t('School/education:');
 $o .= <<< EOT
 <div id="advanced-profile-education-wrapper" >
-<div id="advanced-profile-education-text">$lbl_education</div>
+<div id="advanced-profile-education-text" class="advanced-profile-label">$lbl_education</div>
 <br />
-<div id="advanced-profile-education">$txt</div>
+<div id="advanced-profile-education" class="advanced-profile-content">$txt</div>
 </div>
 <div id="advanced-profile-education-end"></div>
 EOT;
index da5028aee5e59697ce4c43092257e3ed2c81d44e..d312b50f5a99fe778feee4563f4252098ca813cc 100644 (file)
@@ -3,18 +3,18 @@ require_once("boot.php");
 require_once('include/queue_fn.php');
 
 function queue_run($argv, $argc){
-  global $a, $db;
+       global $a, $db;
 
-  if(is_null($a)){
-    $a = new App;
-  }
+       if(is_null($a)){
+               $a = new App;
+       }
   
-  if(is_null($db)){
-    @include(".htconfig.php");
-    require_once("dba.php");
-    $db = new dba($db_host, $db_user, $db_pass, $db_data);
-    unset($db_host, $db_user, $db_pass, $db_data);
-  };
+       if(is_null($db)){
+               @include(".htconfig.php");
+               require_once("dba.php");
+               $db = new dba($db_host, $db_user, $db_pass, $db_data);
+               unset($db_host, $db_user, $db_pass, $db_data);
+       };
 
 
        require_once("session.php");
@@ -29,10 +29,27 @@ function queue_run($argv, $argc){
 
        load_hooks();
 
+       if($argc > 1)
+               $queue_id = intval($argv[1]);
+       else
+               $queue_id = 0;
+
        $deadguys = array();
 
        logger('queue: start');
 
+       $interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval')));
+
+       $r = q("select * from deliverq where 1");
+       if(count($r)) {
+               foreach($r as $rr) {
+                       logger('queue: deliverq');
+                       proc_run('php','include/delivery.php',$rr['cmd'],$rr['item'],$rr['contact']);
+                       if($interval)
+                               @time_sleep_until(microtime(true) + (float) $interval);
+               }
+       }
+
        $r = q("SELECT `queue`.*, `contact`.`name`, `contact`.`uid` FROM `queue` 
                LEFT JOIN `contact` ON `queue`.`cid` = `contact`.`id` 
                WHERE `queue`.`created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
@@ -44,13 +61,19 @@ function queue_run($argv, $argc){
                q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
        }
                
-       $r = q("SELECT `id` FROM `queue` WHERE `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ");
+       if($queue_id)
+               $r = q("SELECT `id` FROM `queue` WHERE `id` = %d LIMIT 1",
+                       intval($queue_id)
+               );
+       else
+               $r = q("SELECT `id` FROM `queue` WHERE `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ");
 
        if(! count($r)){
                return;
        }
 
-       call_hooks('queue_predeliver', $a, $r);
+       if(! $queue_id)
+               call_hooks('queue_predeliver', $a, $r);
 
 
        // delivery loop
@@ -63,9 +86,16 @@ function queue_run($argv, $argc){
                // queue_predeliver hooks may have changed the queue db details, 
                // so check again if this entry still needs processing
 
-               $qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ",
-                       intval($q_item['id'])
-               );
+               if($queue_id) {
+                       $qi = q("select * from queue where `id` = %d limit 1",
+                               intval($queue_id)
+                       );
+               }
+               else {
+                       $qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ",
+                               intval($q_item['id'])
+                       );
+               }
                if(! count($qi))
                        continue;
 
@@ -83,7 +113,8 @@ function queue_run($argv, $argc){
                                continue;
                }
 
-               $u = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
+               $u = q("SELECT `user`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey` 
+                       FROM `user` WHERE `uid` = %d LIMIT 1",
                        intval($c[0]['uid'])
                );
                if(! count($u)) {
@@ -92,6 +123,7 @@ function queue_run($argv, $argc){
                }
 
                $data      = $qi[0]['content'];
+               $public    = $qi[0]['batch'];
                $contact   = $c[0];
                $owner     = $u[0];
 
@@ -124,7 +156,7 @@ function queue_run($argv, $argc){
                        case NETWORK_DIASPORA:
                                if($contact['notify']) {
                                        logger('queue: diaspora_delivery: item ' . $q_item['id'] . ' for ' . $contact['name']);
-                                       $deliver_status = diaspora_transmit($owner,$contact['notify'],$data);
+                                       $deliver_status = diaspora_transmit($owner,$contact,$data,$public);
 
                                        if($deliver_status == (-1))
                                                update_queue_time($q_item['id']);
index 4043b4f1d93f0c1f243b564e86b9cc1f0453c5c8..3d525f51ad36d0a2d55349937c140e404f8b56ea 100644 (file)
@@ -73,6 +73,13 @@ function slapper($owner,$url,$slap) {
        if(! strlen($url))
                return;
 
+
+       if(! $owner['sprvkey']) {
+               logger(sprintf("slapper: user '%s' (%d) does not have a salmon private key. Send failed.",
+               $owner['username'],$owner['uid']));
+               return;
+       }
+
        // add all namespaces to item
 
 $namespaces = <<< EOT
@@ -102,11 +109,11 @@ EOT;
 
        $precomputed = '.YXBwbGljYXRpb24vYXRvbSt4bWw=.YmFzZTY0dXJs.UlNBLVNIQTI1Ng==';
 
-       $signature   = base64url_encode(rsa_sign(str_replace('=','',$data . $precomputed),true),$owner['sprvkey']);
+       $signature   = base64url_encode(rsa_sign(str_replace('=','',$data . $precomputed),$owner['sprvkey']));
 
-       $signature2  = base64url_encode(rsa_sign($data . $precomputed),$owner['sprvkey']);
+       $signature2  = base64url_encode(rsa_sign($data . $precomputed,$owner['sprvkey']));
 
-       $signature3  = base64url_encode(rsa_sign($data),$owner['sprvkey']);
+       $signature3  = base64url_encode(rsa_sign($data,$owner['sprvkey']));
 
        $salmon_tpl = get_markup_template('magicsig.tpl');
 
@@ -180,6 +187,9 @@ EOT;
        logger('slapper returned ' . $return_code); 
        if(! $return_code)
                return(-1);
+       if(($return_code == 503) && (stristr($a->get_curl_headers(),'retry-after')))
+               return(-1);
+
        return ((($return_code >= 200) && ($return_code < 300)) ? 0 : 1);
 }
 
index 83f680f0262a43983f11bbaaf2732e95b2ef4808..63d75eaa4eda15fb9dfe2a1e3e01a223bf219179 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+
        class Template {
                var $r;
                var $search;
@@ -8,18 +9,23 @@
                var $nodes = array();
                var $done = false;
                var $d = false;
+               var $lang = null;
+               
                
                private function _preg_error(){
                        switch(preg_last_error()){
-                           case PREG_INTERNAL_ERROR: die('PREG_INTERNAL_ERROR'); break;
-                           case PREG_BACKTRACK_LIMIT_ERROR: die('PREG_BACKTRACK_LIMIT_ERROR'); break;
-                           case PREG_RECURSION_LIMIT_ERROR: die('PREG_RECURSION_LIMIT_ERROR'); break;
-                           case PREG_BAD_UTF8_ERROR: die('PREG_BAD_UTF8_ERROR'); break;
-                           case PREG_BAD_UTF8_OFFSET_ERROR: die('PREG_BAD_UTF8_OFFSET_ERROR'); break;
+                           case PREG_INTERNAL_ERROR: echo('PREG_INTERNAL_ERROR'); break;
+                           case PREG_BACKTRACK_LIMIT_ERROR: echo('PREG_BACKTRACK_LIMIT_ERROR'); break;
+                           case PREG_RECURSION_LIMIT_ERROR: echo('PREG_RECURSION_LIMIT_ERROR'); break;
+                           case PREG_BAD_UTF8_ERROR: echo('PREG_BAD_UTF8_ERROR'); break;
+                           case PREG_BAD_UTF8_OFFSET_ERROR: echo('PREG_BAD_UTF8_OFFSET_ERROR'); break;
                            default:
                                        //die("Unknown preg error.");
                                        return;
                        }
+                       echo "<hr><pre>";
+                       debug_print_backtrace();
+                       die();
                }
                
                private function _build_replace($r, $prefix){
                        krsort($this->nodes);
                        return $s;
                }
-               
+
+       
                public function replace($s, $r) {
                        $this->r = $r;
                        $this->search = array();
                        $s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s);
                        if ($s==Null) $this->_preg_error();
                        
+                       // remove comments block
+                       $s = preg_replace('/{#[^#]*#}/', "" , $s);
+                                               
                        // replace strings recursively (limit to 10 loops)
                        $os = ""; $count=0;
                        while($os!=$s && $count<10){
                                $os=$s; $count++;
                                $s = str_replace($this->search,$this->replace, $s);
                        }
-                       return $s;
+                       return template_unescape($s);
                }
        }
        
        $t = new Template;
+
+
+
+
+function template_escape($s) {
+
+       return str_replace(array('$','{{'),array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),$s);
+
+
+}
+
+function template_unescape($s) {
+
+       return str_replace(array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),array('$','{{'),$s);
+
+
+
+}
index 66447069e455ad6c53a9cd90a9514d14bd0361ba..656cd8809c927dc1f42ccec54825c94a0ece6686 100644 (file)
@@ -388,11 +388,13 @@ function get_intltext_template($s) {
 
 if(! function_exists('get_markup_template')) {
 function get_markup_template($s) {
-
+       $a=get_app();
        $theme = current_theme();
        
        if(file_exists("view/theme/$theme/$s"))
                return file_get_contents("view/theme/$theme/$s");
+       elseif (x($a->theme_info,"extends") && file_exists("view/theme/".$a->theme_info["extends"]."/$s"))
+               return file_get_contents("view/theme/".$a->theme_info["extends"]."/$s");
        else
                return file_get_contents("view/$s");
 
@@ -482,13 +484,12 @@ function get_tags($s) {
                                // we might be inside a bbcode color tag - leave it alone
                                continue;
                        }
+                       if(substr($mtch,-1,1) === '.')
+                               $mtch = substr($mtch,0,-1);
                        // ignore strictly numeric tags like #1
                        if((strpos($mtch,'#') === 0) && ctype_digit(substr($mtch,1)))
                                continue;
-                       if(substr($mtch,-1,1) === '.')
-                               $ret[] = substr($mtch,0,-1);
-                       else
-                               $ret[] = $mtch;
+                       $ret[] = $mtch;
                }
        }
        return $ret;
@@ -539,22 +540,30 @@ function contact_block() {
                $total = intval($r[0]['total']);
        }
        if(! $total) {
-               $o .= '<h4 class="contact-h4">' . t('No contacts') . '</h4>';
-               return $o;
-       }
-       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT %d",
-                       intval($a->profile['uid']),
-                       intval($shown)
-       );
-       if(count($r)) {
-               $o .= '<h4 class="contact-h4">' .  sprintf( tt('%d Contact','%d Contacts', $total),$total) . '</h4><div id="contact-block">';
-               foreach($r as $rr) {
-                       $o .= micropro($rr,true,'mpfriend');
-               }
-               $o .= '</div><div id="contact-block-end"></div>';
-               $o .=  '<div id="viewcontacts"><a id="viewcontacts-link" href="viewcontacts/' . $a->profile['nickname'] . '">' . t('View Contacts') . '</a></div>';
+               $contacts = t('No contacts');
+               $micropro = Null;
                
+       } else {
+               $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT %d",
+                               intval($a->profile['uid']),
+                               intval($shown)
+               );
+               if(count($r)) {
+                       $contacts = sprintf( tt('%d Contact','%d Contacts', $total),$total);
+                       $micropro = Array();
+                       foreach($r as $rr) {
+                               $micropro[] = micropro($rr,true,'mpfriend');
+                       }
+               }
        }
+       
+       $tpl = get_markup_template('contact_block.tpl');
+       $o = replace_macros($tpl, array(
+               '$contacts' => $contacts,
+               '$nickname' => $a->profile['nickname'],
+               '$viewcontacts' => t('View Contacts'),
+               '$micropro' => $micropro,
+       ));
 
        $arr = array('contacts' => $r, 'output' => $o);
 
@@ -571,11 +580,13 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
 
        $url = $contact['url'];
        $sparkle = '';
+       $redir = false;
 
        if($redirect) {
                $a = get_app();
                $redirect_url = $a->get_baseurl() . '/redir/' . $contact['id'];
                if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === 'dfrn')) {
+                       $redir = true;
                        $url = $redirect_url;
                        $sparkle = ' sparkle';
                }
@@ -586,6 +597,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
        if($textmode) {
                return '<div class="contact-block-textdiv' . $class . '"><a class="contact-block-link' . $class . $sparkle 
                        . (($click) ? ' fakelink' : '') . '" '
+                       . (($redir) ? ' target="redir" ' : '')
                        . (($url) ? ' href="' . $url . '"' : '') . $click
                        . '" title="' . $contact['name'] . ' [' . $contact['url'] . ']" alt="' . $contact['name'] 
                        . '" >'. $contact['name'] . '</a></div>' . "\r\n";
@@ -593,6 +605,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
        else {
                return '<div class="contact-block-div' . $class . '"><a class="contact-block-link' . $class . $sparkle 
                        . (($click) ? ' fakelink' : '') . '" '
+                       . (($redir) ? ' target="redir" ' : '')
                        . (($url) ? ' href="' . $url . '"' : '') . $click . ' ><img class="contact-block-img' . $class . $sparkle . '" src="' 
                        . $contact['micro'] . '" title="' . $contact['name'] . ' [' . $contact['url'] . ']" alt="' . $contact['name'] 
                        . '" /></a></div>' . "\r\n";
@@ -602,12 +615,14 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
 
 
 if(! function_exists('search')) {
-function search($s,$id='search-box',$url='/search') {
+function search($s,$id='search-box',$url='/search',$save = false) {
        $a = get_app();
        $o  = '<div id="' . $id . '">';
        $o .= '<form action="' . $a->get_baseurl() . $url . '" method="get" >';
        $o .= '<input type="text" name="search" id="search-text" value="' . $s .'" />';
        $o .= '<input type="submit" name="submit" id="search-submit" value="' . t('Search') . '" />'; 
+       if($save)
+               $o .= '<input type="submit" name="save" id="search-save" value="' . t('Save') . '" />'; 
        $o .= '</form></div>';
        return $o;
 }}
@@ -630,7 +645,8 @@ function valid_email($x){
 
 if(! function_exists('linkify')) {
 function linkify($s) {
-       $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%\$\!\+]*)/", ' <a href="$1" target="external-link">$1</a>', $s);
+       $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\'\%\$\!\+]*)/", ' <a href="$1" target="external-link">$1</a>', $s);
+       $s = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$s);
        return($s);
 }}
 
@@ -651,7 +667,7 @@ if(! function_exists('smilies')) {
 function smilies($s) {
        $a = get_app();
 
-       return str_replace(
+       $s = str_replace(
        array( '&lt;3', '&lt;/3', '&lt;\\3', ':-)', ':)', ';-)', ':-(', ':(', ':-P', ':P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O', 
                '~friendika', 'Diaspora*' ),
        array(
@@ -675,6 +691,10 @@ function smilies($s) {
                '<a href="http://joindiaspora.com">Diaspora<img src="' . $a->get_baseurl() . '/images/diaspora.png" alt="Diaspora*" /></a>',
 
        ), $s);
+
+       call_hooks('smilie', $s);
+       return $s;
+
 }}
 
 
@@ -816,9 +836,14 @@ function feed_salmonlinks($nick) {
 if(! function_exists('get_plink')) {
 function get_plink($item) {
        $a = get_app(); 
-       $plink = (((x($item,'plink')) && (! $item['private'])) ? '<div class="wall-item-links-wrapper"><a href="' 
-                       . $item['plink'] . '" title="' . t('link to source') . '" target="external-link" class="icon remote-link"></a></div>' : '');
-       return $plink;
+       if (x($item,'plink') && (! $item['private'])){
+               return array(
+                       'href' => $item['plink'],
+                       'title' => t('link to source'),
+               );
+       } else {
+               return false;
+       }
 }}
 
 if(! function_exists('unamp')) {
@@ -837,10 +862,16 @@ function lang_selector() {
        $o .= '<form action="" method="post" ><select name="system_language" onchange="this.form.submit();" >';
        $langs = glob('view/*/strings.php');
        if(is_array($langs) && count($langs)) {
+               $langs[] = '';
                if(! in_array('view/en/strings.php',$langs))
                        $langs[] = 'view/en/';
                asort($langs);
                foreach($langs as $l) {
+                       if($l == '') {
+                               $default_selected = ((! x($_SESSION,'language')) ? ' selected="selected" ' : '');
+                               $o .= '<option value="" ' . $default_selected . '>' . t('default') . '</option>';
+                               continue;
+                       }
                        $ll = substr($l,5);
                        $ll = substr($ll,0,strrpos($ll,'/'));
                        $selected = (($ll === $lang) ? ' selected="selected" ' : '');
@@ -909,6 +940,60 @@ function base64url_decode($s) {
        return base64_decode(strtr($s,'-_','+/'));
 }
 
-function cc_license() {
-return '<div class="cc-license">' . t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.') . '</div>';
-}
+
+if (!function_exists('str_getcsv')) {
+    function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\', $eol = '\n') {
+        if (is_string($input) && !empty($input)) {
+            $output = array();
+            $tmp    = preg_split("/".$eol."/",$input);
+            if (is_array($tmp) && !empty($tmp)) {
+                while (list($line_num, $line) = each($tmp)) {
+                    if (preg_match("/".$escape.$enclosure."/",$line)) {
+                        while ($strlen = strlen($line)) {
+                            $pos_delimiter       = strpos($line,$delimiter);
+                            $pos_enclosure_start = strpos($line,$enclosure);
+                            if (
+                                is_int($pos_delimiter) && is_int($pos_enclosure_start)
+                                && ($pos_enclosure_start < $pos_delimiter)
+                                ) {
+                                $enclosed_str = substr($line,1);
+                                $pos_enclosure_end = strpos($enclosed_str,$enclosure);
+                                $enclosed_str = substr($enclosed_str,0,$pos_enclosure_end);
+                                $output[$line_num][] = $enclosed_str;
+                                $offset = $pos_enclosure_end+3;
+                            } else {
+                                if (empty($pos_delimiter) && empty($pos_enclosure_start)) {
+                                    $output[$line_num][] = substr($line,0);
+                                    $offset = strlen($line);
+                                } else {
+                                    $output[$line_num][] = substr($line,0,$pos_delimiter);
+                                    $offset = (
+                                                !empty($pos_enclosure_start)
+                                                && ($pos_enclosure_start < $pos_delimiter)
+                                                )
+                                                ?$pos_enclosure_start
+                                                :$pos_delimiter+1;
+                                }
+                            }
+                            $line = substr($line,$offset);
+                        }
+                    } else {
+                        $line = preg_split("/".$delimiter."/",$line);
+   
+                        /*
+                         * Validating against pesky extra line breaks creating false rows.
+                         */
+                        if (is_array($line) && !empty($line[0])) {
+                            $output[$line_num] = $line;
+                        } 
+                    }
+                }
+                return $output;
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+} 
diff --git a/include/zotfns.php b/include/zotfns.php
deleted file mode 100644 (file)
index b23fce8..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-
-
-require_once('include/salmon.php');
-require_once('include/crypto.php');
-
-
-function zot_get($url,$args) {
-       $argstr = '';
-       foreach($args as $k => $v) {
-               if($argstr)
-                       $argstr .= '&';
-               $argstr .= $k . '=' . $v;
-       }       
-       $s = fetch_url($url . '?' . $argstr);
-       if($s) {
-               $j = json_decode($s);
-               if($j)
-                       return($j);
-       }
-       return false;
-}
-
-function zot_post($url,$args) {
-       $s = post_url($url,$args);
-       if($s) {
-               $j = json_decode($s);
-               if($j)
-                       return($j);
-       }
-       return false;
-}
-
-
-function zot_prv_encode($s,$prvkey) {
-       $x = '';
-       $res = openssl_private_encrypt($s,$x,$prvkey);
-       return base64url_encode($y);
-}
-function zot_pub_encode($s,$pubkey) {
-       $x = '';
-       $res = openssl_public_encrypt($s,$x,$pubkey);
-       return base64url_encode($x);
-}
-
-function zot_prv_decode($s,$prvkey) {
-       $s = base64url_decode($s);
-       $x = '';
-       openssl_private_decrypt($s,$x,$prvkey);
-       return $x;
-}
-
-function zot_pub_decode($s,$pubkey) {
-       $s = base64url_decode($s);
-       $x = '';
-       openssl_public_decrypt($s,$x,$pubkey);
-       return $x;
-}
-
-
-function zot_getzid($url,$myaddress,$myprvkey) {
-       $ret = array();
-       $j = zot_get($url,array('sender' => $myaddress));
-       if($j->zid_encoded)
-               $ret['zid'] = zot_prv_decode($j->zid_encoded,$myprvkey);
-       if($j->zkey_encoded)
-               $ret['zkey'] = zot_prv_decode($j->zkey_encoded,$myprvkey);
-       return $ret;
-}
-
-function zot_post_init($url,$zid,$myprvkey,$theirpubkey) {
-       $ret = array();
-
-       $zinit = random_string(32);
-
-       $j = zot_get($url,array('zid' => $zid,'zinit' => $zinit));
-       
-       $a = get_app();
-       if(! $a->get_curl_code())
-               return ZCURL_TIMEOUT;
-       if(! $j->zinit) {
-               logger('zot_post_init: no zinit returned.');
-               return false;
-       }
-       if(zot_pub_decode($j->zinit,$thierpubkey) !== $zinit) {
-               logger('zot_post_init: incorrect zinit returned.');
-               return false;
-       }
-
-       if($j->challenge) {
-               $s = zot_prv_decode($j->challenge,$myprvkey);
-               $s1 = substr($s,0,strpos($s,'.'));
-               if($s1 != $zid) {
-                       logger("zot_post_init: incorrect zid returned");
-                       return false;
-               }
-               $ret['result'] = substr($s,strpos($s,'.') + 1);
-               $ret['perms'] = $j->perms;
-       }
-       return $ret;
-}
-
-
-function zot_encrypt_data($data,&$key) {
-       $key = random_string();
-       return aes_encrypt($data,$key);
-}
-
-
-// encrypt the data prior to calling this function so it only need be done once per message
-// regardless of the number of recipients.
-
-function zot_post_data($url,$zid,$myprvkey,$theirpubkey,$encrypted_data,$key, $intro = false) {
-       $i = zot_post_init($url,$zid,$myprvkey,$theirpubkey);
-       if($i === ZCURL_TIMEOUT)
-               return ZCURL_TIMEOUT;
-
-       if((! $i) || (! array_key_exists('perms',$i)) || (! array_key_exists('result',$i)))
-               return false;
-       if((! stristr($i['perms'],'post')) && ($intro === false)) {
-               logger("zot_post_data: no permission to post: url=$url zid=$zid");
-               return false;
-       } 
-       $p = array();
-       $p['zid'] = $zid;
-       $p['result'] = zot_pub_encode($i['result'],$theirpubkey);
-       $p['aes_key'] = zot_prv_encode($key,$myprvkey);
-       $p['data'] = $encrypted_data;
-       $s = zot_post($url,$p);
-       $a = get_app();
-       if(! $a->get_curl_code())
-               return ZCURL_TIMEOUT;
-
-       if($s) {
-               $j = json_decode($s); 
-               return $j;
-       }
-       return false;
-}
-       
-function zot_deliver($recipients,$myprvkey,$data) {
-
-       if(is_array($recipients) && count($recipients)) {
-
-               $key = '';
-               $encrypted = zot_encrypt_data($data,$key);
-
-
-               foreach($recipients as $r) {
-                       $result = zot_post_data(
-                               $r['post'],
-                               $r['zid'],
-                               $myprvkey,
-                               $r['pubkey'],
-                               $encrypted,
-                               $key
-                       );
-                       if($result === false) {
-                               // post failed
-                               logger('zot_deliver: failed: ' . print_r($r,true));
-                       }
-                       elseif($result === ZCURL_TIMEOUT) {
-                               // queue for redelivery
-                       }
-                       elseif($result->error) {
-                               // failed at other end
-                               logger('zot_deliver: remote failure: ' . $result->error . ' ' . print_r($r,true));
-                       }
-                       elseif($result->success) {
-                               logger('zot_deliver: success ' . print_r($r,true, LOGGER_DEBUG));
-                       }
-                       else
-                               logger('zot_deliver: unknown failure.');
-               }
-       }
-}
-
-
-function zot_new_contact($user,$cc) {
-
-       $zid = random_string(32);
-       $zkey = random_string(32);
-
-       logger("zot_new_contact: zid=$zid zkey=$zkey uid={$user['uid']} " . print_r($cc,true));
-
-       $ret = array();
-       $ret['zid_encoded'] = zot_pub_encode($zid,$cc['pubkey']);
-       $ret['zkey_encoded'] = zot_pub_encode($zkey,$cc['pubkey']);
-       return $ret;
-
-
-       
-
-
-}
\ No newline at end of file
index 80e8ca3b027de00de8c45540f790af8bfa0e0021..3d8648528cf7609f5e847fc5572d10c736ddaea1 100644 (file)
--- a/index.php
+++ b/index.php
@@ -84,8 +84,12 @@ session_start();
  * We have to do it here because the session was just now opened.
  */
 
-if(x($_POST,'system_language'))
-       $_SESSION['language'] = $_POST['system_language'];
+if(array_key_exists('system_language',$_POST)) {
+       if(strlen($_POST['system_language']))
+               $_SESSION['language'] = $_POST['system_language'];
+       else
+               unset($_SESSION['language']);
+}
 if((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
        $lang = $_SESSION['language'];
        load_translation_table($lang);
@@ -112,10 +116,10 @@ if(! x($_SESSION,'authenticated'))
        header('X-Account-Management-Status: none');
 
 if(! x($_SESSION,'sysmsg'))
-       $_SESSION['sysmsg'] = '';
+       $_SESSION['sysmsg'] = array();
 
 if(! x($_SESSION,'sysmsg_info'))
-       $_SESSION['sysmsg_info'] = '';
+       $_SESSION['sysmsg_info'] = array();
 
 /*
  * check_config() is responsible for running update scripts. These automatically 
@@ -136,7 +140,6 @@ call_hooks('app_menu', $arr);
 
 $a->apps = $arr['app_menu'];
 
-
 /**
  *
  * We have already parsed the server path into $a->argc and $a->argv
@@ -195,8 +198,8 @@ if(strlen($a->module)) {
 
        if(! $a->module_loaded) {
 
-               // Stupid browser tried to pre-fetch our ACL img template. Don't log the event or return anything - just quietly exit.
-               if((x($_SERVER,'QUERY_STRING')) && strpos($_SERVER['QUERY_STRING'],'{0}') !== false) {
+               // Stupid browser tried to pre-fetch our Javascript img template. Don't log the event or return anything - just quietly exit.
+               if((x($_SERVER,'QUERY_STRING')) && preg_match('/{[0-9]}/',$_SERVER['QUERY_STRING']) !== 0) {
                        killme();
                }
 
@@ -207,10 +210,20 @@ if(strlen($a->module)) {
 
                logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG);
                header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
-               notice( t('Page not found.' ) . EOL);
+               $tpl = get_markup_template("404.tpl");
+               $a->page['content'] = replace_macros($tpl, array(
+                       '$message' =>  t('Page not found.' )
+               ));
        }
 }
 
+/**
+ * load current theme info
+ */
+$theme_info_file = "view/theme/".current_theme()."/theme.php";
+if (file_exists($theme_info_file)){
+       require_once($theme_info_file);
+}
 
 
 /* initialise content region */
@@ -262,7 +275,7 @@ if(isset($homebase))
 // now that we've been through the module content, see if the page reported
 // a permission problem and if so, a 403 response would seem to be in order.
 
-if(stristr($_SESSION['sysmsg'], t('Permission denied'))) {
+if(stristr( implode("",$_SESSION['sysmsg']), t('Permission denied'))) {
        header($_SERVER["SERVER_PROTOCOL"] . ' 403 ' . t('Permission denied.'));
 }
 
@@ -272,7 +285,7 @@ if(stristr($_SESSION['sysmsg'], t('Permission denied'))) {
  *
  */
        
-if(x($_SESSION,'sysmsg')) {
+/*if(x($_SESSION,'sysmsg')) {
        $a->page['content'] = "<div id=\"sysmsg\" class=\"error-message\">{$_SESSION['sysmsg']}</div>\r\n"
                . ((x($a->page,'content')) ? $a->page['content'] : '');
        $_SESSION['sysmsg']="";
@@ -283,7 +296,7 @@ if(x($_SESSION,'sysmsg_info')) {
                . ((x($a->page,'content')) ? $a->page['content'] : '');
        $_SESSION['sysmsg_info']="";
        unset($_SESSION['sysmsg_info']);
-}
+}*/
 
 
 
@@ -306,7 +319,6 @@ $a->page['content'] .=  '<div id="pause"></div>';
  */
 
 if($a->module != 'install') {
-       require_once('nav.php');
        nav($a);
 }
 
diff --git a/js/acl.js b/js/acl.js
new file mode 100644 (file)
index 0000000..b270adb
--- /dev/null
+++ b/js/acl.js
@@ -0,0 +1,246 @@
+function ACL(backend_url, preset){
+       that = this;
+       
+       that.url = backend_url;
+       
+       that.kp_timer = null;
+       
+       if (preset==undefined) preset = [];
+       that.allow_cid = (preset[0] || []);
+       that.allow_gid = (preset[1] || []);
+       that.deny_cid  = (preset[2] || []);
+       that.deny_gid  = (preset[3] || []);
+       that.group_uids = [];
+       that.nw = 4; //items per row. should be calulated from #acl-list.width
+       
+       that.list_content = $("#acl-list-content");
+       that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html());
+       that.showall = $("#acl-showall");
+
+       if (preset.length==0) that.showall.addClass("selected");
+       
+       /*events*/
+       that.showall.click(that.on_showall);
+       $(".acl-button-show").live('click', that.on_button_show);
+       $(".acl-button-hide").live('click', that.on_button_hide);
+       $("#acl-search").keypress(that.on_search);
+       $("#acl-wrapper").parents("form").submit(that.on_submit);
+       
+       /* startup! */
+       that.get(0,100);
+}
+
+ACL.prototype.on_submit = function(){
+       aclfileds = $("#acl-fields").html("");
+       $(that.allow_gid).each(function(i,v){
+               aclfileds.append("<input type='hidden' name='group_allow[]' value='"+v+"'>");
+       });
+       $(that.allow_cid).each(function(i,v){
+               aclfileds.append("<input type='hidden' name='contact_allow[]' value='"+v+"'>");
+       });
+       $(that.deny_gid).each(function(i,v){
+               aclfileds.append("<input type='hidden' name='group_deny[]' value='"+v+"'>");
+       });
+       $(that.deny_cid).each(function(i,v){
+               aclfileds.append("<input type='hidden' name='contact_deny[]' value='"+v+"'>");
+       });     
+}
+
+ACL.prototype.search = function(){
+       var srcstr = $("#acl-search").val();
+       that.list_content.html("");
+       that.get(0,100, srcstr);
+}
+
+ACL.prototype.on_search = function(event){
+       if (that.kp_timer) clearTimeout(that.kp_timer);
+       that.kp_timer = setTimeout( that.search, 1000);
+}
+
+ACL.prototype.on_showall = function(event){
+       event.preventDefault()
+       event.stopPropagation();
+       
+       if (that.showall.hasClass("selected")){
+               return false;
+       }
+       that.showall.addClass("selected");
+       
+       that.allow_cid = [];
+       that.allow_gid = [];
+       that.deny_cid  = [];
+       that.deny_gid  = [];
+       
+       that.update_view();
+       
+       return false;
+}
+
+ACL.prototype.on_button_show = function(event){
+       event.preventDefault()
+       event.stopImmediatePropagation()
+       event.stopPropagation();
+
+       /*that.showall.removeClass("selected");
+       $(this).siblings(".acl-button-hide").removeClass("selected");
+       $(this).toggleClass("selected");*/
+
+       that.set_allow($(this).parent().attr('id'));
+
+       return false;
+}
+ACL.prototype.on_button_hide = function(event){
+       event.preventDefault()
+       event.stopImmediatePropagation()
+       event.stopPropagation();
+
+       /*that.showall.removeClass("selected");
+       $(this).siblings(".acl-button-show").removeClass("selected");
+       $(this).toggleClass("selected");*/
+
+       that.set_deny($(this).parent().attr('id'));
+
+       return false;
+}
+
+ACL.prototype.set_allow = function(itemid){
+       type = itemid[0];
+       id       = parseInt(itemid.substr(1));
+       switch(type){
+               case "g":
+                       if (that.allow_gid.indexOf(id)<0){
+                               that.allow_gid.push(id)
+                       }else {
+                               that.allow_gid.remove(id);
+                       }
+                       if (that.deny_gid.indexOf(id)>=0) that.deny_gid.remove(id);
+                       break;
+               case "c":
+                       if (that.allow_cid.indexOf(id)<0){
+                               that.allow_cid.push(id)
+                       } else {
+                               that.allow_cid.remove(id);
+                       }
+                       if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id);                     
+                       break;
+       }
+       that.update_view();
+}
+
+ACL.prototype.set_deny = function(itemid){
+       type = itemid[0];
+       id       = parseInt(itemid.substr(1));
+       switch(type){
+               case "g":
+                       if (that.deny_gid.indexOf(id)<0){
+                               that.deny_gid.push(id)
+                       } else {
+                               that.deny_gid.remove(id);
+                       }
+                       if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id);
+                       break;
+               case "c":
+                       if (that.deny_cid.indexOf(id)<0){
+                               that.deny_cid.push(id)
+                       } else {
+                               that.deny_cid.remove(id);
+                       }
+                       if (that.allow_cid.indexOf(id)>=0) that.allow_cid.remove(id);
+                       break;
+       }
+       that.update_view();
+}
+
+ACL.prototype.update_view = function(){
+       if (that.allow_gid.length==0 && that.allow_cid.length==0 &&
+               that.deny_gid.length==0 && that.deny_cid.length==0){
+                       that.showall.addClass("selected");
+                       /* jot acl */
+                               $('#jot-perms-icon').removeClass('lock').addClass('unlock');
+                               $('#jot-public').show();
+                               $('.profile-jot-net input').attr('disabled', false);                    
+                               if(typeof editor != 'undefined' && editor != false) {
+                                       $('#profile-jot-desc').html(ispublic);
+                               }
+                       
+       } else {
+                       that.showall.removeClass("selected");
+                       /* jot acl */
+                               $('#jot-perms-icon').removeClass('unlock').addClass('lock');
+                               $('#jot-public').hide();
+                               $('.profile-jot-net input').attr('disabled', 'disabled');                       
+                               $('#profile-jot-desc').html('&nbsp;');
+       }
+       
+       $("#acl-list-content .acl-list-item").each(function(){
+               itemid = $(this).attr('id');
+               type = itemid[0];
+               id       = parseInt(itemid.substr(1));
+               
+               btshow = $(this).children(".acl-button-show").removeClass("selected");
+               bthide = $(this).children(".acl-button-hide").removeClass("selected");  
+               
+               switch(type){
+                       case "g":
+                               var uclass = "";
+                               if (that.allow_gid.indexOf(id)>=0){
+                                       btshow.addClass("selected");
+                                       bthide.removeClass("selected");
+                                       uclass="groupshow";
+                               }
+                               if (that.deny_gid.indexOf(id)>=0){
+                                       btshow.removeClass("selected");
+                                       bthide.addClass("selected");
+                                       uclass="grouphide";
+                               }
+                               
+                               $(that.group_uids[id]).each(function(i,v){
+                                       $("#c"+v).removeClass("groupshow grouphide").addClass(uclass);
+                               });
+                               
+                               break;
+                       case "c":
+                               if (that.allow_cid.indexOf(id)>=0){
+                                       btshow.addClass("selected");
+                                       bthide.removeClass("selected");
+                               }
+                               if (that.deny_cid.indexOf(id)>=0){
+                                       btshow.removeClass("selected");
+                                       bthide.addClass("selected");
+                               }                       
+               }
+               
+       });
+       
+}
+
+
+ACL.prototype.get = function(start,count, search){
+       var postdata = {
+               start:start,
+               count:count,
+               search:search,
+       }
+       
+       $.ajax({
+               type:'POST',
+               url: that.url,
+               data: postdata,
+               dataType: 'json',
+               success:that.populate
+       });
+}
+
+ACL.prototype.populate = function(data){
+       var height = Math.ceil(data.tot / that.nw) * 42;
+       that.list_content.height(height);
+       $(data.items).each(function(){
+               html = "<div class='acl-list-item {4} {5}' title='{6}' id='{2}{3}'>"+that.item_tpl+"</div>";
+               html = html.format( this.photo, this.name, this.type, this.id, '', this.network, this.link );
+               if (this.uids!=undefined) that.group_uids[this.id] = this.uids;
+               //console.log(html);
+               that.list_content.append(html);
+       });
+       that.update_view();
+}
+
diff --git a/js/ajaxupload.js b/js/ajaxupload.js
new file mode 100644 (file)
index 0000000..67c4a56
--- /dev/null
@@ -0,0 +1,695 @@
+/**
+ * AJAX Upload ( http://valums.com/ajax-upload/ ) 
+ * Copyright (c) Andris Valums
+ * Licensed under the MIT license ( http://valums.com/mit-license/ )
+ * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions. 
+ */
+
+(function () {
+    /* global window */
+    /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */
+    
+    /**
+     * Wrapper for FireBug's console.log
+     */
+    function log(){
+        if (typeof(console) != 'undefined' && typeof(console.log) == 'function'){            
+            Array.prototype.unshift.call(arguments, '[Ajax Upload]');
+            console.log( Array.prototype.join.call(arguments, ' '));
+        }
+    } 
+
+    /**
+     * Attaches event to a dom element.
+     * @param {Element} el
+     * @param type event name
+     * @param fn callback This refers to the passed element
+     */
+    function addEvent(el, type, fn){
+        if (el.addEventListener) {
+            el.addEventListener(type, fn, false);
+        } else if (el.attachEvent) {
+            el.attachEvent('on' + type, function(){
+                fn.call(el);
+               });
+           } else {
+            throw new Error('not supported or DOM not loaded');
+        }
+    }   
+    
+    /**
+     * Attaches resize event to a window, limiting
+     * number of event fired. Fires only when encounteres
+     * delay of 100 after series of events.
+     * 
+     * Some browsers fire event multiple times when resizing
+     * http://www.quirksmode.org/dom/events/resize.html
+     * 
+     * @param fn callback This refers to the passed element
+     */
+    function addResizeEvent(fn){
+        var timeout;
+               
+           addEvent(window, 'resize', function(){
+            if (timeout){
+                clearTimeout(timeout);
+            }
+            timeout = setTimeout(fn, 100);                        
+        });
+    }    
+    
+    // Needs more testing, will be rewriten for next version        
+    // getOffset function copied from jQuery lib (http://jquery.com/)
+    if (document.documentElement.getBoundingClientRect){
+        // Get Offset using getBoundingClientRect
+        // http://ejohn.org/blog/getboundingclientrect-is-awesome/
+        var getOffset = function(el){
+            var box = el.getBoundingClientRect();
+            var doc = el.ownerDocument;
+            var body = doc.body;
+            var docElem = doc.documentElement; // for ie 
+            var clientTop = docElem.clientTop || body.clientTop || 0;
+            var clientLeft = docElem.clientLeft || body.clientLeft || 0;
+             
+            // In Internet Explorer 7 getBoundingClientRect property is treated as physical,
+            // while others are logical. Make all logical, like in IE8.        
+            var zoom = 1;            
+            if (body.getBoundingClientRect) {
+                var bound = body.getBoundingClientRect();
+                zoom = (bound.right - bound.left) / body.clientWidth;
+            }
+            
+            if (zoom > 1) {
+                clientTop = 0;
+                clientLeft = 0;
+            }
+            
+            var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft;
+            
+            return {
+                top: top,
+                left: left
+            };
+        };        
+    } else {
+        // Get offset adding all offsets 
+        var getOffset = function(el){
+            var top = 0, left = 0;
+            do {
+                top += el.offsetTop || 0;
+                left += el.offsetLeft || 0;
+                el = el.offsetParent;
+            } while (el);
+            
+            return {
+                left: left,
+                top: top
+            };
+        };
+    }
+    
+    /**
+     * Returns left, top, right and bottom properties describing the border-box,
+     * in pixels, with the top-left relative to the body
+     * @param {Element} el
+     * @return {Object} Contains left, top, right,bottom
+     */
+    function getBox(el){
+        var left, right, top, bottom;
+        var offset = getOffset(el);
+        left = offset.left;
+        top = offset.top;
+        
+        right = left + el.offsetWidth;
+        bottom = top + el.offsetHeight;
+        
+        return {
+            left: left,
+            right: right,
+            top: top,
+            bottom: bottom
+        };
+    }
+    
+    /**
+     * Helper that takes object literal
+     * and add all properties to element.style
+     * @param {Element} el
+     * @param {Object} styles
+     */
+    function addStyles(el, styles){
+        for (var name in styles) {
+            if (styles.hasOwnProperty(name)) {
+                el.style[name] = styles[name];
+            }
+        }
+    }
+        
+    /**
+     * Function places an absolutely positioned
+     * element on top of the specified element
+     * copying position and dimentions.
+     * @param {Element} from
+     * @param {Element} to
+     */    
+    function copyLayout(from, to){
+           var box = getBox(from);
+        
+        addStyles(to, {
+               position: 'absolute',                    
+               left : box.left + 'px',
+               top : box.top + 'px',
+               width : from.offsetWidth + 'px',
+               height : from.offsetHeight + 'px'
+           });        
+       to.title = from.title;
+
+    }
+
+    /**
+    * Creates and returns element from html chunk
+    * Uses innerHTML to create an element
+    */
+    var toElement = (function(){
+        var div = document.createElement('div');
+        return function(html){
+            div.innerHTML = html;
+            var el = div.firstChild;
+            return div.removeChild(el);
+        };
+    })();
+            
+    /**
+     * Function generates unique id
+     * @return unique id 
+     */
+    var getUID = (function(){
+        var id = 0;
+        return function(){
+            return 'ValumsAjaxUpload' + id++;
+        };
+    })();        
+    /**
+     * Get file name from path
+     * @param {String} file path to file
+     * @return filename
+     */  
+    function fileFromPath(file){
+        return file.replace(/.*(\/|\\)/, "");
+    }
+    
+    /**
+     * Get file extension lowercase
+     * @param {String} file name
+     * @return file extenstion
+     */    
+    function getExt(file){
+        return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : '';
+    }
+
+    function hasClass(el, name){        
+        var re = new RegExp('\\b' + name + '\\b');        
+        return re.test(el.className);
+    }    
+    function addClass(el, name){
+        if ( ! hasClass(el, name)){   
+            el.className += ' ' + name;
+        }
+    }    
+    function removeClass(el, name){
+        var re = new RegExp('\\b' + name + '\\b');                
+        el.className = el.className.replace(re, '');        
+    }
+    
+    function removeNode(el){
+        el.parentNode.removeChild(el);
+    }
+
+    /**
+     * Easy styling and uploading
+     * @constructor
+     * @param button An element you want convert to 
+     * upload button. Tested dimentions up to 500x500px
+     * @param {Object} options See defaults below.
+     */
+    window.AjaxUpload = function(button, options){
+        this._settings = {
+            // Location of the server-side upload script
+            action: 'upload.php',
+            // File upload name
+            name: 'userfile',
+            // Additional data to send
+            data: {},
+            // Submit file as soon as it's selected
+            autoSubmit: true,
+            // The type of data that you're expecting back from the server.
+            // html and xml are detected automatically.
+            // Only useful when you are using json data as a response.
+            // Set to "json" in that case. 
+            responseType: false,
+            // Class applied to button when mouse is hovered
+            hoverClass: 'hover',
+            // Class applied to button when button is focused
+            focusClass: 'focus',
+            // Class applied to button when AU is disabled
+            disabledClass: 'disabled',            
+            // When user selects a file, useful with autoSubmit disabled
+            // You can return false to cancel upload                   
+            onChange: function(file, extension){
+            },
+            // Callback to fire before file is uploaded
+            // You can return false to cancel upload
+            onSubmit: function(file, extension){
+            },
+            // Fired when file upload is completed
+            // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
+            onComplete: function(file, response){
+            }
+        };
+                        
+        // Merge the users options with our defaults
+        for (var i in options) {
+            if (options.hasOwnProperty(i)){
+                this._settings[i] = options[i];
+            }
+        }
+                
+        // button isn't necessary a dom element
+        if (button.jquery){
+            // jQuery object was passed
+            button = button[0];
+        } else if (typeof button == "string") {
+            if (/^#.*/.test(button)){
+                // If jQuery user passes #elementId don't break it                                     
+                button = button.slice(1);                
+            }
+            
+            button = document.getElementById(button);
+        }
+        
+        if ( ! button || button.nodeType !== 1){
+            throw new Error("Please make sure that you're passing a valid element"); 
+        }
+                
+        if ( button.nodeName.toUpperCase() == 'A'){
+            // disable link                       
+            addEvent(button, 'click', function(e){
+                if (e && e.preventDefault){
+                    e.preventDefault();
+                } else if (window.event){
+                    window.event.returnValue = false;
+                }
+            });
+        }
+                    
+        // DOM element
+        this._button = button;        
+        // DOM element                 
+        this._input = null;
+        // If disabled clicking on button won't do anything
+        this._disabled = false;
+        
+        // if the button was disabled before refresh if will remain
+        // disabled in FireFox, let's fix it
+        this.enable();        
+        
+        this._rerouteClicks();
+    };
+    
+    // assigning methods to our class
+    AjaxUpload.prototype = {
+        setData: function(data){
+            this._settings.data = data;
+        },
+        disable: function(){            
+            addClass(this._button, this._settings.disabledClass);
+            this._disabled = true;
+            
+            var nodeName = this._button.nodeName.toUpperCase();            
+            if (nodeName == 'INPUT' || nodeName == 'BUTTON'){
+                this._button.setAttribute('disabled', 'disabled');
+            }            
+            
+            // hide input
+            if (this._input){
+                // We use visibility instead of display to fix problem with Safari 4
+                // The problem is that the value of input doesn't change if it 
+                // has display none when user selects a file           
+                this._input.parentNode.style.visibility = 'hidden';
+            }
+        },
+        enable: function(){
+            removeClass(this._button, this._settings.disabledClass);
+            this._button.removeAttribute('disabled');
+            this._disabled = false;
+            
+        },
+        /**
+         * Creates invisible file input 
+         * that will hover above the button
+         * <div><input type='file' /></div>
+         */
+        _createInput: function(){ 
+            var self = this;
+                        
+            var input = document.createElement("input");
+            input.setAttribute('type', 'file');
+            input.setAttribute('name', this._settings.name);
+
+            addStyles(input, {
+                'position' : 'absolute',
+                // in Opera only 'browse' button
+                // is clickable and it is located at
+                // the right side of the input
+                'right' : 0,
+                'margin' : 0,
+                'padding' : 0,
+                'fontSize' : '480px',
+                // in Firefox if font-family is set to
+                // 'inherit' the input doesn't work
+                'fontFamily' : 'sans-serif',
+                'cursor' : 'pointer'
+            });            
+
+            var div = document.createElement("div");                        
+            addStyles(div, {
+                'display' : 'block',
+                'position' : 'absolute',
+                'overflow' : 'hidden',
+                'margin' : 0,
+                'padding' : 0,                
+                'opacity' : 0,
+                // Make sure browse button is in the right side
+                // in Internet Explorer
+                'direction' : 'ltr',
+                //Max zIndex supported by Opera 9.0-9.2
+                'zIndex': 2147483583,
+                               'cursor' : 'pointer'
+
+            });
+            
+            // Make sure that element opacity exists.
+            // Otherwise use IE filter            
+            if ( div.style.opacity !== "0") {
+                if (typeof(div.filters) == 'undefined'){
+                    throw new Error('Opacity not supported by the browser');
+                }
+                div.style.filter = "alpha(opacity=0)";
+            }            
+            
+            addEvent(input, 'change', function(){
+                 
+                if ( ! input || input.value === ''){                
+                    return;                
+                }
+                            
+                // Get filename from input, required                
+                // as some browsers have path instead of it          
+                var file = fileFromPath(input.value);
+                                
+                if (false === self._settings.onChange.call(self, file, getExt(file))){
+                    self._clearInput();                
+                    return;
+                }
+                
+                // Submit form when value is changed
+                if (self._settings.autoSubmit) {
+                    self.submit();
+                }
+            });            
+
+            addEvent(input, 'mouseover', function(){
+                addClass(self._button, self._settings.hoverClass);
+            });
+            
+            addEvent(input, 'mouseout', function(){
+                removeClass(self._button, self._settings.hoverClass);
+                removeClass(self._button, self._settings.focusClass);
+                
+                // We use visibility instead of display to fix problem with Safari 4
+                // The problem is that the value of input doesn't change if it 
+                // has display none when user selects a file           
+                input.parentNode.style.visibility = 'hidden';
+
+            });   
+                        
+            addEvent(input, 'focus', function(){
+                addClass(self._button, self._settings.focusClass);
+            });
+            
+            addEvent(input, 'blur', function(){
+                removeClass(self._button, self._settings.focusClass);
+            });
+            
+               div.appendChild(input);
+            document.body.appendChild(div);
+              
+            this._input = input;
+        },
+        _clearInput : function(){
+            if (!this._input){
+                return;
+            }            
+                             
+            // this._input.value = ''; Doesn't work in IE6                               
+            removeNode(this._input.parentNode);
+            this._input = null;                                                                   
+            this._createInput();
+            
+            removeClass(this._button, this._settings.hoverClass);
+            removeClass(this._button, this._settings.focusClass);
+        },
+        /**
+         * Function makes sure that when user clicks upload button,
+         * the this._input is clicked instead
+         */
+        _rerouteClicks: function(){
+            var self = this;
+            
+            // IE will later display 'access denied' error
+            // if you use using self._input.click()
+            // other browsers just ignore click()
+
+            addEvent(self._button, 'mouseover', function(){
+                if (self._disabled){
+                    return;
+                }
+                                
+                if ( ! self._input){
+                       self._createInput();
+                }
+                
+                var div = self._input.parentNode;                            
+                copyLayout(self._button, div);
+                div.style.visibility = 'visible';
+                                
+            });
+            
+            
+            // commented because we now hide input on mouseleave
+            /**
+             * When the window is resized the elements 
+             * can be misaligned if button position depends
+             * on window size
+             */
+            //addResizeEvent(function(){
+            //    if (self._input){
+            //        copyLayout(self._button, self._input.parentNode);
+            //    }
+            //});            
+                                         
+        },
+        /**
+         * Creates iframe with unique name
+         * @return {Element} iframe
+         */
+        _createIframe: function(){
+            // We can't use getTime, because it sometimes return
+            // same value in safari :(
+            var id = getUID();            
+             
+            // We can't use following code as the name attribute
+            // won't be properly registered in IE6, and new window
+            // on form submit will open
+            // var iframe = document.createElement('iframe');
+            // iframe.setAttribute('name', id);                        
+            var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');
+            // src="javascript:false; was added
+            // because it possibly removes ie6 prompt 
+            // "This page contains both secure and nonsecure items"
+            // Anyway, it doesn't do any harm.            
+            iframe.setAttribute('id', id);
+            
+            iframe.style.display = 'none';
+            document.body.appendChild(iframe);
+            
+            return iframe;
+        },
+        /**
+         * Creates form, that will be submitted to iframe
+         * @param {Element} iframe Where to submit
+         * @return {Element} form
+         */
+        _createForm: function(iframe){
+            var settings = this._settings;
+                        
+            // We can't use the following code in IE6
+            // var form = document.createElement('form');
+            // form.setAttribute('method', 'post');
+            // form.setAttribute('enctype', 'multipart/form-data');
+            // Because in this case file won't be attached to request                    
+            var form = toElement('<form method="post" enctype="multipart/form-data"></form>');
+                        
+            form.setAttribute('action', settings.action);
+            form.setAttribute('target', iframe.name);                                   
+            form.style.display = 'none';
+            document.body.appendChild(form);
+            
+            // Create hidden input element for each data key
+            for (var prop in settings.data) {
+                if (settings.data.hasOwnProperty(prop)){
+                    var el = document.createElement("input");
+                    el.setAttribute('type', 'hidden');
+                    el.setAttribute('name', prop);
+                    el.setAttribute('value', settings.data[prop]);
+                    form.appendChild(el);
+                }
+            }
+            return form;
+        },
+        /**
+         * Gets response from iframe and fires onComplete event when ready
+         * @param iframe
+         * @param file Filename to use in onComplete callback 
+         */
+        _getResponse : function(iframe, file){            
+            // getting response
+            var toDeleteFlag = false, self = this, settings = this._settings;   
+               
+            addEvent(iframe, 'load', function(){                
+                
+                if (// For Safari 
+                    iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
+                    // For FF, IE
+                    iframe.src == "javascript:'<html></html>';"){                                                                        
+                        // First time around, do not delete.
+                        // We reload to blank page, so that reloading main page
+                        // does not re-submit the post.
+                        
+                        if (toDeleteFlag) {
+                            // Fix busy state in FF3
+                            setTimeout(function(){
+                                removeNode(iframe);
+                            }, 0);
+                        }
+                                                
+                        return;
+                }
+                
+                var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document;
+                
+                // fixing Opera 9.26,10.00
+                if (doc.readyState && doc.readyState != 'complete') {
+                   // Opera fires load event multiple times
+                   // Even when the DOM is not ready yet
+                   // this fix should not affect other browsers
+                   return;
+                }
+                
+                // fixing Opera 9.64
+                if (doc.body && doc.body.innerHTML == "false") {
+                    // In Opera 9.64 event was fired second time
+                    // when body.innerHTML changed from false 
+                    // to server response approx. after 1 sec
+                    return;
+                }
+                
+                var response;
+                
+                if (doc.XMLDocument) {
+                    // response is a xml document Internet Explorer property
+                    response = doc.XMLDocument;
+                } else if (doc.body){
+                    // response is html document or plain text
+                    response = doc.body.innerHTML;
+                    
+                    if (settings.responseType && settings.responseType.toLowerCase() == 'json') {
+                        // If the document was sent as 'application/javascript' or
+                        // 'text/javascript', then the browser wraps the text in a <pre>
+                        // tag and performs html encoding on the contents.  In this case,
+                        // we need to pull the original text content from the text node's
+                        // nodeValue property to retrieve the unmangled content.
+                        // Note that IE6 only understands text/html
+                        if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE') {
+                            doc.normalize();
+                            response = doc.body.firstChild.firstChild.nodeValue;
+                        }
+                        
+                        if (response) {
+                            response = eval("(" + response + ")");
+                        } else {
+                            response = {};
+                        }
+                    }
+                } else {
+                    // response is a xml document
+                    response = doc;
+                }
+                
+                settings.onComplete.call(self, file, response);
+                
+                // Reload blank page, so that reloading main page
+                // does not re-submit the post. Also, remember to
+                // delete the frame
+                toDeleteFlag = true;
+                
+                // Fix IE mixed content issue
+                iframe.src = "javascript:'<html></html>';";
+            });            
+        },        
+        /**
+         * Upload file contained in this._input
+         */
+        submit: function(){                        
+            var self = this, settings = this._settings;
+            
+            if ( ! this._input || this._input.value === ''){                
+                return;                
+            }
+                                    
+            var file = fileFromPath(this._input.value);
+            
+            // user returned false to cancel upload
+            if (false === settings.onSubmit.call(this, file, getExt(file))){
+                this._clearInput();                
+                return;
+            }
+            
+            // sending request    
+            var iframe = this._createIframe();
+            var form = this._createForm(iframe);
+            
+            // assuming following structure
+            // div -> input type='file'
+            removeNode(this._input.parentNode);            
+            removeClass(self._button, self._settings.hoverClass);
+            removeClass(self._button, self._settings.focusClass);
+                        
+            form.appendChild(this._input);
+                        
+            form.submit();
+
+            // request set, clean up                
+            removeNode(form); form = null;                          
+            removeNode(this._input); this._input = null;            
+            
+            // Get response from iframe and fire onComplete event when ready
+            this._getResponse(iframe, file);            
+
+            // get ready for next request            
+            this._createInput();
+        }
+    };
+})(); 
diff --git a/js/country.js b/js/country.js
new file mode 100644 (file)
index 0000000..07ab29b
--- /dev/null
@@ -0,0 +1,438 @@
+//<!--  Docs at: http://www.microcosmotalk.com/tech/scripts/\r
+// NOTE:\r
+// This code is placed into the public domain and may be used in any manner desired.\r
+// \r
+// Jim Carlock obtained the list of country names and state names from an HTML\r
+// document at Microsoft's website.\r
+//\r
+// Thursday, January 13, 2005, 7:00:52 PM\r
+// \r
+var gLngMaxStateLength=0;\r
+var gLngMaxCountryLength=0;\r
+var gLngNumberCountries=252;\r
+var gLngNumberStates=0;\r
+var gLngSelectedCountry=0;\r
+var gLngSelectedState=0;\r
+var gArCountryInfo;\r
+var gArStateInfo;\r
+// NOTE:\r
+// Some editors may exhibit problems viewing 2803 characters...\r
+var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe";\r
+var aStates = new Array();\r
+\r
+aStates[0]="";\r
+aStates[1]="|Badakhshan|Badghis|Baghlan|Balkh|Bamian|Farah|Faryab|Ghazni|Ghowr|Helmand|Herat|Jowzjan|Kabol|Kandahar|Kapisa|Konar|Kondoz|Laghman|Lowgar|Nangarhar|Nimruz|Oruzgan|Paktia|Paktika|Parvan|Samangan|Sar-e Pol|Takhar|Vardak|Zabol";\r
+aStates[2]="|Berat|Bulqize|Delvine|Devoll (Bilisht)|Diber (Peshkopi)|Durres|Elbasan|Fier|Gjirokaster|Gramsh|Has (Krume)|Kavaje|Kolonje (Erseke)|Korce|Kruje|Kucove|Kukes|Kurbin|Lezhe|Librazhd|Lushnje|Malesi e Madhe (Koplik)|Mallakaster (Ballsh)|Mat (Burrel)|Mirdite (Rreshen)|Peqin|Permet|Pogradec|Puke|Sarande|Shkoder|Skrapar (Corovode)|Tepelene|Tirane (Tirana)|Tirane (Tirana)|Tropoje (Bajram Curri)|Vlore";\r
+aStates[3]="|Adrar|Ain Defla|Ain Temouchent|Alger|Annaba|Batna|Bechar|Bejaia|Biskra|Blida|Bordj Bou Arreridj|Bouira|Boumerdes|Chlef|Constantine|Djelfa|El Bayadh|El Oued|El Tarf|Ghardaia|Guelma|Illizi|Jijel|Khenchela|Laghouat|M'Sila|Mascara|Medea|Mila|Mostaganem|Naama|Oran|Ouargla|Oum el Bouaghi|Relizane|Saida|Setif|Sidi Bel Abbes|Skikda|Souk Ahras|Tamanghasset|Tebessa|Tiaret|Tindouf|Tipaza|Tissemsilt|Tizi Ouzou|Tlemcen";\r
+aStates[4]="|Eastern|Manu'a|Rose Island|Swains Island|Western";\r
+aStates[5]="|Andorra la Vella|Bengo|Benguela|Bie|Cabinda|Canillo|Cuando Cubango|Cuanza Norte|Cuanza Sul|Cunene|Encamp|Escaldes-Engordany|Huambo|Huila|La Massana|Luanda|Lunda Norte|Lunda Sul|Malanje|Moxico|Namibe|Ordino|Sant Julia de Loria|Uige|Zaire";\r
+aStates[6]="|Anguilla";\r
+aStates[7]="|Antartica";\r
+aStates[8]="|Barbuda|Redonda|Saint George|Saint John|Saint Mary|Saint Paul|Saint Peter|Saint Philip";\r
+aStates[9]="|Antartica e Islas del Atlantico Sur|Buenos Aires|Buenos Aires Capital Federal|Catamarca|Chaco|Chubut|Cordoba|Corrientes|Entre Rios|Formosa|Jujuy|La Pampa|La Rioja|Mendoza|Misiones|Neuquen|Rio Negro|Salta|San Juan|San Luis|Santa Cruz|Santa Fe|Santiago del Estero|Tierra del Fuego|Tucuman";\r
+aStates[10]="|Aragatsotn|Ararat|Armavir|Geghark'unik'|Kotayk'|Lorri|Shirak|Syunik'|Tavush|Vayots' Dzor|Yerevan";\r
+aStates[11]="|Aruba";\r
+aStates[12]="|Ashmore and Cartier Island";\r
+aStates[13]="|Australian Capital Territory|New South Wales|Northern Territory|Queensland|South Australia|Tasmania|Victoria|Western Australia";\r
+aStates[14]="|Burgenland|Kaernten|Niederoesterreich|Oberoesterreich|Salzburg|Steiermark|Tirol|Vorarlberg|Wien";\r
+aStates[15]="|Abseron Rayonu|Agcabadi Rayonu|Agdam Rayonu|Agdas Rayonu|Agstafa Rayonu|Agsu Rayonu|Ali Bayramli Sahari|Astara Rayonu|Baki Sahari|Balakan Rayonu|Barda Rayonu|Beylaqan Rayonu|Bilasuvar Rayonu|Cabrayil Rayonu|Calilabad Rayonu|Daskasan Rayonu|Davaci Rayonu|Fuzuli Rayonu|Gadabay Rayonu|Ganca Sahari|Goranboy Rayonu|Goycay Rayonu|Haciqabul Rayonu|Imisli Rayonu|Ismayilli Rayonu|Kalbacar Rayonu|Kurdamir Rayonu|Lacin Rayonu|Lankaran Rayonu|Lankaran Sahari|Lerik Rayonu|Masalli Rayonu|Mingacevir Sahari|Naftalan Sahari|Naxcivan Muxtar Respublikasi|Neftcala Rayonu|Oguz Rayonu|Qabala Rayonu|Qax Rayonu|Qazax Rayonu|Qobustan Rayonu|Quba Rayonu|Qubadli Rayonu|Qusar Rayonu|Saatli Rayonu|Sabirabad Rayonu|Saki Rayonu|Saki Sahari|Salyan Rayonu|Samaxi Rayonu|Samkir Rayonu|Samux Rayonu|Siyazan Rayonu|Sumqayit Sahari|Susa Rayonu|Susa Sahari|Tartar Rayonu|Tovuz Rayonu|Ucar Rayonu|Xacmaz Rayonu|Xankandi Sahari|Xanlar Rayonu|Xizi Rayonu|Xocali Rayonu|Xocavand Rayonu|Yardimli Rayonu|Yevlax Rayonu|Yevlax Sahari|Zangilan Rayonu|Zaqatala Rayonu|Zardab Rayonu";\r
+aStates[16]="|Acklins and Crooked Islands|Bimini|Cat Island|Exuma|Freeport|Fresh Creek|Governor's Harbour|Green Turtle Cay|Harbour Island|High Rock|Inagua|Kemps Bay|Long Island|Marsh Harbour|Mayaguana|New Providence|Nicholls Town and Berry Islands|Ragged Island|Rock Sound|San Salvador and Rum Cay|Sandy Point";\r
+aStates[17]="|Al Hadd|Al Manamah|Al Mintaqah al Gharbiyah|Al Mintaqah al Wusta|Al Mintaqah ash Shamaliyah|Al Muharraq|Ar Rifa' wa al Mintaqah al Janubiyah|Jidd Hafs|Juzur Hawar|Madinat 'Isa|Madinat Hamad|Sitrah";\r
+aStates[18]="|Barisal|Chittagong|Dhaka|Khulna|Rajshahi|Sylhet";\r
+aStates[19]="|Bridgetown|Christ Church|Saint Andrew|Saint George|Saint James|Saint John|Saint Joseph|Saint Lucy|Saint Michael|Saint Peter|Saint Philip|Saint Thomas";\r
+aStates[20]="|Brestskaya (Brest)|Homyel'skaya (Homyel')|Horad Minsk|Hrodzyenskaya (Hrodna)|Mahilyowskaya (Mahilyow)|Minskaya|Vitsyebskaya (Vitsyebsk)";\r
+aStates[21]="|Antwerpen|Brabant Wallon|Brussels Capitol Region|Hainaut|Liege|Limburg|Luxembourg|Namur|Oost-Vlaanderen|Vlaams Brabant|West-Vlaanderen";\r
+aStates[22]="|Belize|Cayo|Corozal|Orange Walk|Stann Creek|Toledo";\r
+aStates[23]="|Alibori|Atakora|Atlantique|Borgou|Collines|Couffo|Donga|Littoral|Mono|Oueme|Plateau|Zou";\r
+aStates[24]="|Devonshire|Hamilton|Hamilton|Paget|Pembroke|Saint George|Saint Georges|Sandys|Smiths|Southampton|Warwick";\r
+aStates[25]="|Bumthang|Chhukha|Chirang|Daga|Geylegphug|Ha|Lhuntshi|Mongar|Paro|Pemagatsel|Punakha|Samchi|Samdrup Jongkhar|Shemgang|Tashigang|Thimphu|Tongsa|Wangdi Phodrang";\r
+aStates[26]="|Beni|Chuquisaca|Cochabamba|La Paz|Oruro|Pando|Potosi|Santa Cruz|Tarija";\r
+aStates[27]="|Federation of Bosnia and Herzegovina|Republika Srpska";\r
+aStates[28]="|Central|Chobe|Francistown|Gaborone|Ghanzi|Kgalagadi|Kgatleng|Kweneng|Lobatse|Ngamiland|North-East|Selebi-Pikwe|South-East|Southern";\r
+aStates[29]="|Acre|Alagoas|Amapa|Amazonas|Bahia|Ceara|Distrito Federal|Espirito Santo|Goias|Maranhao|Mato Grosso|Mato Grosso do Sul|Minas Gerais|Para|Paraiba|Parana|Pernambuco|Piaui|Rio de Janeiro|Rio Grande do Norte|Rio Grande do Sul|Rondonia|Roraima|Santa Catarina|Sao Paulo|Sergipe|Tocantins";\r
+aStates[30]="|Anegada|Jost Van Dyke|Tortola|Virgin Gorda";\r
+aStates[31]="|Belait|Brunei and Muara|Temburong|Tutong";\r
+aStates[32]="|Blagoevgrad|Burgas|Dobrich|Gabrovo|Khaskovo|Kurdzhali|Kyustendil|Lovech|Montana|Pazardzhik|Pernik|Pleven|Plovdiv|Razgrad|Ruse|Shumen|Silistra|Sliven|Smolyan|Sofiya|Sofiya-Grad|Stara Zagora|Turgovishte|Varna|Veliko Turnovo|Vidin|Vratsa|Yambol";\r
+aStates[33]="|Bale|Bam|Banwa|Bazega|Bougouriba|Boulgou|Boulkiemde|Comoe|Ganzourgou|Gnagna|Gourma|Houet|Ioba|Kadiogo|Kenedougou|Komandjari|Kompienga|Kossi|Koupelogo|Kouritenga|Kourweogo|Leraba|Loroum|Mouhoun|Nahouri|Namentenga|Naumbiel|Nayala|Oubritenga|Oudalan|Passore|Poni|Samentenga|Sanguie|Seno|Sissili|Soum|Sourou|Tapoa|Tuy|Yagha|Yatenga|Ziro|Zondomo|Zoundweogo";\r
+aStates[34]="|Ayeyarwady|Bago|Chin State|Kachin State|Kayah State|Kayin State|Magway|Mandalay|Mon State|Rakhine State|Sagaing|Shan State|Tanintharyi|Yangon";\r
+aStates[35]="|Bubanza|Bujumbura|Bururi|Cankuzo|Cibitoke|Gitega|Karuzi|Kayanza|Kirundo|Makamba|Muramvya|Muyinga|Mwaro|Ngozi|Rutana|Ruyigi";\r
+aStates[36]="|Banteay Mean Cheay|Batdambang|Kampong Cham|Kampong Chhnang|Kampong Spoe|Kampong Thum|Kampot|Kandal|Kaoh Kong|Keb|Kracheh|Mondol Kiri|Otdar Mean Cheay|Pailin|Phnum Penh|Pouthisat|Preah Seihanu (Sihanoukville)|Preah Vihear|Prey Veng|Rotanah Kiri|Siem Reab|Stoeng Treng|Svay Rieng|Takev";\r
+aStates[37]="|Adamaoua|Centre|Est|Extreme-Nord|Littoral|Nord|Nord-Ouest|Ouest|Sud|Sud-Ouest";\r
+aStates[38]="|Alberta|British Columbia|Manitoba|New Brunswick|Newfoundland|Northwest Territories|Nova Scotia|Nunavut|Ontario|Prince Edward Island|Quebec|Saskatchewan|Yukon Territory";\r
+aStates[39]="|Boa Vista|Brava|Maio|Mosteiros|Paul|Porto Novo|Praia|Ribeira Grande|Sal|Santa Catarina|Santa Cruz|Sao Domingos|Sao Filipe|Sao Nicolau|Sao Vicente|Tarrafal";\r
+aStates[40]="|Creek|Eastern|Midland|South Town|Spot Bay|Stake Bay|West End|Western";\r
+aStates[41]="|Bamingui-Bangoran|Bangui|Basse-Kotto|Gribingui|Haut-Mbomou|Haute-Kotto|Haute-Sangha|Kemo-Gribingui|Lobaye|Mbomou|Nana-Mambere|Ombella-Mpoko|Ouaka|Ouham|Ouham-Pende|Sangha|Vakaga";\r
+aStates[42]="|Batha|Biltine|Borkou-Ennedi-Tibesti|Chari-Baguirmi|Guera|Kanem|Lac|Logone Occidental|Logone Oriental|Mayo-Kebbi|Moyen-Chari|Ouaddai|Salamat|Tandjile";\r
+aStates[43]="|Aisen del General Carlos Ibanez del Campo|Antofagasta|Araucania|Atacama|Bio-Bio|Coquimbo|Libertador General Bernardo O'Higgins|Los Lagos|Magallanes y de la Antartica Chilena|Maule|Region Metropolitana (Santiago)|Tarapaca|Valparaiso";\r
+aStates[44]="|Anhui|Beijing|Chongqing|Fujian|Gansu|Guangdong|Guangxi|Guizhou|Hainan|Hebei|Heilongjiang|Henan|Hubei|Hunan|Jiangsu|Jiangxi|Jilin|Liaoning|Nei Mongol|Ningxia|Qinghai|Shaanxi|Shandong|Shanghai|Shanxi|Sichuan|Tianjin|Xinjiang|Xizang (Tibet)|Yunnan|Zhejiang";\r
+aStates[45]="|Christmas Island";\r
+aStates[46]="|Clipperton Island";\r
+aStates[47]="|Direction Island|Home Island|Horsburgh Island|North Keeling Island|South Island|West Island";\r
+aStates[48]="|Amazonas|Antioquia|Arauca|Atlantico|Bolivar|Boyaca|Caldas|Caqueta|Casanare|Cauca|Cesar|Choco|Cordoba|Cundinamarca|Distrito Capital de Santa Fe de Bogota|Guainia|Guaviare|Huila|La Guajira|Magdalena|Meta|Narino|Norte de Santander|Putumayo|Quindio|Risaralda|San Andres y Providencia|Santander|Sucre|Tolima|Valle del Cauca|Vaupes|Vichada";\r
+// <!-- -->\r
+aStates[49]="|Anjouan (Nzwani)|Domoni|Fomboni|Grande Comore (Njazidja)|Moheli (Mwali)|Moroni|Moutsamoudou";\r
+aStates[50]="|Bandundu|Bas-Congo|Equateur|Kasai-Occidental|Kasai-Oriental|Katanga|Kinshasa|Maniema|Nord-Kivu|Orientale|Sud-Kivu";\r
+aStates[51]="|Bouenza|Brazzaville|Cuvette|Kouilou|Lekoumou|Likouala|Niari|Plateaux|Pool|Sangha";\r
+aStates[52]="|Aitutaki|Atiu|Avarua|Mangaia|Manihiki|Manuae|Mauke|Mitiaro|Nassau Island|Palmerston|Penrhyn|Pukapuka|Rakahanga|Rarotonga|Suwarrow|Takutea";\r
+aStates[53]="|Alajuela|Cartago|Guanacaste|Heredia|Limon|Puntarenas|San Jose";\r
+aStates[54]="|Abengourou|Abidjan|Aboisso|Adiake'|Adzope|Agboville|Agnibilekrou|Ale'pe'|Bangolo|Beoumi|Biankouma|Bocanda|Bondoukou|Bongouanou|Bouafle|Bouake|Bouna|Boundiali|Dabakala|Dabon|Daloa|Danane|Daoukro|Dimbokro|Divo|Duekoue|Ferkessedougou|Gagnoa|Grand Bassam|Grand-Lahou|Guiglo|Issia|Jacqueville|Katiola|Korhogo|Lakota|Man|Mankono|Mbahiakro|Odienne|Oume|Sakassou|San-Pedro|Sassandra|Seguela|Sinfra|Soubre|Tabou|Tanda|Tiassale|Tiebissou|Tingrela|Touba|Toulepleu|Toumodi|Vavoua|Yamoussoukro|Zuenoula";\r
+aStates[55]="|Bjelovarsko-Bilogorska Zupanija|Brodsko-Posavska Zupanija|Dubrovacko-Neretvanska Zupanija|Istarska Zupanija|Karlovacka Zupanija|Koprivnicko-Krizevacka Zupanija|Krapinsko-Zagorska Zupanija|Licko-Senjska Zupanija|Medimurska Zupanija|Osjecko-Baranjska Zupanija|Pozesko-Slavonska Zupanija|Primorsko-Goranska Zupanija|Sibensko-Kninska Zupanija|Sisacko-Moslavacka Zupanija|Splitsko-Dalmatinska Zupanija|Varazdinska Zupanija|Viroviticko-Podravska Zupanija|Vukovarsko-Srijemska Zupanija|Zadarska Zupanija|Zagreb|Zagrebacka Zupanija";\r
+aStates[56]="|Camaguey|Ciego de Avila|Cienfuegos|Ciudad de La Habana|Granma|Guantanamo|Holguin|Isla de la Juventud|La Habana|Las Tunas|Matanzas|Pinar del Rio|Sancti Spiritus|Santiago de Cuba|Villa Clara";\r
+aStates[57]="|Famagusta|Kyrenia|Larnaca|Limassol|Nicosia|Paphos";\r
+aStates[58]="|Brnensky|Budejovicky|Jihlavsky|Karlovarsky|Kralovehradecky|Liberecky|Olomoucky|Ostravsky|Pardubicky|Plzensky|Praha|Stredocesky|Ustecky|Zlinsky";\r
+aStates[59]="|Arhus|Bornholm|Fredericksberg|Frederiksborg|Fyn|Kobenhavn|Kobenhavns|Nordjylland|Ribe|Ringkobing|Roskilde|Sonderjylland|Storstrom|Vejle|Vestsjalland|Viborg";\r
+aStates[60]="|'Ali Sabih|Dikhil|Djibouti|Obock|Tadjoura";\r
+aStates[61]="|Saint Andrew|Saint David|Saint George|Saint John|Saint Joseph|Saint Luke|Saint Mark|Saint Patrick|Saint Paul|Saint Peter";\r
+aStates[62]="|Azua|Baoruco|Barahona|Dajabon|Distrito Nacional|Duarte|El Seibo|Elias Pina|Espaillat|Hato Mayor|Independencia|La Altagracia|La Romana|La Vega|Maria Trinidad Sanchez|Monsenor Nouel|Monte Cristi|Monte Plata|Pedernales|Peravia|Puerto Plata|Salcedo|Samana|San Cristobal|San Juan|San Pedro de Macoris|Sanchez Ramirez|Santiago|Santiago Rodriguez|Valverde";\r
+// <!-- -->\r
+aStates[63]="|Azuay|Bolivar|Canar|Carchi|Chimborazo|Cotopaxi|El Oro|Esmeraldas|Galapagos|Guayas|Imbabura|Loja|Los Rios|Manabi|Morona-Santiago|Napo|Orellana|Pastaza|Pichincha|Sucumbios|Tungurahua|Zamora-Chinchipe";\r
+aStates[64]="|Ad Daqahliyah|Al Bahr al Ahmar|Al Buhayrah|Al Fayyum|Al Gharbiyah|Al Iskandariyah|Al Isma'iliyah|Al Jizah|Al Minufiyah|Al Minya|Al Qahirah|Al Qalyubiyah|Al Wadi al Jadid|As Suways|Ash Sharqiyah|Aswan|Asyut|Bani Suwayf|Bur Sa'id|Dumyat|Janub Sina'|Kafr ash Shaykh|Matruh|Qina|Shamal Sina'|Suhaj";\r
+aStates[65]="|Ahuachapan|Cabanas|Chalatenango|Cuscatlan|La Libertad|La Paz|La Union|Morazan|San Miguel|San Salvador|San Vicente|Santa Ana|Sonsonate|Usulutan";\r
+aStates[66]="|Annobon|Bioko Norte|Bioko Sur|Centro Sur|Kie-Ntem|Litoral|Wele-Nzas";\r
+aStates[67]="|Akale Guzay|Barka|Denkel|Hamasen|Sahil|Semhar|Senhit|Seraye";\r
+aStates[68]="|Harjumaa (Tallinn)|Hiiumaa (Kardla)|Ida-Virumaa (Johvi)|Jarvamaa (Paide)|Jogevamaa (Jogeva)|Laane-Virumaa (Rakvere)|Laanemaa (Haapsalu)|Parnumaa (Parnu)|Polvamaa (Polva)|Raplamaa (Rapla)|Saaremaa (Kuessaare)|Tartumaa (Tartu)|Valgamaa (Valga)|Viljandimaa (Viljandi)|Vorumaa (Voru)"\r
+aStates[69]="|Adis Abeba (Addis Ababa)|Afar|Amara|Dire Dawa|Gambela Hizboch|Hareri Hizb|Oromiya|Sumale|Tigray|YeDebub Biheroch Bihereseboch na Hizboch";\r
+aStates[70]="|Europa Island";\r
+aStates[71]="|Falkland Islands (Islas Malvinas)"\r
+aStates[72]="|Bordoy|Eysturoy|Mykines|Sandoy|Skuvoy|Streymoy|Suduroy|Tvoroyri|Vagar";\r
+aStates[73]="|Central|Eastern|Northern|Rotuma|Western";\r
+aStates[74]="|Aland|Etela-Suomen Laani|Ita-Suomen Laani|Lansi-Suomen Laani|Lappi|Oulun Laani";\r
+aStates[75]="|Alsace|Aquitaine|Auvergne|Basse-Normandie|Bourgogne|Bretagne|Centre|Champagne-Ardenne|Corse|Franche-Comte|Haute-Normandie|Ile-de-France|Languedoc-Roussillon|Limousin|Lorraine|Midi-Pyrenees|Nord-Pas-de-Calais|Pays de la Loire|Picardie|Poitou-Charentes|Provence-Alpes-Cote d'Azur|Rhone-Alpes";\r
+aStates[76]="|French Guiana";\r
+aStates[77]="|Archipel des Marquises|Archipel des Tuamotu|Archipel des Tubuai|Iles du Vent|Iles Sous-le-Vent";\r
+aStates[78]="|Adelie Land|Ile Crozet|Iles Kerguelen|Iles Saint-Paul et Amsterdam";\r
+aStates[79]="|Estuaire|Haut-Ogooue|Moyen-Ogooue|Ngounie|Nyanga|Ogooue-Ivindo|Ogooue-Lolo|Ogooue-Maritime|Woleu-Ntem";\r
+aStates[80]="|Banjul|Central River|Lower River|North Bank|Upper River|Western";\r
+aStates[81]="|Gaza Strip";\r
+aStates[82]="|Abashis|Abkhazia or Ap'khazet'is Avtonomiuri Respublika (Sokhumi)|Adigenis|Ajaria or Acharis Avtonomiuri Respublika (Bat'umi)|Akhalgoris|Akhalk'alak'is|Akhalts'ikhis|Akhmetis|Ambrolauris|Aspindzis|Baghdat'is|Bolnisis|Borjomis|Ch'khorotsqus|Ch'okhatauris|Chiat'ura|Dedop'listsqaros|Dmanisis|Dushet'is|Gardabanis|Gori|Goris|Gurjaanis|Javis|K'arelis|K'ut'aisi|Kaspis|Kharagaulis|Khashuris|Khobis|Khonis|Lagodekhis|Lanch'khut'is|Lentekhis|Marneulis|Martvilis|Mestiis|Mts'khet'is|Ninotsmindis|Onis|Ozurget'is|P'ot'i|Qazbegis|Qvarlis|Rust'avi|Sach'kheris|Sagarejos|Samtrediis|Senakis|Sighnaghis|T'bilisi|T'elavis|T'erjolis|T'et'ritsqaros|T'ianet'is|Tqibuli|Ts'ageris|Tsalenjikhis|Tsalkis|Tsqaltubo|Vanis|Zestap'onis|Zugdidi|Zugdidis";\r
+aStates[83]="|Baden-Wuerttemberg|Bayern|Berlin|Brandenburg|Bremen|Hamburg|Hessen|Mecklenburg-Vorpommern|Niedersachsen|Nordrhein-Westfalen|Rheinland-Pfalz|Saarland|Sachsen|Sachsen-Anhalt|Schleswig-Holstein|Thueringen";\r
+aStates[84]="|Ashanti|Brong-Ahafo|Central|Eastern|Greater Accra|Northern|Upper East|Upper West|Volta|Western";\r
+aStates[85]="|Gibraltar";\r
+aStates[86]="|Ile du Lys|Ile Glorieuse";\r
+aStates[87]="|Aitolia kai Akarnania|Akhaia|Argolis|Arkadhia|Arta|Attiki|Ayion Oros (Mt. Athos)|Dhodhekanisos|Drama|Evritania|Evros|Evvoia|Florina|Fokis|Fthiotis|Grevena|Ilia|Imathia|Ioannina|Irakleion|Kardhitsa|Kastoria|Kavala|Kefallinia|Kerkyra|Khalkidhiki|Khania|Khios|Kikladhes|Kilkis|Korinthia|Kozani|Lakonia|Larisa|Lasithi|Lesvos|Levkas|Magnisia|Messinia|Pella|Pieria|Preveza|Rethimni|Rodhopi|Samos|Serrai|Thesprotia|Thessaloniki|Trikala|Voiotia|Xanthi|Zakinthos";\r
+aStates[88]="|Avannaa (Nordgronland)|Kitaa (Vestgronland)|Tunu (Ostgronland)"\r
+aStates[89]="|Carriacou and Petit Martinique|Saint Andrew|Saint David|Saint George|Saint John|Saint Mark|Saint Patrick";\r
+aStates[90]="|Basse-Terre|Grande-Terre|Iles de la Petite Terre|Iles des Saintes|Marie-Galante";\r
+aStates[91]="|Guam";\r
+aStates[92]="|Alta Verapaz|Baja Verapaz|Chimaltenango|Chiquimula|El Progreso|Escuintla|Guatemala|Huehuetenango|Izabal|Jalapa|Jutiapa|Peten|Quetzaltenango|Quiche|Retalhuleu|Sacatepequez|San Marcos|Santa Rosa|Solola|Suchitepequez|Totonicapan|Zacapa";\r
+aStates[93]="|Castel|Forest|St. Andrew|St. Martin|St. Peter Port|St. Pierre du Bois|St. Sampson|St. Saviour|Torteval|Vale";\r
+aStates[94]="|Beyla|Boffa|Boke|Conakry|Coyah|Dabola|Dalaba|Dinguiraye|Dubreka|Faranah|Forecariah|Fria|Gaoual|Gueckedou|Kankan|Kerouane|Kindia|Kissidougou|Koubia|Koundara|Kouroussa|Labe|Lelouma|Lola|Macenta|Mali|Mamou|Mandiana|Nzerekore|Pita|Siguiri|Telimele|Tougue|Yomou";\r
+aStates[95]="|Bafata|Biombo|Bissau|Bolama-Bijagos|Cacheu|Gabu|Oio|Quinara|Tombali";\r
+aStates[96]="|Barima-Waini|Cuyuni-Mazaruni|Demerara-Mahaica|East Berbice-Corentyne|Essequibo Islands-West Demerara|Mahaica-Berbice|Pomeroon-Supenaam|Potaro-Siparuni|Upper Demerara-Berbice|Upper Takutu-Upper Essequibo";\r
+aStates[97]="|Artibonite|Centre|Grand'Anse|Nord|Nord-Est|Nord-Ouest|Ouest|Sud|Sud-Est";\r
+aStates[98]="|Heard Island and McDonald Islands";\r
+aStates[99]="|Holy See (Vatican City)"\r
+aStates[100]="|Atlantida|Choluteca|Colon|Comayagua|Copan|Cortes|El Paraiso|Francisco Morazan|Gracias a Dios|Intibuca|Islas de la Bahia|La Paz|Lempira|Ocotepeque|Olancho|Santa Barbara|Valle|Yoro";\r
+aStates[101]="|Hong Kong";\r
+aStates[102]="|Howland Island";\r
+aStates[103]="|Bacs-Kiskun|Baranya|Bekes|Bekescsaba|Borsod-Abauj-Zemplen|Budapest|Csongrad|Debrecen|Dunaujvaros|Eger|Fejer|Gyor|Gyor-Moson-Sopron|Hajdu-Bihar|Heves|Hodmezovasarhely|Jasz-Nagykun-Szolnok|Kaposvar|Kecskemet|Komarom-Esztergom|Miskolc|Nagykanizsa|Nograd|Nyiregyhaza|Pecs|Pest|Somogy|Sopron|Szabolcs-Szatmar-Bereg|Szeged|Szekesfehervar|Szolnok|Szombathely|Tatabanya|Tolna|Vas|Veszprem|Veszprem|Zala|Zalaegerszeg";\r
+aStates[104]="|Akranes|Akureyri|Arnessysla|Austur-Bardhastrandarsysla|Austur-Hunavatnssysla|Austur-Skaftafellssysla|Borgarfjardharsysla|Dalasysla|Eyjafjardharsysla|Gullbringusysla|Hafnarfjordhur|Husavik|Isafjordhur|Keflavik|Kjosarsysla|Kopavogur|Myrasysla|Neskaupstadhur|Nordhur-Isafjardharsysla|Nordhur-Mulasys-la|Nordhur-Thingeyjarsysla|Olafsfjordhur|Rangarvallasysla|Reykjavik|Saudharkrokur|Seydhisfjordhur|Siglufjordhur|Skagafjardharsysla|Snaefellsnes-og Hnappadalssysla|Strandasysla|Sudhur-Mulasysla|Sudhur-Thingeyjarsysla|Vesttmannaeyjar|Vestur-Bardhastrandarsysla|Vestur-Hunavatnssysla|Vestur-Isafjardharsysla|Vestur-Skaftafellssysla";\r
+aStates[105]="|Andaman and Nicobar Islands|Andhra Pradesh|Arunachal Pradesh|Assam|Bihar|Chandigarh|Chhattisgarh|Dadra and Nagar Haveli|Daman and Diu|Delhi|Goa|Gujarat|Haryana|Himachal Pradesh|Jammu and Kashmir|Jharkhand|Karnataka|Kerala|Lakshadweep|Madhya Pradesh|Maharashtra|Manipur|Meghalaya|Mizoram|Nagaland|Orissa|Pondicherry|Punjab|Rajasthan|Sikkim|Tamil Nadu|Tripura|Uttar Pradesh|Uttaranchal|West Bengal";\r
+aStates[106]="|Aceh|Bali|Banten|Bengkulu|East Timor|Gorontalo|Irian Jaya|Jakarta Raya|Jambi|Jawa Barat|Jawa Tengah|Jawa Timur|Kalimantan Barat|Kalimantan Selatan|Kalimantan Tengah|Kalimantan Timur|Kepulauan Bangka Belitung|Lampung|Maluku|Maluku Utara|Nusa Tenggara Barat|Nusa Tenggara Timur|Riau|Sulawesi Selatan|Sulawesi Tengah|Sulawesi Tenggara|Sulawesi Utara|Sumatera Barat|Sumatera Selatan|Sumatera Utara|Yogyakarta";\r
+aStates[107]="|Ardabil|Azarbayjan-e Gharbi|Azarbayjan-e Sharqi|Bushehr|Chahar Mahall va Bakhtiari|Esfahan|Fars|Gilan|Golestan|Hamadan|Hormozgan|Ilam|Kerman|Kermanshah|Khorasan|Khuzestan|Kohgiluyeh va Buyer Ahmad|Kordestan|Lorestan|Markazi|Mazandaran|Qazvin|Qom|Semnan|Sistan va Baluchestan|Tehran|Yazd|Zanjan";\r
+aStates[108]="|Al Anbar|Al Basrah|Al Muthanna|Al Qadisiyah|An Najaf|Arbil|As Sulaymaniyah|At Ta'mim|Babil|Baghdad|Dahuk|Dhi Qar|Diyala|Karbala'|Maysan|Ninawa|Salah ad Din|Wasit";\r
+aStates[109]="|Carlow|Cavan|Clare|Cork|Donegal|Dublin|Galway|Kerry|Kildare|Kilkenny|Laois|Leitrim|Limerick|Longford|Louth|Mayo|Meath|Monaghan|Offaly|Roscommon|Sligo|Tipperary|Waterford|Westmeath|Wexford|Wicklow";\r
+aStates[110]="|Antrim|Ards|Armagh|Ballymena|Ballymoney|Banbridge|Belfast|Carrickfergus|Castlereagh|Coleraine|Cookstown|Craigavon|Derry|Down|Dungannon|Fermanagh|Larne|Limavady|Lisburn|Magherafelt|Moyle|Newry and Mourne|Newtownabbey|North Down|Omagh|Strabane";\r
+aStates[111]="|Central|Haifa|Jerusalem|Northern|Southern|Tel Aviv";\r
+aStates[112]="|Abruzzi|Basilicata|Calabria|Campania|Emilia-Romagna|Friuli-Venezia Giulia|Lazio|Liguria|Lombardia|Marche|Molise|Piemonte|Puglia|Sardegna|Sicilia|Toscana|Trentino-Alto Adige|Umbria|Valle d'Aosta|Veneto";\r
+aStates[113]="|Clarendon|Hanover|Kingston|Manchester|Portland|Saint Andrew|Saint Ann|Saint Catherine|Saint Elizabeth|Saint James|Saint Mary|Saint Thomas|Trelawny|Westmoreland";\r
+aStates[114]="|Jan Mayen";\r
+aStates[115]="|Aichi|Akita|Aomori|Chiba|Ehime|Fukui|Fukuoka|Fukushima|Gifu|Gumma|Hiroshima|Hokkaido|Hyogo|Ibaraki|Ishikawa|Iwate|Kagawa|Kagoshima|Kanagawa|Kochi|Kumamoto|Kyoto|Mie|Miyagi|Miyazaki|Nagano|Nagasaki|Nara|Niigata|Oita|Okayama|Okinawa|Osaka|Saga|Saitama|Shiga|Shimane|Shizuoka|Tochigi|Tokushima|Tokyo|Tottori|Toyama|Wakayama|Yamagata|Yamaguchi|Yamanashi";\r
+aStates[116]="|Jarvis Island";\r
+aStates[117]="|Jersey";\r
+aStates[118]="|Johnston Atoll";\r
+aStates[119]="|'Amman|Ajlun|Al 'Aqabah|Al Balqa'|Al Karak|Al Mafraq|At Tafilah|Az Zarqa'|Irbid|Jarash|Ma'an|Madaba";\r
+aStates[120]="|Juan de Nova Island";\r
+aStates[121]="|Almaty|Aqmola|Aqtobe|Astana|Atyrau|Batys Qazaqstan|Bayqongyr|Mangghystau|Ongtustik Qazaqstan|Pavlodar|Qaraghandy|Qostanay|Qyzylorda|Shyghys Qazaqstan|Soltustik Qazaqstan|Zhambyl";\r
+aStates[122]="|Central|Coast|Eastern|Nairobi Area|North Eastern|Nyanza|Rift Valley|Western";\r
+aStates[123]="|Abaiang|Abemama|Aranuka|Arorae|Banaba|Banaba|Beru|Butaritari|Central Gilberts|Gilbert Islands|Kanton|Kiritimati|Kuria|Line Islands|Line Islands|Maiana|Makin|Marakei|Nikunau|Nonouti|Northern Gilberts|Onotoa|Phoenix Islands|Southern Gilberts|Tabiteuea|Tabuaeran|Tamana|Tarawa|Tarawa|Teraina";\r
+aStates[124]="|Chagang-do (Chagang Province)|Hamgyong-bukto (North Hamgyong Province)|Hamgyong-namdo (South Hamgyong Province)|Hwanghae-bukto (North Hwanghae Province)|Hwanghae-namdo (South Hwanghae Province)|Kaesong-si (Kaesong City)|Kangwon-do (Kangwon Province)|Namp'o-si (Namp'o City)|P'yongan-bukto (North P'yongan Province)|P'yongan-namdo (South P'yongan Province)|P'yongyang-si (P'yongyang City)|Yanggang-do (Yanggang Province)"\r
+aStates[125]="|Ch'ungch'ong-bukto|Ch'ungch'ong-namdo|Cheju-do|Cholla-bukto|Cholla-namdo|Inch'on-gwangyoksi|Kangwon-do|Kwangju-gwangyoksi|Kyonggi-do|Kyongsang-bukto|Kyongsang-namdo|Pusan-gwangyoksi|Soul-t'ukpyolsi|Taegu-gwangyoksi|Taejon-gwangyoksi|Ulsan-gwangyoksi";\r
+aStates[126]="|Al 'Asimah|Al Ahmadi|Al Farwaniyah|Al Jahra'|Hawalli";\r
+aStates[127]="|Batken Oblasty|Bishkek Shaary|Chuy Oblasty (Bishkek)|Jalal-Abad Oblasty|Naryn Oblasty|Osh Oblasty|Talas Oblasty|Ysyk-Kol Oblasty (Karakol)"\r
+aStates[128]="|Attapu|Bokeo|Bolikhamxai|Champasak|Houaphan|Khammouan|Louangnamtha|Louangphabang|Oudomxai|Phongsali|Salavan|Savannakhet|Viangchan|Viangchan|Xaignabouli|Xaisomboun|Xekong|Xiangkhoang";\r
+aStates[129]="|Aizkraukles Rajons|Aluksnes Rajons|Balvu Rajons|Bauskas Rajons|Cesu Rajons|Daugavpils|Daugavpils Rajons|Dobeles Rajons|Gulbenes Rajons|Jekabpils Rajons|Jelgava|Jelgavas Rajons|Jurmala|Kraslavas Rajons|Kuldigas Rajons|Leipaja|Liepajas Rajons|Limbazu Rajons|Ludzas Rajons|Madonas Rajons|Ogres Rajons|Preilu Rajons|Rezekne|Rezeknes Rajons|Riga|Rigas Rajons|Saldus Rajons|Talsu Rajons|Tukuma Rajons|Valkas Rajons|Valmieras Rajons|Ventspils|Ventspils Rajons";\r
+aStates[130]="|Beyrouth|Ech Chimal|Ej Jnoub|El Bekaa|Jabal Loubnane";\r
+aStates[131]="|Berea|Butha-Buthe|Leribe|Mafeteng|Maseru|Mohales Hoek|Mokhotlong|Qacha's Nek|Quthing|Thaba-Tseka";\r
+aStates[132]="|Bomi|Bong|Grand Bassa|Grand Cape Mount|Grand Gedeh|Grand Kru|Lofa|Margibi|Maryland|Montserrado|Nimba|River Cess|Sinoe";\r
+aStates[133]="|Ajdabiya|Al 'Aziziyah|Al Fatih|Al Jabal al Akhdar|Al Jufrah|Al Khums|Al Kufrah|An Nuqat al Khams|Ash Shati'|Awbari|Az Zawiyah|Banghazi|Darnah|Ghadamis|Gharyan|Misratah|Murzuq|Sabha|Sawfajjin|Surt|Tarabulus|Tarhunah|Tubruq|Yafran|Zlitan";\r
+aStates[134]="|Balzers|Eschen|Gamprin|Mauren|Planken|Ruggell|Schaan|Schellenberg|Triesen|Triesenberg|Vaduz";\r
+aStates[135]="|Akmenes Rajonas|Alytaus Rajonas|Alytus|Anyksciu Rajonas|Birstonas|Birzu Rajonas|Druskininkai|Ignalinos Rajonas|Jonavos Rajonas|Joniskio Rajonas|Jurbarko Rajonas|Kaisiadoriu Rajonas|Kaunas|Kauno Rajonas|Kedainiu Rajonas|Kelmes Rajonas|Klaipeda|Klaipedos Rajonas|Kretingos Rajonas|Kupiskio Rajonas|Lazdiju Rajonas|Marijampole|Marijampoles Rajonas|Mazeikiu Rajonas|Moletu Rajonas|Neringa Pakruojo Rajonas|Palanga|Panevezio Rajonas|Panevezys|Pasvalio Rajonas|Plunges Rajonas|Prienu Rajonas|Radviliskio Rajonas|Raseiniu Rajonas|Rokiskio Rajonas|Sakiu Rajonas|Salcininku Rajonas|Siauliai|Siauliu Rajonas|Silales Rajonas|Silutes Rajonas|Sirvintu Rajonas|Skuodo Rajonas|Svencioniu Rajonas|Taurages Rajonas|Telsiu Rajonas|Traku Rajonas|Ukmerges Rajonas|Utenos Rajonas|Varenos Rajonas|Vilkaviskio Rajonas|Vilniaus Rajonas|Vilnius|Zarasu Rajonas";\r
+aStates[136]="|Diekirch|Grevenmacher|Luxembourg";\r
+aStates[137]="|Macau";\r
+aStates[138]="|Aracinovo|Bac|Belcista|Berovo|Bistrica|Bitola|Blatec|Bogdanci|Bogomila|Bogovinje|Bosilovo|Brvenica|Cair (Skopje)|Capari|Caska|Cegrane|Centar (Skopje)|Centar Zupa|Cesinovo|Cucer-Sandevo|Debar|Delcevo|Delogozdi|Demir Hisar|Demir Kapija|Dobrusevo|Dolna Banjica|Dolneni|Dorce Petrov (Skopje)|Drugovo|Dzepciste|Gazi Baba (Skopje)|Gevgelija|Gostivar|Gradsko|Ilinden|Izvor|Jegunovce|Kamenjane|Karbinci|Karpos (Skopje)|Kavadarci|Kicevo|Kisela Voda (Skopje)|Klecevce|Kocani|Konce|Kondovo|Konopiste|Kosel|Kratovo|Kriva Palanka|Krivogastani|Krusevo|Kuklis|Kukurecani|Kumanovo|Labunista|Lipkovo|Lozovo|Lukovo|Makedonska Kamenica|Makedonski Brod|Mavrovi Anovi|Meseista|Miravci|Mogila|Murtino|Negotino|Negotino-Poloska|Novaci|Novo Selo|Oblesevo|Ohrid|Orasac|Orizari|Oslomej|Pehcevo|Petrovec|Plasnia|Podares|Prilep|Probistip|Radovis|Rankovce|Resen|Rosoman|Rostusa|Samokov|Saraj|Sipkovica|Sopiste|Sopotnika|Srbinovo|Star Dojran|Staravina|Staro Nagoricane|Stip|Struga|Strumica|Studenicani|Suto Orizari (Skopje)|Sveti Nikole|Tearce|Tetovo|Topolcani|Valandovo|Vasilevo|Veles|Velesta|Vevcani|Vinica|Vitoliste|Vranestica|Vrapciste|Vratnica|Vrutok|Zajas|Zelenikovo|Zileno|Zitose|Zletovo|Zrnovci";\r
+aStates[139]="|Antananarivo|Antsiranana|Fianarantsoa|Mahajanga|Toamasina|Toliara";\r
+aStates[140]="|Balaka|Blantyre|Chikwawa|Chiradzulu|Chitipa|Dedza|Dowa|Karonga|Kasungu|Likoma|Lilongwe|Machinga (Kasupe)|Mangochi|Mchinji|Mulanje|Mwanza|Mzimba|Nkhata Bay|Nkhotakota|Nsanje|Ntcheu|Ntchisi|Phalombe|Rumphi|Salima|Thyolo|Zomba";\r
+aStates[141]="|Johor|Kedah|Kelantan|Labuan|Melaka|Negeri Sembilan|Pahang|Perak|Perlis|Pulau Pinang|Sabah|Sarawak|Selangor|Terengganu|Wilayah Persekutuan";\r
+aStates[142]="|Alifu|Baa|Dhaalu|Faafu|Gaafu Alifu|Gaafu Dhaalu|Gnaviyani|Haa Alifu|Haa Dhaalu|Kaafu|Laamu|Lhaviyani|Maale|Meemu|Noonu|Raa|Seenu|Shaviyani|Thaa|Vaavu";\r
+aStates[143]="|Gao|Kayes|Kidal|Koulikoro|Mopti|Segou|Sikasso|Tombouctou";\r
+aStates[144]="|Valletta";\r
+aStates[145]="|Man, Isle of";\r
+aStates[146]="|Ailinginae|Ailinglaplap|Ailuk|Arno|Aur|Bikar|Bikini|Bokak|Ebon|Enewetak|Erikub|Jabat|Jaluit|Jemo|Kili|Kwajalein|Lae|Lib|Likiep|Majuro|Maloelap|Mejit|Mili|Namorik|Namu|Rongelap|Rongrik|Toke|Ujae|Ujelang|Utirik|Wotho|Wotje";\r
+aStates[147]="|Martinique";\r
+aStates[148]="|Adrar|Assaba|Brakna|Dakhlet Nouadhibou|Gorgol|Guidimaka|Hodh Ech Chargui|Hodh El Gharbi|Inchiri|Nouakchott|Tagant|Tiris Zemmour|Trarza";\r
+aStates[149]="|Agalega Islands|Black River|Cargados Carajos Shoals|Flacq|Grand Port|Moka|Pamplemousses|Plaines Wilhems|Port Louis|Riviere du Rempart|Rodrigues|Savanne";\r
+aStates[150]="|Mayotte";\r
+aStates[151]="|Aguascalientes|Baja California|Baja California Sur|Campeche|Chiapas|Chihuahua|Coahuila de Zaragoza|Colima|Distrito Federal|Durango|Guanajuato|Guerrero|Hidalgo|Jalisco|Mexico|Michoacan de Ocampo|Morelos|Nayarit|Nuevo Leon|Oaxaca|Puebla|Queretaro de Arteaga|Quintana Roo|San Luis Potosi|Sinaloa|Sonora|Tabasco|Tamaulipas|Tlaxcala|Veracruz-Llave|Yucatan|Zacatecas";\r
+aStates[152]="|Chuuk (Truk)|Kosrae|Pohnpei|Yap";\r
+aStates[153]="|Midway Islands";\r
+aStates[154]="|Balti|Cahul|Chisinau|Chisinau|Dubasari|Edinet|Gagauzia|Lapusna|Orhei|Soroca|Tighina|Ungheni";\r
+aStates[155]="|Fontvieille|La Condamine|Monaco-Ville|Monte-Carlo";\r
+aStates[156]="|Arhangay|Bayan-Olgiy|Bayanhongor|Bulgan|Darhan|Dornod|Dornogovi|Dundgovi|Dzavhan|Erdenet|Govi-Altay|Hentiy|Hovd|Hovsgol|Omnogovi|Ovorhangay|Selenge|Suhbaatar|Tov|Ulaanbaatar|Uvs";\r
+aStates[157]="|Saint Anthony|Saint Georges|Saint Peter's";\r
+aStates[158]="|Agadir|Al Hoceima|Azilal|Ben Slimane|Beni Mellal|Boulemane|Casablanca|Chaouen|El Jadida|El Kelaa des Srarhna|Er Rachidia|Essaouira|Fes|Figuig|Guelmim|Ifrane|Kenitra|Khemisset|Khenifra|Khouribga|Laayoune|Larache|Marrakech|Meknes|Nador|Ouarzazate|Oujda|Rabat-Sale|Safi|Settat|Sidi Kacem|Tan-Tan|Tanger|Taounate|Taroudannt|Tata|Taza|Tetouan|Tiznit";\r
+aStates[159]="|Cabo Delgado|Gaza|Inhambane|Manica|Maputo|Nampula|Niassa|Sofala|Tete|Zambezia";\r
+aStates[160]="|Caprivi|Erongo|Hardap|Karas|Khomas|Kunene|Ohangwena|Okavango|Omaheke|Omusati|Oshana|Oshikoto|Otjozondjupa";\r
+aStates[161]="|Aiwo|Anabar|Anetan|Anibare|Baiti|Boe|Buada|Denigomodu|Ewa|Ijuw|Meneng|Nibok|Uaboe|Yaren";\r
+aStates[162]="|Bagmati|Bheri|Dhawalagiri|Gandaki|Janakpur|Karnali|Kosi|Lumbini|Mahakali|Mechi|Narayani|Rapti|Sagarmatha|Seti";\r
+aStates[163]="|Drenthe|Flevoland|Friesland|Gelderland|Groningen|Limburg|Noord-Brabant|Noord-Holland|Overijssel|Utrecht|Zeeland|Zuid-Holland";\r
+aStates[164]="|Netherlands Antilles";\r
+aStates[165]="|Iles Loyaute|Nord|Sud";\r
+aStates[166]="|Akaroa|Amuri|Ashburton|Bay of Islands|Bruce|Buller|Chatham Islands|Cheviot|Clifton|Clutha|Cook|Dannevirke|Egmont|Eketahuna|Ellesmere|Eltham|Eyre|Featherston|Franklin|Golden Bay|Great Barrier Island|Grey|Hauraki Plains|Hawera|Hawke's Bay|Heathcote|Hikurangi|Hobson|Hokianga|Horowhenua|Hurunui|Hutt|Inangahua|Inglewood|Kaikoura|Kairanga|Kiwitea|Lake|Mackenzie|Malvern|Manaia|Manawatu|Mangonui|Maniototo|Marlborough|Masterton|Matamata|Mount Herbert|Ohinemuri|Opotiki|Oroua|Otamatea|Otorohanga|Oxford|Pahiatua|Paparua|Patea|Piako|Pohangina|Raglan|Rangiora|Rangitikei|Rodney|Rotorua|Runanga|Saint Kilda|Silverpeaks|Southland|Stewart Island|Stratford|Strathallan|Taranaki|Taumarunui|Taupo|Tauranga|Thames-Coromandel|Tuapeka|Vincent|Waiapu|Waiheke|Waihemo|Waikato|Waikohu|Waimairi|Waimarino|Waimate|Waimate West|Waimea|Waipa|Waipawa|Waipukurau|Wairarapa South|Wairewa|Wairoa|Waitaki|Waitomo|Waitotara|Wallace|Wanganui|Waverley|Westland|Whakatane|Whangarei|Whangaroa|Woodville";\r
+aStates[167]="|Atlantico Norte|Atlantico Sur|Boaco|Carazo|Chinandega|Chontales|Esteli|Granada|Jinotega|Leon|Madriz|Managua|Masaya|Matagalpa|Nueva Segovia|Rio San Juan|Rivas";\r
+aStates[168]="|Agadez|Diffa|Dosso|Maradi|Niamey|Tahoua|Tillaberi|Zinder";\r
+aStates[169]="|Abia|Abuja Federal Capital Territory|Adamawa|Akwa Ibom|Anambra|Bauchi|Bayelsa|Benue|Borno|Cross River|Delta|Ebonyi|Edo|Ekiti|Enugu|Gombe|Imo|Jigawa|Kaduna|Kano|Katsina|Kebbi|Kogi|Kwara|Lagos|Nassarawa|Niger|Ogun|Ondo|Osun|Oyo|Plateau|Rivers|Sokoto|Taraba|Yobe|Zamfara";\r
+aStates[170]="|Niue";\r
+aStates[171]="|Norfolk Island";\r
+aStates[172]="|Northern Islands|Rota|Saipan|Tinian";\r
+aStates[173]="|Akershus|Aust-Agder|Buskerud|Finnmark|Hedmark|Hordaland|More og Romsdal|Nord-Trondelag|Nordland|Oppland|Oslo|Ostfold|Rogaland|Sogn og Fjordane|Sor-Trondelag|Telemark|Troms|Vest-Agder|Vestfold";\r
+aStates[174]="|Ad Dakhiliyah|Al Batinah|Al Wusta|Ash Sharqiyah|Az Zahirah|Masqat|Musandam|Zufar";\r
+aStates[175]="|Balochistan|Federally Administered Tribal Areas|Islamabad Capital Territory|North-West Frontier Province|Punjab|Sindh";\r
+aStates[176]="|Aimeliik|Airai|Angaur|Hatobohei|Kayangel|Koror|Melekeok|Ngaraard|Ngarchelong|Ngardmau|Ngatpang|Ngchesar|Ngeremlengui|Ngiwal|Palau Island|Peleliu|Sonsoral|Tobi";\r
+aStates[177]="|Bocas del Toro|Chiriqui|Cocle|Colon|Darien|Herrera|Los Santos|Panama|San Blas|Veraguas";\r
+aStates[178]="|Bougainville|Central|Chimbu|East New Britain|East Sepik|Eastern Highlands|Enga|Gulf|Madang|Manus|Milne Bay|Morobe|National Capital|New Ireland|Northern|Sandaun|Southern Highlands|West New Britain|Western|Western Highlands";\r
+aStates[179]="|Alto Paraguay|Alto Parana|Amambay|Asuncion (city)|Boqueron|Caaguazu|Caazapa|Canindeyu|Central|Concepcion|Cordillera|Guaira|Itapua|Misiones|Neembucu|Paraguari|Presidente Hayes|San Pedro";\r
+aStates[180]="|Amazonas|Ancash|Apurimac|Arequipa|Ayacucho|Cajamarca|Callao|Cusco|Huancavelica|Huanuco|Ica|Junin|La Libertad|Lambayeque|Lima|Loreto|Madre de Dios|Moquegua|Pasco|Piura|Puno|San Martin|Tacna|Tumbes|Ucayali";\r
+aStates[181]="|Abra|Agusan del Norte|Agusan del Sur|Aklan|Albay|Angeles|Antique|Aurora|Bacolod|Bago|Baguio|Bais|Basilan|Basilan City|Bataan|Batanes|Batangas|Batangas City|Benguet|Bohol|Bukidnon|Bulacan|Butuan|Cabanatuan|Cadiz|Cagayan|Cagayan de Oro|Calbayog|Caloocan|Camarines Norte|Camarines Sur|Camiguin|Canlaon|Capiz|Catanduanes|Cavite|Cavite City|Cebu|Cebu City|Cotabato|Dagupan|Danao|Dapitan|Davao City Davao|Davao del Sur|Davao Oriental|Dipolog|Dumaguete|Eastern Samar|General Santos|Gingoog|Ifugao|Iligan|Ilocos Norte|Ilocos Sur|Iloilo|Iloilo City|Iriga|Isabela|Kalinga-Apayao|La Carlota|La Union|Laguna|Lanao del Norte|Lanao del Sur|Laoag|Lapu-Lapu|Legaspi|Leyte|Lipa|Lucena|Maguindanao|Mandaue|Manila|Marawi|Marinduque|Masbate|Mindoro Occidental|Mindoro Oriental|Misamis Occidental|Misamis Oriental|Mountain|Naga|Negros Occidental|Negros Oriental|North Cotabato|Northern Samar|Nueva Ecija|Nueva Vizcaya|Olongapo|Ormoc|Oroquieta|Ozamis|Pagadian|Palawan|Palayan|Pampanga|Pangasinan|Pasay|Puerto Princesa|Quezon|Quezon City|Quirino|Rizal|Romblon|Roxas|Samar|San Carlos (in Negros Occidental)|San Carlos (in Pangasinan)|San Jose|San Pablo|Silay|Siquijor|Sorsogon|South Cotabato|Southern Leyte|Sultan Kudarat|Sulu|Surigao|Surigao del Norte|Surigao del Sur|Tacloban|Tagaytay|Tagbilaran|Tangub|Tarlac|Tawitawi|Toledo|Trece Martires|Zambales|Zamboanga|Zamboanga del Norte|Zamboanga del Sur";\r
+aStates[182]="|Pitcaim Islands";\r
+aStates[183]="|Dolnoslaskie|Kujawsko-Pomorskie|Lodzkie|Lubelskie|Lubuskie|Malopolskie|Mazowieckie|Opolskie|Podkarpackie|Podlaskie|Pomorskie|Slaskie|Swietokrzyskie|Warminsko-Mazurskie|Wielkopolskie|Zachodniopomorskie";\r
+aStates[184]="|Acores (Azores)|Aveiro|Beja|Braga|Braganca|Castelo Branco|Coimbra|Evora|Faro|Guarda|Leiria|Lisboa|Madeira|Portalegre|Porto|Santarem|Setubal|Viana do Castelo|Vila Real|Viseu";\r
+aStates[185]="|Adjuntas|Aguada|Aguadilla|Aguas Buenas|Aibonito|Anasco|Arecibo|Arroyo|Barceloneta|Barranquitas|Bayamon|Cabo Rojo|Caguas|Camuy|Canovanas|Carolina|Catano|Cayey|Ceiba|Ciales|Cidra|Coamo|Comerio|Corozal|Culebra|Dorado|Fajardo|Florida|Guanica|Guayama|Guayanilla|Guaynabo|Gurabo|Hatillo|Hormigueros|Humacao|Isabela|Jayuya|Juana Diaz|Juncos|Lajas|Lares|Las Marias|Las Piedras|Loiza|Luquillo|Manati|Maricao|Maunabo|Mayaguez|Moca|Morovis|Naguabo|Naranjito|Orocovis|Patillas|Penuelas|Ponce|Quebradillas|Rincon|Rio Grande|Sabana Grande|Salinas|San German|San Juan|San Lorenzo|San Sebastian|Santa Isabel|Toa Alta|Toa Baja|Trujillo Alto|Utuado|Vega Alta|Vega Baja|Vieques|Villalba|Yabucoa|Yauco";\r
+aStates[186]="|Ad Dawhah|Al Ghuwayriyah|Al Jumayliyah|Al Khawr|Al Wakrah|Ar Rayyan|Jarayan al Batinah|Madinat ash Shamal|Umm Salal";\r
+aStates[187]="|Reunion";\r
+aStates[188]="|Alba|Arad|Arges|Bacau|Bihor|Bistrita-Nasaud|Botosani|Braila|Brasov|Bucuresti|Buzau|Calarasi|Caras-Severin|Cluj|Constanta|Covasna|Dimbovita|Dolj|Galati|Giurgiu|Gorj|Harghita|Hunedoara|Ialomita|Iasi|Maramures|Mehedinti|Mures|Neamt|Olt|Prahova|Salaj|Satu Mare|Sibiu|Suceava|Teleorman|Timis|Tulcea|Vaslui|Vilcea|Vrancea";\r
+aStates[189]="|Adygeya (Maykop)|Aginskiy Buryatskiy (Aginskoye)|Altay (Gorno-Altaysk)|Altayskiy (Barnaul)|Amurskaya (Blagoveshchensk)|Arkhangel'skaya|Astrakhanskaya|Bashkortostan (Ufa)|Belgorodskaya|Bryanskaya|Buryatiya (Ulan-Ude)|Chechnya (Groznyy)|Chelyabinskaya|Chitinskaya|Chukotskiy (Anadyr')|Chuvashiya (Cheboksary)|Dagestan (Makhachkala)|Evenkiyskiy (Tura)|Ingushetiya (Nazran')|Irkutskaya|Ivanovskaya|Kabardino-Balkariya (Nal'chik)|Kaliningradskaya|Kalmykiya (Elista)|Kaluzhskaya|Kamchatskaya (Petropavlovsk-Kamchatskiy)|Karachayevo-Cherkesiya (Cherkessk)|Kareliya (Petrozavodsk)|Kemerovskaya|Khabarovskiy|Khakasiya (Abakan)|Khanty-Mansiyskiy (Khanty-Mansiysk)|Kirovskaya|Komi (Syktyvkar)|Komi-Permyatskiy (Kudymkar)|Koryakskiy (Palana)|Kostromskaya|Krasnodarskiy|Krasnoyarskiy|Kurganskaya|Kurskaya|Leningradskaya|Lipetskaya|Magadanskaya|Mariy-El (Yoshkar-Ola)|Mordoviya (Saransk)|Moskovskaya|Moskva (Moscow)|Murmanskaya|Nenetskiy (Nar'yan-Mar)|Nizhegorodskaya|Novgorodskaya|Novosibirskaya|Omskaya|Orenburgskaya|Orlovskaya (Orel)|Penzenskaya|Permskaya|Primorskiy (Vladivostok)|Pskovskaya|Rostovskaya|Ryazanskaya|Sakha (Yakutsk)|Sakhalinskaya (Yuzhno-Sakhalinsk)|Samarskaya|Sankt-Peterburg (Saint Petersburg)|Saratovskaya|Severnaya Osetiya-Alaniya [North Ossetia] (Vladikavkaz)|Smolenskaya|Stavropol'skiy|Sverdlovskaya (Yekaterinburg)|Tambovskaya|Tatarstan (Kazan')|Taymyrskiy (Dudinka)|Tomskaya|Tul'skaya|Tverskaya|Tyumenskaya|Tyva (Kyzyl)|Udmurtiya (Izhevsk)|Ul'yanovskaya|Ust'-Ordynskiy Buryatskiy (Ust'-Ordynskiy)|Vladimirskaya|Volgogradskaya|Vologodskaya|Voronezhskaya|Yamalo-Nenetskiy (Salekhard)|Yaroslavskaya|Yevreyskaya";\r
+aStates[190]="|Butare|Byumba|Cyangugu|Gikongoro|Gisenyi|Gitarama|Kibungo|Kibuye|Kigali Rurale|Kigali-ville|Ruhengeri|Umutara";\r
+aStates[191]="|Ascension|Saint Helena|Tristan da Cunha";\r
+aStates[192]="|Christ Church Nichola Town|Saint Anne Sandy Point|Saint George Basseterre|Saint George Gingerland|Saint James Windward|Saint John Capisterre|Saint John Figtree|Saint Mary Cayon|Saint Paul Capisterre|Saint Paul Charlestown|Saint Peter Basseterre|Saint Thomas Lowland|Saint Thomas Middle Island|Trinity Palmetto Point";\r
+aStates[193]="|Anse-la-Raye|Castries|Choiseul|Dauphin|Dennery|Gros Islet|Laborie|Micoud|Praslin|Soufriere|Vieux Fort";\r
+aStates[194]="|Miquelon|Saint Pierre";\r
+aStates[195]="|Charlotte|Grenadines|Saint Andrew|Saint David|Saint George|Saint Patrick";\r
+aStates[196]="|A'ana|Aiga-i-le-Tai|Atua|Fa'asaleleaga|Gaga'emauga|Gagaifomauga|Palauli|Satupa'itea|Tuamasaga|Va'a-o-Fonoti|Vaisigano";\r
+aStates[197]="|Acquaviva|Borgo Maggiore|Chiesanuova|Domagnano|Faetano|Fiorentino|Monte Giardino|San Marino|Serravalle";\r
+aStates[198]="|Principe|Sao Tome";\r
+aStates[199]="|'Asir|Al Bahah|Al Hudud ash Shamaliyah|Al Jawf|Al Madinah|Al Qasim|Ar Riyad|Ash Sharqiyah (Eastern Province)|Ha'il|Jizan|Makkah|Najran|Tabuk";\r
+aStates[200]="|Aberdeen City|Aberdeenshire|Angus|Argyll and Bute|City of Edinburgh|Clackmannanshire|Dumfries and Galloway|Dundee City|East Ayrshire|East Dunbartonshire|East Lothian|East Renfrewshire|Eilean Siar (Western Isles)|Falkirk|Fife|Glasgow City|Highland|Inverclyde|Midlothian|Moray|North Ayrshire|North Lanarkshire|Orkney Islands|Perth and Kinross|Renfrewshire|Shetland Islands|South Ayrshire|South Lanarkshire|Stirling|The Scottish Borders|West Dunbartonshire|West Lothian";\r
+aStates[201]="|Dakar|Diourbel|Fatick|Kaolack|Kolda|Louga|Saint-Louis|Tambacounda|Thies|Ziguinchor";\r
+aStates[202]="|Anse aux Pins|Anse Boileau|Anse Etoile|Anse Louis|Anse Royale|Baie Lazare|Baie Sainte Anne|Beau Vallon|Bel Air|Bel Ombre|Cascade|Glacis|Grand' Anse (on Mahe)|Grand' Anse (on Praslin)|La Digue|La Riviere Anglaise|Mont Buxton|Mont Fleuri|Plaisance|Pointe La Rue|Port Glaud|Saint Louis|Takamaka";\r
+aStates[203]="|Eastern|Northern|Southern|Western";\r
+aStates[204]="|Singapore";\r
+aStates[205]="|Banskobystricky|Bratislavsky|Kosicky|Nitriansky|Presovsky|Trenciansky|Trnavsky|Zilinsky";\r
+aStates[206]="|Ajdovscina|Beltinci|Bled|Bohinj|Borovnica|Bovec|Brda|Brezice|Brezovica|Cankova-Tisina|Celje|Cerklje na Gorenjskem|Cerknica|Cerkno|Crensovci|Crna na Koroskem|Crnomelj|Destrnik-Trnovska Vas|Divaca|Dobrepolje|Dobrova-Horjul-Polhov Gradec|Dol pri Ljubljani|Domzale|Dornava|Dravograd|Duplek|Gorenja Vas-Poljane|Gorisnica|Gornja Radgona|Gornji Grad|Gornji Petrovci|Grosuplje|Hodos Salovci|Hrastnik|Hrpelje-Kozina|Idrija|Ig|Ilirska Bistrica|Ivancna Gorica|Izola|Jesenice|Jursinci|Kamnik|Kanal|Kidricevo|Kobarid|Kobilje|Kocevje|Komen|Koper|Kozje|Kranj|Kranjska Gora|Krsko|Kungota|Kuzma|Lasko|Lenart|Lendava|Litija|Ljubljana|Ljubno|Ljutomer|Logatec|Loska Dolina|Loski Potok|Luce|Lukovica|Majsperk|Maribor|Medvode|Menges|Metlika|Mezica|Miren-Kostanjevica|Mislinja|Moravce|Moravske Toplice|Mozirje|Murska Sobota|Muta|Naklo|Nazarje|Nova Gorica|Novo Mesto|Odranci|Ormoz|Osilnica|Pesnica|Piran|Pivka|Podcetrtek|Podvelka-Ribnica|Postojna|Preddvor|Ptuj|Puconci|Race-Fram|Radece|Radenci|Radlje ob Dravi|Radovljica|Ravne-Prevalje|Ribnica|Rogasevci|Rogaska Slatina|Rogatec|Ruse|Semic|Sencur|Sentilj|Sentjernej|Sentjur pri Celju|Sevnica|Sezana|Skocjan|Skofja Loka|Skofljica|Slovenj Gradec|Slovenska Bistrica|Slovenske Konjice|Smarje pri Jelsah|Smartno ob Paki|Sostanj|Starse|Store|Sveti Jurij|Tolmin|Trbovlje|Trebnje|Trzic|Turnisce|Velenje|Velike Lasce|Videm|Vipava|Vitanje|Vodice|Vojnik|Vrhnika|Vuzenica|Zagorje ob Savi|Zalec|Zavrc|Zelezniki|Ziri|Zrece";\r
+aStates[207]="|Bellona|Central|Choiseul (Lauru)|Guadalcanal|Honiara|Isabel|Makira|Malaita|Rennell|Temotu|Western";\r
+aStates[208]="|Awdal|Bakool|Banaadir|Bari|Bay|Galguduud|Gedo|Hiiraan|Jubbada Dhexe|Jubbada Hoose|Mudug|Nugaal|Sanaag|Shabeellaha Dhexe|Shabeellaha Hoose|Sool|Togdheer|Woqooyi Galbeed";\r
+aStates[209]="|Eastern Cape|Free State|Gauteng|KwaZulu-Natal|Mpumalanga|North-West|Northern Cape|Northern Province|Western Cape";\r
+aStates[210]="|Bird Island|Bristol Island|Clerke Rocks|Montagu Island|Saunders Island|South Georgia|Southern Thule|Traversay Islands";\r
+aStates[211]="|Andalucia|Aragon|Asturias|Baleares (Balearic Islands)|Canarias (Canary Islands)|Cantabria|Castilla y Leon|Castilla-La Mancha|Cataluna|Ceuta|Communidad Valencian|Extremadura|Galicia|Islas Chafarinas|La Rioja|Madrid|Melilla|Murcia|Navarra|Pais Vasco (Basque Country)|Penon de Alhucemas|Penon de Velez de la Gomera";\r
+aStates[212]="|Spratly Islands";\r
+aStates[213]="|Central|Eastern|North Central|North Eastern|North Western|Northern|Sabaragamuwa|Southern|Uva|Western";\r
+aStates[214]="|A'ali an Nil|Al Bahr al Ahmar|Al Buhayrat|Al Jazirah|Al Khartum|Al Qadarif|Al Wahdah|An Nil al Abyad|An Nil al Azraq|Ash Shamaliyah|Bahr al Jabal|Gharb al Istiwa'iyah|Gharb Bahr al Ghazal|Gharb Darfur|Gharb Kurdufan|Janub Darfur|Janub Kurdufan|Junqali|Kassala|Nahr an Nil|Shamal Bahr al Ghazal|Shamal Darfur|Shamal Kurdufan|Sharq al Istiwa'iyah|Sinnar|Warab";\r
+aStates[215]="|Brokopondo|Commewijne|Coronie|Marowijne|Nickerie|Para|Paramaribo|Saramacca|Sipaliwini|Wanica";\r
+aStates[216]="|Barentsoya|Bjornoya|Edgeoya|Hopen|Kvitoya|Nordaustandet|Prins Karls Forland|Spitsbergen";\r
+aStates[217]="|Hhohho|Lubombo|Manzini|Shiselweni";\r
+aStates[218]="|Blekinge|Dalarnas|Gavleborgs|Gotlands|Hallands|Jamtlands|Jonkopings|Kalmar|Kronobergs|Norrbottens|Orebro|Ostergotlands|Skane|Sodermanlands|Stockholms|Uppsala|Varmlands|Vasterbottens|Vasternorrlands|Vastmanlands|Vastra Gotalands";\r
+aStates[219]="|Aargau|Ausser-Rhoden|Basel-Landschaft|Basel-Stadt|Bern|Fribourg|Geneve|Glarus|Graubunden|Inner-Rhoden|Jura|Luzern|Neuchatel|Nidwalden|Obwalden|Sankt Gallen|Schaffhausen|Schwyz|Solothurn|Thurgau|Ticino|Uri|Valais|Vaud|Zug|Zurich";\r
+aStates[220]="|Al Hasakah|Al Ladhiqiyah|Al Qunaytirah|Ar Raqqah|As Suwayda'|Dar'a|Dayr az Zawr|Dimashq|Halab|Hamah|Hims|Idlib|Rif Dimashq|Tartus";\r
+aStates[221]="|Chang-hua|Chi-lung|Chia-i|Chia-i|Chung-hsing-hsin-ts'un|Hsin-chu|Hsin-chu|Hua-lien|I-lan|Kao-hsiung|Kao-hsiung|Miao-li|Nan-t'ou|P'eng-hu|P'ing-tung|T'ai-chung|T'ai-chung|T'ai-nan|T'ai-nan|T'ai-pei|T'ai-pei|T'ai-tung|T'ao-yuan|Yun-lin";\r
+aStates[222]="|Viloyati Khatlon|Viloyati Leninobod|Viloyati Mukhtori Kuhistoni Badakhshon";\r
+aStates[223]="|Arusha|Dar es Salaam|Dodoma|Iringa|Kagera|Kigoma|Kilimanjaro|Lindi|Mara|Mbeya|Morogoro|Mtwara|Mwanza|Pemba North|Pemba South|Pwani|Rukwa|Ruvuma|Shinyanga|Singida|Tabora|Tanga|Zanzibar Central/South|Zanzibar North|Zanzibar Urban/West";\r
+aStates[224]="|Amnat Charoen|Ang Thong|Buriram|Chachoengsao|Chai Nat|Chaiyaphum|Chanthaburi|Chiang Mai|Chiang Rai|Chon Buri|Chumphon|Kalasin|Kamphaeng Phet|Kanchanaburi|Khon Kaen|Krabi|Krung Thep Mahanakhon (Bangkok)|Lampang|Lamphun|Loei|Lop Buri|Mae Hong Son|Maha Sarakham|Mukdahan|Nakhon Nayok|Nakhon Pathom|Nakhon Phanom|Nakhon Ratchasima|Nakhon Sawan|Nakhon Si Thammarat|Nan|Narathiwat|Nong Bua Lamphu|Nong Khai|Nonthaburi|Pathum Thani|Pattani|Phangnga|Phatthalung|Phayao|Phetchabun|Phetchaburi|Phichit|Phitsanulok|Phra Nakhon Si Ayutthaya|Phrae|Phuket|Prachin Buri|Prachuap Khiri Khan|Ranong|Ratchaburi|Rayong|Roi Et|Sa Kaeo|Sakon Nakhon|Samut Prakan|Samut Sakhon|Samut Songkhram|Sara Buri|Satun|Sing Buri|Sisaket|Songkhla|Sukhothai|Suphan Buri|Surat Thani|Surin|Tak|Trang|Trat|Ubon Ratchathani|Udon Thani|Uthai Thani|Uttaradit|Yala|Yasothon";\r
+aStates[225]="|Tobago";\r
+aStates[226]="|De La Kara|Des Plateaux|Des Savanes|Du Centre|Maritime";\r
+aStates[227]="|Atafu|Fakaofo|Nukunonu";\r
+aStates[228]="|Ha'apai|Tongatapu|Vava'u";\r
+aStates[229]="|Arima|Caroni|Mayaro|Nariva|Port-of-Spain|Saint Andrew|Saint David|Saint George|Saint Patrick|San Fernando|Victoria";\r
+aStates[230]="|Ariana|Beja|Ben Arous|Bizerte|El Kef|Gabes|Gafsa|Jendouba|Kairouan|Kasserine|Kebili|Mahdia|Medenine|Monastir|Nabeul|Sfax|Sidi Bou Zid|Siliana|Sousse|Tataouine|Tozeur|Tunis|Zaghouan";\r
+aStates[231]="|Adana|Adiyaman|Afyon|Agri|Aksaray|Amasya|Ankara|Antalya|Ardahan|Artvin|Aydin|Balikesir|Bartin|Batman|Bayburt|Bilecik|Bingol|Bitlis|Bolu|Burdur|Bursa|Canakkale|Cankiri|Corum|Denizli|Diyarbakir|Duzce|Edirne|Elazig|Erzincan|Erzurum|Eskisehir|Gaziantep|Giresun|Gumushane|Hakkari|Hatay|Icel|Igdir|Isparta|Istanbul|Izmir|Kahramanmaras|Karabuk|Karaman|Kars|Kastamonu|Kayseri|Kilis|Kirikkale|Kirklareli|Kirsehir|Kocaeli|Konya|Kutahya|Malatya|Manisa|Mardin|Mugla|Mus|Nevsehir|Nigde|Ordu|Osmaniye|Rize|Sakarya|Samsun|Sanliurfa|Siirt|Sinop|Sirnak|Sivas|Tekirdag|Tokat|Trabzon|Tunceli|Usak|Van|Yalova|Yozgat|Zonguldak";\r
+aStates[232]="|Ahal Welayaty|Balkan Welayaty|Dashhowuz Welayaty|Lebap Welayaty|Mary Welayaty";\r
+aStates[233]="|Tuvalu";\r
+aStates[234]="|Adjumani|Apac|Arua|Bugiri|Bundibugyo|Bushenyi|Busia|Gulu|Hoima|Iganga|Jinja|Kabale|Kabarole|Kalangala|Kampala|Kamuli|Kapchorwa|Kasese|Katakwi|Kibale|Kiboga|Kisoro|Kitgum|Kotido|Kumi|Lira|Luwero|Masaka|Masindi|Mbale|Mbarara|Moroto|Moyo|Mpigi|Mubende|Mukono|Nakasongola|Nebbi|Ntungamo|Pallisa|Rakai|Rukungiri|Sembabule|Soroti|Tororo";\r
+aStates[235]="|Avtonomna Respublika Krym (Simferopol')|Cherkas'ka (Cherkasy)|Chernihivs'ka (Chernihiv)|Chernivets'ka (Chernivtsi)|Dnipropetrovs'ka (Dnipropetrovs'k)|Donets'ka (Donets'k)|Ivano-Frankivs'ka (Ivano-Frankivs'k)|Kharkivs'ka (Kharkiv)|Khersons'ka (Kherson)|Khmel'nyts'ka (Khmel'nyts'kyy)|Kirovohrads'ka (Kirovohrad)|Kyyiv|Kyyivs'ka (Kiev)|L'vivs'ka (L'viv)|Luhans'ka (Luhans'k)|Mykolayivs'ka (Mykolayiv)|Odes'ka (Odesa)|Poltavs'ka (Poltava)|Rivnens'ka (Rivne)|Sevastopol'|Sums'ka (Sumy)|Ternopil's'ka (Ternopil')|Vinnyts'ka (Vinnytsya)|Volyns'ka (Luts'k)|Zakarpats'ka (Uzhhorod)|Zaporiz'ka (Zaporizhzhya)|Zhytomyrs'ka (Zhytomyr)"\r
+aStates[236]="|'Ajman|Abu Zaby (Abu Dhabi)|Al Fujayrah|Ash Shariqah (Sharjah)|Dubayy (Dubai)|Ra's al Khaymah|Umm al Qaywayn";\r
+aStates[237]="|Barking and Dagenham|Barnet|Barnsley|Bath and North East Somerset|Bedfordshire|Bexley|Birmingham|Blackburn with Darwen|Blackpool|Bolton|Bournemouth|Bracknell Forest|Bradford|Brent|Brighton and Hove|Bromley|Buckinghamshire|Bury|Calderdale|Cambridgeshire|Camden|Cheshire|City of Bristol|City of Kingston upon Hull|City of London|Cornwall|Coventry|Croydon|Cumbria|Darlington|Derby|Derbyshire|Devon|Doncaster|Dorset|Dudley|Durham|Ealing|East Riding of Yorkshire|East Sussex|Enfield|Essex|Gateshead|Gloucestershire|Greenwich|Hackney|Halton|Hammersmith and Fulham|Hampshire|Haringey|Harrow|Hartlepool|Havering|Herefordshire|Hertfordshire|Hillingdon|Hounslow|Isle of Wight|Islington|Kensington and Chelsea|Kent|Kingston upon Thames|Kirklees|Knowsley|Lambeth|Lancashire|Leeds|Leicester|Leicestershire|Lewisham|Lincolnshire|Liverpool|Luton|Manchester|Medway|Merton|Middlesbrough|Milton Keynes|Newcastle upon Tyne|Newham|Norfolk|North East Lincolnshire|North Lincolnshire|North Somerset|North Tyneside|North Yorkshire|Northamptonshire|Northumberland|Nottingham|Nottinghamshire|Oldham|Oxfordshire|Peterborough|Plymouth|Poole|Portsmouth|Reading|Redbridge|Redcar and Cleveland|Richmond upon Thames|Rochdale|Rotherham|Rutland|Salford|Sandwell|Sefton|Sheffield|Shropshire|Slough|Solihull|Somerset|South Gloucestershire|South Tyneside|Southampton|Southend-on-Sea|Southwark|St. Helens|Staffordshire|Stockport|Stockton-on-Tees|Stoke-on-Trent|Suffolk|Sunderland|Surrey|Sutton|Swindon|Tameside|Telford and Wrekin|Thurrock|Torbay|Tower Hamlets|Trafford|Wakefield|Walsall|Waltham Forest|Wandsworth|Warrington|Warwickshire|West Berkshire|West Sussex|Westminster|Wigan|Wiltshire|Windsor and Maidenhead|Wirral|Wokingham|Wolverhampton|Worcestershire|York";\r
+aStates[238]="|Artigas|Canelones|Cerro Largo|Colonia|Durazno|Flores|Florida|Lavalleja|Maldonado|Montevideo|Paysandu|Rio Negro|Rivera|Rocha|Salto|San Jose|Soriano|Tacuarembo|Treinta y Tres";\r
+aStates[239]="|Alabama|Alaska|Arizona|Arkansas|California|Colorado|Connecticut|Delaware|District of Columbia|Florida|Georgia|Hawaii|Idaho|Illinois|Indiana|Iowa|Kansas|Kentucky|Louisiana|Maine|Maryland|Massachusetts|Michigan|Minnesota|Mississippi|Missouri|Montana|Nebraska|Nevada|New Hampshire|New Jersey|New Mexico|New York|North Carolina|North Dakota|Ohio|Oklahoma|Oregon|Pennsylvania|Rhode Island|South Carolina|South Dakota|Tennessee|Texas|Utah|Vermont|Virginia|Washington|West Virginia|Wisconsin|Wyoming";\r
+aStates[240]="|Andijon Wiloyati|Bukhoro Wiloyati|Farghona Wiloyati|Jizzakh Wiloyati|Khorazm Wiloyati (Urganch)|Namangan Wiloyati|Nawoiy Wiloyati|Qashqadaryo Wiloyati (Qarshi)|Qoraqalpoghiston (Nukus)|Samarqand Wiloyati|Sirdaryo Wiloyati (Guliston)|Surkhondaryo Wiloyati (Termiz)|Toshkent Shahri|Toshkent Wiloyati";\r
+aStates[241]="|Malampa|Penama|Sanma|Shefa|Tafea|Torba";\r
+aStates[242]="|Amazonas|Anzoategui|Apure|Aragua|Barinas|Bolivar|Carabobo|Cojedes|Delta Amacuro|Dependencias Federales|Distrito Federal|Falcon|Guarico|Lara|Merida|Miranda|Monagas|Nueva Esparta|Portuguesa|Sucre|Tachira|Trujillo|Vargas|Yaracuy|Zulia";\r
+aStates[243]="|An Giang|Ba Ria-Vung Tau|Bac Giang|Bac Kan|Bac Lieu|Bac Ninh|Ben Tre|Binh Dinh|Binh Duong|Binh Phuoc|Binh Thuan|Ca Mau|Can Tho|Cao Bang|Da Nang|Dac Lak|Dong Nai|Dong Thap|Gia Lai|Ha Giang|Ha Nam|Ha Noi|Ha Tay|Ha Tinh|Hai Duong|Hai Phong|Ho Chi Minh|Hoa Binh|Hung Yen|Khanh Hoa|Kien Giang|Kon Tum|Lai Chau|Lam Dong|Lang Son|Lao Cai|Long An|Nam Dinh|Nghe An|Ninh Binh|Ninh Thuan|Phu Tho|Phu Yen|Quang Binh|Quang Nam|Quang Ngai|Quang Ninh|Quang Tri|Soc Trang|Son La|Tay Ninh|Thai Binh|Thai Nguyen|Thanh Hoa|Thua Thien-Hue|Tien Giang|Tra Vinh|Tuyen Quang|Vinh Long|Vinh Phuc|Yen Bai";\r
+aStates[244]="|Saint Croix|Saint John|Saint Thomas";\r
+aStates[245]="|Blaenau Gwent|Bridgend|Caerphilly|Cardiff|Carmarthenshire|Ceredigion|Conwy|Denbighshire|Flintshire|Gwynedd|Isle of Anglesey|Merthyr Tydfil|Monmouthshire|Neath Port Talbot|Newport|Pembrokeshire|Powys|Rhondda Cynon Taff|Swansea|The Vale of Glamorgan|Torfaen|Wrexham";\r
+aStates[246]="|Alo|Sigave|Wallis";\r
+aStates[247]="|West Bank";\r
+aStates[248]="|Western Sahara";\r
+aStates[249]="|'Adan|'Ataq|Abyan|Al Bayda'|Al Hudaydah|Al Jawf|Al Mahrah|Al Mahwit|Dhamar|Hadhramawt|Hajjah|Ibb|Lahij|Ma'rib|Sa'dah|San'a'|Ta'izz";\r
+aStates[250]="|Kosovo|Montenegro|Serbia|Vojvodina";\r
+aStates[251]="|Central|Copperbelt|Eastern|Luapula|Lusaka|North-Western|Northern|Southern|Western";\r
+aStates[252]="|Bulawayo|Harare|ManicalandMashonaland Central|Mashonaland East|Mashonaland West|Masvingo|Matabeleland North|Matabeleland South|Midlands";\r
+\r
+/* \r
+ * gArCountryInfo\r
+ * (0) Country name\r
+ * (1) Name length\r
+ * (2) Number of states\r
+ * (3) Max state length\r
+ */\r
+gLngNumberCountries = sCountryString.split("|").length;\r
+//gArCountryInfo = new Array(gLngNumberCountries);\r
+gArCountryInfo=sCountryString.split("|");\r
+/* \r
+ * gArStateInfo[country][statenames][namelengths]\r
+ * (0) Country\r
+ * (1) States (Multi-sized Array)\r
+ *    (0) name\r
+ *    (1) nameLength\r
+ */\r
+gArStateInfo   = new Array(gLngNumberCountries);\r
+\r
+/* \r
+ * fInitgArStateInfo()\r
+ * purpose: build gArStateInfo array\r
+ * gArStateInfo[Country][States][1]\r
+ *   (0) State name\r
+ *   (1) State name length\r
+ * gArStateInfo[i] is an array of state names\r
+ * gArStateInfo[i][j]=state name, name length\r
+ */\r
+function fInitgArStateInfo() {\r
+ var i=0, j=0, sStateName="", iNumberOfStates=0;\r
+ var iMaxLength=0, iLength=0;\r
+ var oldNumber=0;\r
\r
+ for (i=0;i<gLngNumberCountries;i++) {\r
+  // i is selected country\r
+  iNumberOfStates=aStates[i].split("|").length+1;\r
+  gLngNumberStates=gLngNumberStates+iNumberOfStates;\r
+  gArStateInfo[i]=new Array(iNumberOfStates);\r
+  iMaxLength=0;\r
+  \r
+  // Add the additional information\r
+  for (j=0;j<iNumberOfStates;j++) {\r
+   if (iLength>iMaxLength) {\r
+    iMaxLength=iLength;\r
+    gArStateInfo[i][j][0]=sStateName;\r
+   }\r
+  }\r
+  gArCountryInfo[i][3]=parseInt(iMaxLength);\r
+ }\r
+ Update_Globals();\r
+ return;\r
+}\r
+\r
+/* \r
+ * Working on this one.\r
+ * Fills in region from the arrays\r
+ * \r
+ */\r
+function xFillState() {\r
+ var i=0;\r
\r
+ // reset region\r
+ document.form1.region.options.length=0;\r
\r
+ // get selected country\r
+ gLngSelectedCountry=document.form1.country_name.selectedIndex;\r
\r
+ // get number of states for selected country\r
+ gLngNumberStates=gArCountryInfo[[gLngSelectedCountry][2]];\r
\r
+ // update options in region\r
+ for (i=0;i<gLngNumberStates;i++) {\r
+  document.form1.region.options[i]=new\r
+    Option(gArStateInfo[[gLngSelectedCountry][i][0]]);\r
+ }\r
+ gLngSelectedState=\r
+  document.form1.region.options.selectedIndex;\r
\r
+ return;\r
+}\r
+\r
+/* \r
+ * FillStates() function works.\r
+ * Fills region from aStates\r
+ */\r
+function Fill_States(current) {\r
+       var i=0, iLen=0, iNumStates=0;\r
\r
+       // reset region\r
+       document.form1.region.options.length=0;\r
+       // get selected country\r
+       gLngSelectedCountry=document.form1.country_name.selectedIndex;\r
+       iNumStates = aStates[gLngSelectedCountry].split("|").length;\r
\r
+       // update the text boxes\r
+\r
+       // fill the state combobox with the list of states\r
+       for (i=0;i<iNumStates;i++) {\r
+               document.form1.region.options[i]=new \r
+                       Option(aStates[document.form1.country_name.selectedIndex].split("|")[i]);\r
+\r
+               sRegionName=document.form1.region.options[i];\r
+               if(sRegionName.text == current) {\r
+                       document.form1.region.selectedIndex = i;\r
+               }\r
+\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+/*\r
+ * FillCountry()\r
+ * gArCountryInfo matrix holds the following information:\r
+ * (0) Country name\r
+ * (1) Name length\r
+ * (2) Number of states\r
+ * (3) Max state length\r
+ */\r
+function Fill_Country(current) {\r
+       var i=0;\r
+       var sCountryName="";\r
\r
+       // reset country_name.options\r
+       document.form1.country_name.options.length=0;\r
+       // get number of countries from the string\r
\r
+       // ----------------------------------------------------\r
+       // gArCountryInfo = new Array(gLngNumberCountries, 4);\r
+       // ----------------------------------------------------\r
+       for (i=0;i<gLngNumberCountries;i++) {\r
+               gArCountryInfo[i]=new Array(4);\r
+       }\r
\r
+       for (i=0;i<gLngNumberCountries;i++) {\r
+               document.form1.country_name.options[i]=new Option(sCountryString.split("|")[i]);\r
+               sCountryName=document.form1.country_name.options[i];\r
+               if(sCountryName.text == current) {\r
+                       document.form1.country_name.selectedIndex = i;\r
+               }\r
+               gArCountryInfo[i]=\r
+                       [sCountryName, \r
+                               parseInt(sCountryName.length),\r
+                               aStates,\r
+                       0];\r
+       }\r
+\r
+       fInitgArStateInfo();\r
+\r
+       return;\r
+}\r
+\r
+function Update_Globals() {\r
+       gLngSelectedCountry=parseInt(document.form1.country_name.selectedIndex);\r
+       gLngSelectedState=parseInt(document.form1.region.selectedIndex);\r
+       return;\r
+}\r
+\r
+\r
+//-->\r
diff --git a/js/jquery.htmlstream.js b/js/jquery.htmlstream.js
new file mode 100644 (file)
index 0000000..c62c538
--- /dev/null
@@ -0,0 +1,157 @@
+/* jQuery ajax stream plugin
+* Version 0.1
+* Copyright (C) 2009 Chris Tarquini
+* Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License (http://creativecommons.org/licenses/by-sa/3.0/)
+* Permissions beyond the scope of this license may be available by contacting petros000[at]hotmail.com.
+*/
+
+(function($) {
+
+// Save the original AJAX function
+var ajax_old = $.ajax;
+var get_old = $.get;
+var post_old =  $.post;
+var active = true;
+// Add our settings
+$.ajaxSetup({stream: false,pollInterval: 500/*, onDataRecieved: function(){}*/ });
+$.enableAjaxStream = function(enable)
+{
+if(typeof enable == 'undefined') enable = !active;
+if(!enable)
+{
+$.ajax = ajax_old;
+$.get = get_old;
+$.post = post_old;
+active = false;
+}
+else
+{
+$.ajax = ajax_stream;
+$.get = ajax_get_stream;
+$.post = ajax_post_stream;
+active = true;
+}
+
+}
+var ajax_stream = $.ajax = function(options)
+{
+//copied from original ajax function
+        options  = jQuery.extend(true, options, jQuery.extend(true, {}, jQuery.ajaxSettings, options));
+if(options.stream)
+{
+var timer = 0;
+var offset = 0;
+var xmlhttp = null;
+var lastlen = 0;
+var done = false;
+var hook = function(xhr)
+{
+xmlhttp = xhr;
+checkagain();
+}
+var fix = function(){ check('stream'); };// fixes weird bug with random numbers as arg
+var checkagain = function(){if(!done) timer = setTimeout(fix,options.pollInterval);}
+var check = function(status)
+{
+if(typeof status == 'undefined') status = "stream";
+if(xmlhttp.status < 3) return; //only get the latest packet if data has been sent
+var text = xmlhttp.responseText;
+if(status == 'stream') //if we arent streaming then just flush the buffer
+{
+if(text.length <= lastlen) { checkagain(); return;}
+lastlength = text.length;
+if(offset == text.length) { checkagain(); return;}
+}
+var pkt = text.substr(offset);
+offset =  text.length;
+if($.isFunction(options.OnDataRecieved))
+{
+options.OnDataRecieved(pkt, status, xmlhttp.responseText, xmlhttp);
+}
+if(xmlhttp.status != 4)
+checkagain();
+}
+var complete = function(xhr,s)
+{
+clearTimeout(timer);//done..stop polling
+done = true;
+// send final call
+check(s);
+}
+// If the complete callback is set create a new callback that calls the users and outs
+if($.isFunction(options.success))
+{
+var oc = options.success;
+options.success = function(xhr,s){ complete(xhr,s); oc(xhr,s);};
+
+}
+else options.success = complete;
+// Set up our hook on the beforeSend
+if($.isFunction(options.beforeSend))
+{
+var obs = options.beforeSend;
+options.beforeSend = function(xhr){ obs(xhr); hook(xhr);};
+}
+else options.beforeSend = hook;
+
+}
+ajax_old(options);
+}
+
+var ajax_get_stream = $.get = function(url,data,callback,type,stream)
+{
+       if($.isFunction(data))
+       {
+               var orgcb = callback;
+               callback = data;
+               if($.isFunction(orgcb))
+               {
+                       stream = orgcb;
+               }
+               data = null;
+       }
+       if($.isFunction(type))
+       {
+               stream = type;
+               type = undefined;
+       }
+       var dostream = $.isFunction(stream);
+       return jQuery.ajax({
+                                       type: "GET",
+                                       url: url,
+                                       data: data,
+                                       success: callback,
+                                       dataType: type,
+                                       stream: dostream,
+                                       OnDataRecieved: stream
+                       });
+
+}
+
+var ajax_post_stream = $.post = function(url,data,callback,type,stream)
+{
+        if($.isFunction(data))
+        {
+                               var orgcb = callback;
+                callback = data;
+        }
+               if($.isFunction(type))
+               {
+                       stream = type;
+                       type = undefined;
+               }
+               var dostream = $.isFunction(stream);
+               return jQuery.ajax({
+                               type: "POST",
+                               url: url,
+                               data: data,
+                               success: callback,
+                               dataType: type,
+                               stream: dostream,
+                               OnDataRecieved: stream
+               });
+
+}
+
+})(jQuery);    
+       
diff --git a/js/jquery.js b/js/jquery.js
new file mode 100644 (file)
index 0000000..7c24308
--- /dev/null
@@ -0,0 +1,154 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/js/main.js b/js/main.js
new file mode 100644 (file)
index 0000000..430f216
--- /dev/null
@@ -0,0 +1,465 @@
+
+  function openClose(theID) {
+    if(document.getElementById(theID).style.display == "block") { 
+      document.getElementById(theID).style.display = "none" 
+    }
+    else { 
+      document.getElementById(theID).style.display = "block" 
+    } 
+  }
+
+  function openMenu(theID) {
+      document.getElementById(theID).style.display = "block" 
+  }
+
+  function closeMenu(theID) {
+      document.getElementById(theID).style.display = "none" 
+  }
+
+       
+       var src = null;
+       var prev = null;
+       var livetime = null;
+       var msie = false;
+       var stopped = false;
+       var timer = null;
+       var pr = 0;
+       var liking = 0;
+       var in_progress = false;
+       var langSelect = false;
+       var commentBusy = false;
+
+       $(function() {
+               $.ajaxSetup({cache: false});
+
+               msie = $.browser.msie ;
+               
+               /* setup tooltips */
+               $("a,.tt").each(function(){
+                       var e = $(this);
+                       var pos="bottom";
+                       if (e.hasClass("tttop")) pos="top";
+                       if (e.hasClass("ttbottom")) pos="bottom";
+                       if (e.hasClass("ttleft")) pos="left";
+                       if (e.hasClass("ttright")) pos="right";
+                       e.tipTip({defaultPosition: pos});
+               });
+               
+               
+               
+               /* setup onoff widgets */
+               $(".onoff input").each(function(){
+                       val = $(this).val();
+                       id = $(this).attr("id");
+                       $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
+                       
+               });
+               $(".onoff > a").click(function(event){
+                       event.preventDefault(); 
+                       var input = $(this).siblings("input");
+                       var val = 1-input.val();
+                       var id = input.attr("id");
+                       $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
+                       $("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
+                       input.val(val);
+                       //console.log(id);
+               });
+               
+               /* setup field_richtext */
+               setupFieldRichtext();
+
+               /* popup menus */
+               $('a[rel^=#]').click(function(e){
+                       menu = $( $(this).attr('rel') );
+                       e.preventDefault();
+                       e.stopPropagation();
+                       if (menu.attr('popup')=="false") return false;
+                       $(this).parent().toggleClass("selected");
+                       menu.toggle();
+                       return false;
+               });
+               
+               
+
+               /* notifications template */
+               var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
+               var notifications_empty = unescape($("#nav-notifications-menu").html());
+               
+               /* nav update event  */
+               $('nav').bind('nav-update', function(e,data){;
+                       var net = $(data).find('net').text();
+                       if(net == 0) { net = ''; $('#net-update').removeClass('show') } else { $('#net-update').addClass('show') }
+                       $('#net-update').html(net);
+
+                       var home = $(data).find('home').text();
+                       if(home == 0) { home = '';  $('#home-update').removeClass('show') } else { $('#home-update').addClass('show') }
+                       $('#home-update').html(home);
+
+                       var intro = $(data).find('intro').text();
+                       if(intro == 0) { intro = '';  $('#intro-update').removeClass('show') } else { $('#intro-update').addClass('show') }
+                       $('#intro-update').html(intro);
+
+                       var mail = $(data).find('mail').text();
+                       if(mail == 0) { mail = '';  $('#mail-update').removeClass('show') } else { $('#mail-update').addClass('show') }
+                       $('#mail-update').html(mail);
+
+
+
+                       var eNotif = $(data).find('notif')
+                       notif = eNotif.attr('count');
+                       if (notif>0){
+                               $("#nav-notifications-linkmenu").addClass("on");
+                               nnm = $("#nav-notifications-menu");
+                               nnm.html("");
+                               //nnm.attr('popup','true');
+                               eNotif.children("note").each(function(){
+                                       e = $(this);
+                                       text = e.text().format("<span class='contactname'>"+e.attr('name')+"</span>");
+                                       html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'));
+                                       nnm.append(html);
+                               });
+                       } else {
+                               $("#nav-notifications-linkmenu").removeClass("on");
+                               $("#nav-notifications-menu").html(notifications_empty);
+                       }
+                       if(notif == 0) { notif = ''; $('#notify-update').removeClass('show') } else { $('#notify-update').addClass('show') }
+                       $('#notify-update').html(notif);
+                       
+                       var eSysmsg = $(data).find('sysmsgs');
+                       eSysmsg.children("notice").each(function(){
+                               text = $(this).text();
+                               $.jGrowl(text, { sticky: true, theme: 'notice' });
+                       });
+                       eSysmsg.children("info").each(function(){
+                               text = $(this).text();
+                               $.jGrowl(text, { sticky: false, theme: 'info' });
+                       });
+                       
+               });
+               
+               
+               NavUpdate(); 
+               // Allow folks to stop the ajax page updates with the pause/break key
+               $(document).keypress(function(event) {
+                       if(event.keyCode == '19') {
+                               event.preventDefault();
+                               if(stopped == false) {
+                                       stopped = true;
+                                       $('#pause').html('<img src="images/pause.gif" alt="pause" style="border: 1px solid black;" />');
+                               }
+                               else {
+                                       stopped = false;
+                                       $('#pause').html('');
+                               }
+                       }
+                       else {
+                               // any key to resume
+                               if(stopped == true) {
+                                       stopped = false;
+                                       $('#pause').html('');
+                               }
+                       }
+
+               });                                     
+       });
+
+       function NavUpdate() {
+               if(! stopped) {
+                       $.get("ping",function(data) {
+                               $(data).find('result').each(function() {
+                                       // send nav-update event
+                                       $('nav').trigger('nav-update', this);
+                               });
+                       }) ;
+               }
+
+
+               if($('#live-network').length)   { src = 'network'; liveUpdate(); }
+               if($('#live-profile').length)   { src = 'profile'; liveUpdate(); }
+               if($('#live-community').length) { src = 'community'; liveUpdate(); }
+               if($('#live-notes').length)     { src = 'notes'; liveUpdate(); }
+               if($('#live-display').length) { 
+                       if(liking) {
+                               liking = 0;
+                               window.location.href=window.location.href 
+                       }
+               }
+               if($('#live-photos').length)  { 
+                       if(liking) {
+                               liking = 0;
+                               window.location.href=window.location.href 
+                       }
+               }
+
+               timer = setTimeout(NavUpdate,30000);
+       }
+
+       function liveUpdate() {
+               if((src == null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
+               if(($('.comment-edit-text-full').length) || (in_progress)) {
+                       livetime = setTimeout(liveUpdate, 10000);
+                       return;
+               }
+               prev = 'live-' + src;
+
+               in_progress = true;
+               var udargs = ((netargs.length) ? '/' + netargs : '');
+               var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&msie=' + ((msie) ? 1 : 0);
+
+               $.get(update_url,function(data) {
+                       in_progress = false;
+                       $('.ccollapse-wrapper',data).each(function() {
+                               var ident = $(this).attr('id');
+                               var is_hidden = $('#' + ident).is(':hidden');
+                               if($('#' + ident).length) {
+                                       $('#' + ident).replaceWith($(this));
+                                       if(is_hidden)
+                                               $('#' + ident).hide();
+                               }
+                       });
+                       $('.wall-item-outside-wrapper',data).each(function() {
+                               var ident = $(this).attr('id');
+                               if($('#' + ident).length == 0) {
+                                       $('img',this).each(function() {
+                                               $(this).attr('src',$(this).attr('dst'));
+                                       });
+                                       $('#' + prev).after($(this));
+                               }
+                               else { 
+
+                                       $('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago')); 
+                                       if($('#' + ident + ' ' + '.comment-edit-text-empty').length)
+                                               $('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
+                                       $('#' + ident + ' ' + '.wall-item-like').replaceWith($(this).find('.wall-item-like'));
+                                       $('#' + ident + ' ' + '.wall-item-dislike').replaceWith($(this).find('.wall-item-dislike'));
+                                       $('#' + ident + ' ' + '.my-comment-photo').each(function() {
+                                               $(this).attr('src',$(this).attr('dst'));
+                                       });
+                               }
+                               prev = ident; 
+                       });
+                       $('.like-rotator').hide();
+                       if(commentBusy) {
+                               commentBusy = false;
+                               $('body').css('cursor', 'auto');
+                       }
+               });
+       }
+
+       function imgbright(node) {
+               $(node).removeClass("drophide").addClass("drop");
+       }
+
+       function imgdull(node) {
+               $(node).removeClass("drop").addClass("drophide");
+       }
+
+       // Since our ajax calls are asynchronous, we will give a few 
+       // seconds for the first ajax call (setting like/dislike), then 
+       // run the updater to pick up any changes and display on the page.
+       // The updater will turn any rotators off when it's done. 
+       // This function will have returned long before any of these
+       // events have completed and therefore there won't be any
+       // visible feedback that anything changed without all this
+       // trickery. This still could cause confusion if the "like" ajax call
+       // is delayed and NavUpdate runs before it completes.
+
+       function dolike(ident,verb) {
+               $('#like-rotator-' + ident.toString()).show();
+               $.get('like/' + ident.toString() + '?verb=' + verb );
+               if(timer) clearTimeout(timer);
+               timer = setTimeout(NavUpdate,3000);
+               liking = 1;
+       }
+
+       function dostar(ident) {
+               ident = ident.toString();
+               $('#like-rotator-' + ident).show();
+               $.get('starred/' + ident, function(data) {
+                       if(data.match(/1/)) {
+                               $('#starred-' + ident).addClass('starred');
+                               $('#starred-' + ident).removeClass('unstarred');
+                               $('#star-' + ident).addClass('hidden');
+                               $('#unstar-' + ident).removeClass('hidden');
+                       }
+                       else {                  
+                               $('#starred-' + ident).addClass('unstarred');
+                               $('#starred-' + ident).removeClass('starred');
+                               $('#star-' + ident).removeClass('hidden');
+                               $('#unstar-' + ident).addClass('hidden');
+                       }
+                       $('#like-rotator-' + ident).hide();     
+               });
+       }
+
+       function getPosition(e) {
+               var cursor = {x:0, y:0};
+               if ( e.pageX || e.pageY  ) {
+                       cursor.x = e.pageX;
+                       cursor.y = e.pageY;
+               }
+               else {
+                       if( e.clientX || e.clientY ) {
+                               cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
+                               cursor.y = e.clientY + (document.documentElement.scrollTop  || document.body.scrollTop)  - document.documentElement.clientTop;
+                       }
+                       else {
+                               if( e.x || e.y ) {
+                                       cursor.x = e.x;
+                                       cursor.y = e.y;
+                               }
+                       }
+               }
+               return cursor;
+       }
+
+       var lockvisible = false;
+
+       function lockview(event,id) {
+               event = event || window.event;
+               cursor = getPosition(event);
+               if(lockvisible) {
+                       lockviewhide();
+               }
+               else {
+                       lockvisible = true;
+                       $.get('lockview/' + id, function(data) {
+                               $('#panel').html(data);
+                               $('#panel').css({ 'left': cursor.x + 5 , 'top': cursor.y + 5});
+                               $('#panel').show();
+                       });
+               }
+       }
+
+       function lockviewhide() {
+               lockvisible = false;
+               $('#panel').hide();
+       }
+
+       function post_comment(id) {
+               commentBusy = true;
+               $('body').css('cursor', 'wait');
+               $.post(  
+             "item",  
+             $("#comment-edit-form-" + id).serialize(),
+                       function(data) {
+                               if(data.success) {
+                                       $("#comment-edit-wrapper-" + id).hide();
+                                       $("#comment-edit-text-" + id).val('');
+                               var tarea = document.getElementById("comment-edit-text-" + id);
+                                       if(tarea)
+                                               commentClose(tarea,id);
+                                       if(timer) clearTimeout(timer);
+                                       timer = setTimeout(NavUpdate,10);
+                               }
+                               if(data.reload) {
+                                       window.location.href=data.reload;
+                               }
+                       },
+                       "json"  
+         );  
+         return false;  
+       }
+
+
+    function bin2hex(s){  
+        // Converts the binary representation of data to hex    
+        //   
+        // version: 812.316  
+        // discuss at: http://phpjs.org/functions/bin2hex  
+        // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)  
+        // +   bugfixed by: Onno Marsman  
+        // +   bugfixed by: Linuxworld  
+        // *     example 1: bin2hex('Kev');  
+        // *     returns 1: '4b6576'  
+        // *     example 2: bin2hex(String.fromCharCode(0x00));  
+        // *     returns 2: '00'  
+        var v,i, f = 0, a = [];  
+        s += '';  
+        f = s.length;  
+          
+        for (i = 0; i<f; i++) {  
+            a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");  
+        }  
+          
+        return a.join('');  
+    }  
+
+       function groupChangeMember(gid,cid) {
+               $('body .fakelink').css('cursor', 'wait');
+               $.get('group/' + gid + '/' + cid, function(data) {
+                               $('#group-update-wrapper').html(data);
+                               $('body .fakelink').css('cursor', 'auto');                              
+               });
+       }
+
+       function profChangeMember(gid,cid) {
+               $('body .fakelink').css('cursor', 'wait');
+               $.get('profperm/' + gid + '/' + cid, function(data) {
+                               $('#prof-update-wrapper').html(data);
+                               $('body .fakelink').css('cursor', 'auto');                              
+               });
+       }
+
+       function contactgroupChangeMember(gid,cid) {
+               $('body').css('cursor', 'wait');
+               $.get('contactgroup/' + gid + '/' + cid, function(data) {
+                               $('body').css('cursor', 'auto');
+               });
+       }
+
+
+function checkboxhighlight(box) {
+  if($(box).is(':checked')) {
+       $(box).addClass('checkeditem');
+  }
+  else {
+       $(box).removeClass('checkeditem');
+  }
+}
+
+function setupFieldRichtext(){
+       tinyMCE.init({
+               theme : "advanced",
+               mode : "specific_textareas",
+               editor_selector: "fieldRichtext",
+               plugins : "bbcode,paste",
+               theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
+               theme_advanced_buttons2 : "",
+               theme_advanced_buttons3 : "",
+               theme_advanced_toolbar_location : "top",
+               theme_advanced_toolbar_align : "center",
+               theme_advanced_blockformats : "blockquote,code",
+               paste_text_sticky : true,
+               entity_encoding : "raw",
+               add_unload_trigger : false,
+               remove_linebreaks : false,
+               force_p_newlines : false,
+               force_br_newlines : true,
+               forced_root_block : '',
+               convert_urls: false,
+               content_css: baseurl+"/view/custom_tinymce.css",
+               theme_advanced_path : false,
+       });
+}
+
+/** 
+ * sprintf in javascript 
+ *     "{0} and {1}".format('zero','uno'); 
+ **/
+String.prototype.format = function() {
+    var formatted = this;
+    for (var i = 0; i < arguments.length; i++) {
+        var regexp = new RegExp('\\{'+i+'\\}', 'gi');
+        formatted = formatted.replace(regexp, arguments[i]);
+    }
+    return formatted;
+};
+// Array Remove
+Array.prototype.remove = function(item) {
+  to=undefined; from=this.indexOf(item);
+  var rest = this.slice((to || from) + 1 || this.length);
+  this.length = from < 0 ? this.length + from : from;
+  return this.push.apply(this, rest);
+};
+
diff --git a/library/jgrowl/README b/library/jgrowl/README
new file mode 100644 (file)
index 0000000..3c94f75
--- /dev/null
@@ -0,0 +1,3 @@
+http://stanlemon.net/projects/jgrowl.html
+
+jGrowl is free and open source, it's distributed under the MIT and GPL licenses
diff --git a/library/jgrowl/jquery.jgrowl.css b/library/jgrowl/jquery.jgrowl.css
new file mode 100755 (executable)
index 0000000..b4deb97
--- /dev/null
@@ -0,0 +1,136 @@
+
+div.jGrowl {
+       z-index:                        9999;
+       color:                          #fff;
+       font-size:                      12px;
+}
+
+/** Special IE6 Style Positioning **/
+div.ie6 {
+       position:                       absolute;
+}
+
+div.ie6.top-right {
+       right:                          auto;
+       bottom:                         auto;
+       left:                           expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
+       top:                            expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
+}
+
+div.ie6.top-left {
+       left:                           expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
+       top:                            expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
+}
+
+div.ie6.bottom-right {
+       left:                           expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
+       top:                            expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
+}
+
+div.ie6.bottom-left {
+       left:                           expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
+       top:                            expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
+}
+
+div.ie6.center {
+       left:                           expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
+       top:                            expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
+       width:                          100%;
+}
+
+/** Normal Style Positions **/
+div.jGrowl {
+       position:                       absolute;
+}
+
+body > div.jGrowl {
+       position:                       fixed;
+}
+
+div.jGrowl.top-left {
+       left:                           0px;
+       top:                            0px;
+}
+
+div.jGrowl.top-right {
+       right:                          0px;
+       top:                            0px;
+}
+
+div.jGrowl.bottom-left {
+       left:                           0px;
+       bottom:                         0px;
+}
+
+div.jGrowl.bottom-right {
+       right:                          0px;
+       bottom:                         0px;
+}
+
+div.jGrowl.center {
+       top:                            0px;
+       width:                          50%;
+       left:                           25%;
+}
+
+/** Cross Browser Styling **/
+div.center div.jGrowl-notification, div.center div.jGrowl-closer {
+       margin-left:            auto;
+       margin-right:           auto;
+}
+
+div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer {
+       background-color:               #000;
+       opacity:                                .85;
+       -ms-filter:                     "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)"; 
+       filter:                                 progid:DXImageTransform.Microsoft.Alpha(Opacity=85); 
+       zoom:                                   1;
+       width:                                  235px;
+       padding:                                10px;
+       margin-top:                     5px;
+       margin-bottom:                  5px;
+       font-family:                    Tahoma, Arial, Helvetica, sans-serif;
+       font-size:                              1em;
+       text-align:                     left;
+       display:                                none;
+       -moz-border-radius:     5px;
+       -webkit-border-radius:  5px;
+}
+
+div.jGrowl div.jGrowl-notification {
+       min-height:                     40px;
+}
+
+div.jGrowl div.jGrowl-notification,
+div.jGrowl div.jGrowl-closer {
+       margin:                                 10px;
+}
+
+div.jGrowl div.jGrowl-notification div.jGrowl-header {
+       font-weight:                    bold;
+       font-size:                              .85em;
+}
+
+div.jGrowl div.jGrowl-notification div.jGrowl-close {
+       z-index:                                99;
+       float:                                  right;
+       font-weight:                    bold;
+       font-size:                              1em;
+       cursor:                                 pointer;
+}
+
+div.jGrowl div.jGrowl-closer {
+       padding-top:                    4px;
+       padding-bottom:                 4px;
+       cursor:                                 pointer;
+       font-size:                              .9em;
+       font-weight:                    bold;
+       text-align:                     center;
+}
+
+/** Hide jGrowl when printing **/
+@media print {
+       div.jGrowl {
+               display:                        none;
+       }
+}
diff --git a/library/jgrowl/jquery.jgrowl_minimized.js b/library/jgrowl/jquery.jgrowl_minimized.js
new file mode 100644 (file)
index 0000000..7828980
--- /dev/null
@@ -0,0 +1,11 @@
+(function($){$.jGrowl=function(m,o){if($('#jGrowl').size()==0)
+$('<div id="jGrowl"></div>').addClass((o&&o.position)?o.position:$.jGrowl.defaults.position).appendTo('body');$('#jGrowl').jGrowl(m,o);};$.fn.jGrowl=function(m,o){if($.isFunction(this.each)){var args=arguments;return this.each(function(){var self=this;if($(this).data('jGrowl.instance')==undefined){$(this).data('jGrowl.instance',$.extend(new $.fn.jGrowl(),{notifications:[],element:null,interval:null}));$(this).data('jGrowl.instance').startup(this);}
+if($.isFunction($(this).data('jGrowl.instance')[m])){$(this).data('jGrowl.instance')[m].apply($(this).data('jGrowl.instance'),$.makeArray(args).slice(1));}else{$(this).data('jGrowl.instance').create(m,o);}});};};$.extend($.fn.jGrowl.prototype,{defaults:{pool:0,header:'',group:'',sticky:false,position:'top-right',glue:'after',theme:'default',themeState:'highlight',corners:'10px',check:250,life:3000,closeDuration:'normal',openDuration:'normal',easing:'swing',closer:true,closeTemplate:'&times;',closerTemplate:'<div>[ close all ]</div>',log:function(e,m,o){},beforeOpen:function(e,m,o){},afterOpen:function(e,m,o){},open:function(e,m,o){},beforeClose:function(e,m,o){},close:function(e,m,o){},animateOpen:{opacity:'show'},animateClose:{opacity:'hide'}},notifications:[],element:null,interval:null,create:function(message,o){var o=$.extend({},this.defaults,o);if(typeof o.speed!=='undefined'){o.openDuration=o.speed;o.closeDuration=o.speed;}
+this.notifications.push({message:message,options:o});o.log.apply(this.element,[this.element,message,o]);},render:function(notification){var self=this;var message=notification.message;var o=notification.options;var notification=$('<div class="jGrowl-notification '+o.themeState+' ui-corner-all'+
+((o.group!=undefined&&o.group!='')?' '+o.group:'')+'">'+'<div class="jGrowl-close">'+o.closeTemplate+'</div>'+'<div class="jGrowl-header">'+o.header+'</div>'+'<div class="jGrowl-message">'+message+'</div></div>').data("jGrowl",o).addClass(o.theme).children('div.jGrowl-close').bind("click.jGrowl",function(){$(this).parent().trigger('jGrowl.close');}).parent();$(notification).bind("mouseover.jGrowl",function(){$('div.jGrowl-notification',self.element).data("jGrowl.pause",true);}).bind("mouseout.jGrowl",function(){$('div.jGrowl-notification',self.element).data("jGrowl.pause",false);}).bind('jGrowl.beforeOpen',function(){if(o.beforeOpen.apply(notification,[notification,message,o,self.element])!=false){$(this).trigger('jGrowl.open');}}).bind('jGrowl.open',function(){if(o.open.apply(notification,[notification,message,o,self.element])!=false){if(o.glue=='after'){$('div.jGrowl-notification:last',self.element).after(notification);}else{$('div.jGrowl-notification:first',self.element).before(notification);}
+$(this).animate(o.animateOpen,o.openDuration,o.easing,function(){if($.browser.msie&&(parseInt($(this).css('opacity'),10)===1||parseInt($(this).css('opacity'),10)===0))
+this.style.removeAttribute('filter');if($(this).data("jGrowl")!=null)
+$(this).data("jGrowl").created=new Date();$(this).trigger('jGrowl.afterOpen');});}}).bind('jGrowl.afterOpen',function(){o.afterOpen.apply(notification,[notification,message,o,self.element]);}).bind('jGrowl.beforeClose',function(){if(o.beforeClose.apply(notification,[notification,message,o,self.element])!=false)
+$(this).trigger('jGrowl.close');}).bind('jGrowl.close',function(){$(this).data('jGrowl.pause',true);$(this).animate(o.animateClose,o.closeDuration,o.easing,function(){if($.isFunction(o.close)){if(o.close.apply(notification,[notification,message,o,self.element])!==false)
+$(this).remove();}else{$(this).remove();}});}).trigger('jGrowl.beforeOpen');if(o.corners!=''&&$.fn.corner!=undefined)$(notification).corner(o.corners);if($('div.jGrowl-notification:parent',self.element).size()>1&&$('div.jGrowl-closer',self.element).size()==0&&this.defaults.closer!=false){$(this.defaults.closerTemplate).addClass('jGrowl-closer ui-state-highlight ui-corner-all').addClass(this.defaults.theme).appendTo(self.element).animate(this.defaults.animateOpen,this.defaults.speed,this.defaults.easing).bind("click.jGrowl",function(){$(this).siblings().trigger("jGrowl.beforeClose");if($.isFunction(self.defaults.closer)){self.defaults.closer.apply($(this).parent()[0],[$(this).parent()[0]]);}});};},update:function(){$(this.element).find('div.jGrowl-notification:parent').each(function(){if($(this).data("jGrowl")!=undefined&&$(this).data("jGrowl").created!=undefined&&($(this).data("jGrowl").created.getTime()+parseInt($(this).data("jGrowl").life))<(new Date()).getTime()&&$(this).data("jGrowl").sticky!=true&&($(this).data("jGrowl.pause")==undefined||$(this).data("jGrowl.pause")!=true)){$(this).trigger('jGrowl.beforeClose');}});if(this.notifications.length>0&&(this.defaults.pool==0||$(this.element).find('div.jGrowl-notification:parent').size()<this.defaults.pool))
+this.render(this.notifications.shift());if($(this.element).find('div.jGrowl-notification:parent').size()<2){$(this.element).find('div.jGrowl-closer').animate(this.defaults.animateClose,this.defaults.speed,this.defaults.easing,function(){$(this).remove();});}},startup:function(e){this.element=$(e).addClass('jGrowl').append('<div class="jGrowl-notification"></div>');this.interval=setInterval(function(){$(e).data('jGrowl.instance').update();},parseInt(this.defaults.check));if($.browser.msie&&parseInt($.browser.version)<7&&!window["XMLHttpRequest"]){$(this.element).addClass('ie6');}},shutdown:function(){$(this.element).removeClass('jGrowl').find('div.jGrowl-notification').remove();clearInterval(this.interval);},close:function(){$(this.element).find('div.jGrowl-notification').each(function(){$(this).trigger('jGrowl.beforeClose');});}});$.jGrowl.defaults=$.fn.jGrowl.prototype.defaults;})(jQuery);
\ No newline at end of file
index d51dceecaf0ac796b4b1cceb472576a85d93aefd..343153186af563e76dfd60726b986ac349b57f7e 100644 (file)
@@ -1528,7 +1528,7 @@ class Markdown_Parser {
                                |
                                        <\?.*?\?> | <%.*?%>             # processing instruction
                                |
-                                       <[/!$]?[-a-zA-Z0-9:]+   # regular tags
+                                       <[/!$]?[-a-zA-Z0-9:_]+  # regular tags
                                        (?>
                                                \s
                                                (?>[^"\'>]+|"[^"]*"|\'[^\']*\')*
diff --git a/library/stanlemon-jgrowl-tip.tar.gz b/library/stanlemon-jgrowl-tip.tar.gz
new file mode 100644 (file)
index 0000000..07a5fb0
Binary files /dev/null and b/library/stanlemon-jgrowl-tip.tar.gz differ
index db676cd908d75c25e0de3d9662d7b80f2db388d3..789e75c399a5b921cd3ee94d1c25ea221552ff2f 100644 (file)
@@ -70,6 +70,7 @@
 
 \r
                        // example: <strong> to [b]\r
+                       rep(/<a class=\"bookmark\" href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[bookmark=$1]$2[/bookmark]");\r
                        rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");\r
                        rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");\r
                        rep(/<span style=\"color:(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");\r
                        rep(/\[\/i\]/gi,"</em>");\r
                        rep(/\[u\]/gi,"<u>");\r
                        rep(/\[\/u\]/gi,"</u>");\r
+                       rep(/\[bookmark=([^\]]+)\](.*?)\[\/bookmark\]/gi,"<a class=\"bookmark\" href=\"$1\">$2</a>");\r
                        rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");\r
                        rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");\r
                        rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,"<img width=\"$1\" height=\"$2\" src=\"$3\" />");\r
diff --git a/library/tiptip/README b/library/tiptip/README
new file mode 100644 (file)
index 0000000..a83cfba
--- /dev/null
@@ -0,0 +1,30 @@
+http://code.drewwilson.com/entry/tiptip-jquery-plugin
+
+License
+This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses.
+
+
+ChangeLog
+Version 1.3 (Mar. 23, 2010)
+
+    Added defaultPoistion option that enables you to set the default orientation TipTip should show up as.
+    Added attribute option that enables you to set the HTML attribute that TipTip should pull it's content from.
+    Added content option. This will be used as the content for the TipTip and will overwrite any content pulled form any HTML attribute.
+    Added activation option enables you to specify the jQuery method TipTip is activated with: hover, focus or click. Now you can use TipTip on forms and for validation!
+    Added keepAlive option that when set to true the TipTip will only fadeout when you hover over the actual TipTip and then hover off of it. Allowing for hyperlinks inside your TipTip content to be accessible.
+
+Version 1.2 (Jan. 13, 2010)
+
+    Added HTML support with Tip Tip. You can now add HTML into the Title attribute (though this is not recommended if you want strictly valid code).
+    Tightened up spacing margins in JS.
+    Updated margins in CSS file.
+
+Version 1.1 (Jan. 03, 2010)
+
+    Swapped dynamically added orientation CSS class names ('_left' & '_right') to make better sense.
+    Added in some tighter spacing for the tooltip in JS.
+
+Version 1.0 (Jan. 02, 2010)
+
+    Initial release.
diff --git a/library/tiptip/jquery.tipTip.minified.js b/library/tiptip/jquery.tipTip.minified.js
new file mode 100644 (file)
index 0000000..cdf3a89
--- /dev/null
@@ -0,0 +1,21 @@
+ /*
+ * TipTip
+ * Copyright 2010 Drew Wilson
+ * www.drewwilson.com
+ * code.drewwilson.com/entry/tiptip-jquery-plugin
+ *
+ * Version 1.3   -   Updated: Mar. 23, 2010
+ *
+ * This Plug-In will create a custom tooltip to replace the default
+ * browser tooltip. It is extremely lightweight and very smart in
+ * that it detects the edges of the browser window and will make sure
+ * the tooltip stays within the current window size. As a result the
+ * tooltip will adjust itself to be displayed above, below, to the left 
+ * or to the right depending on what is necessary to stay within the
+ * browser window. It is completely customizable as well via CSS.
+ *
+ * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ */
+(function($){$.fn.tipTip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var opts=$.extend(defaults,options);if($("#tiptip_holder").length<=0){var tiptip_holder=$('<div id="tiptip_holder" style="max-width:'+opts.maxWidth+';"></div>');var tiptip_content=$('<div id="tiptip_content"></div>');var tiptip_arrow=$('<div id="tiptip_arrow"></div>');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')))}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow")}return this.each(function(){var org_elem=$(this);if(opts.content){var org_title=opts.content}else{var org_title=org_elem.attr(opts.attribute)}if(org_title!=""){if(!opts.content){org_elem.removeAttr(opts.attribute)}var timeout=false;if(opts.activation=="hover"){org_elem.hover(function(){active_tiptip()},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}else if(opts.activation=="focus"){org_elem.focus(function(){active_tiptip()}).blur(function(){deactive_tiptip()})}else if(opts.activation=="click"){org_elem.click(function(){active_tiptip();return false}).hover(function(){},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}function active_tiptip(){opts.enter.call(this);tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css("margin","0");tiptip_arrow.removeAttr("style");var top=parseInt(org_elem.offset()['top']);var left=parseInt(org_elem.offset()['left']);var org_width=parseInt(org_elem.outerWidth());var org_height=parseInt(org_elem.outerHeight());var tip_w=tiptip_holder.outerWidth();var tip_h=tiptip_holder.outerHeight();var w_compare=Math.round((org_width-tip_w)/2);var h_compare=Math.round((org_height-tip_h)/2);var marg_left=Math.round(left+w_compare);var marg_top=Math.round(top+org_height+opts.edgeOffset);var t_class="";var arrow_top="";var arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom"}else if(opts.defaultPosition=="top"){t_class="_top"}else if(opts.defaultPosition=="left"){t_class="_left"}else if(opts.defaultPosition=="right"){t_class="_right"}var right_compare=(w_compare+left)<parseInt($(window).scrollLeft());var left_compare=(tip_w+left)>parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare)}else if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare)}var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop());var bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top"}else{t_class=t_class+"_top"}arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset))}else if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom"}else{t_class=t_class+"_bottom"}arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset)}if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5}else if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5}if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5}tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).attr("class","tip"+t_class);if(timeout){clearTimeout(timeout)}timeout=setTimeout(function(){tiptip_holder.stop(true,true).fadeIn(opts.fadeIn)},opts.delay)}function deactive_tiptip(){opts.exit.call(this);if(timeout){clearTimeout(timeout)}tiptip_holder.fadeOut(opts.fadeOut)}}})}})(jQuery);
\ No newline at end of file
diff --git a/library/tiptip/tipTip.css b/library/tiptip/tipTip.css
new file mode 100644 (file)
index 0000000..4fb95d3
--- /dev/null
@@ -0,0 +1,113 @@
+/* TipTip CSS - Version 1.2 */
+
+#tiptip_holder {
+       display: none;
+       position: absolute;
+       top: 0;
+       left: 0;
+       z-index: 99999;
+}
+
+#tiptip_holder.tip_top {
+       padding-bottom: 5px;
+}
+
+#tiptip_holder.tip_bottom {
+       padding-top: 5px;
+}
+
+#tiptip_holder.tip_right {
+       padding-left: 5px;
+}
+
+#tiptip_holder.tip_left {
+       padding-right: 5px;
+}
+
+#tiptip_content {
+       font-size: 11px;
+       color: #fff;
+       text-shadow: 0 0 2px #000;
+       padding: 4px 8px;
+       border: 1px solid rgba(255,255,255,0.25);
+       background-color: rgb(25,25,25);
+       background-color: rgba(25,25,25,0.92);
+       background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000));
+       border-radius: 3px;
+       -webkit-border-radius: 3px;
+       -moz-border-radius: 3px;
+       box-shadow: 0 0 3px #555;
+       -webkit-box-shadow: 0 0 3px #555;
+       -moz-box-shadow: 0 0 3px #555;
+}
+
+#tiptip_arrow, #tiptip_arrow_inner {
+       position: absolute;
+       border-color: transparent;
+       border-style: solid;
+       border-width: 6px;
+       height: 0;
+       width: 0;
+}
+
+#tiptip_holder.tip_top #tiptip_arrow {
+       border-top-color: #fff;
+       border-top-color: rgba(255,255,255,0.35);
+}
+
+#tiptip_holder.tip_bottom #tiptip_arrow {
+       border-bottom-color: #fff;
+       border-bottom-color: rgba(255,255,255,0.35);
+}
+
+#tiptip_holder.tip_right #tiptip_arrow {
+       border-right-color: #fff;
+       border-right-color: rgba(255,255,255,0.35);
+}
+
+#tiptip_holder.tip_left #tiptip_arrow {
+       border-left-color: #fff;
+       border-left-color: rgba(255,255,255,0.35);
+}
+
+#tiptip_holder.tip_top #tiptip_arrow_inner {
+       margin-top: -7px;
+       margin-left: -6px;
+       border-top-color: rgb(25,25,25);
+       border-top-color: rgba(25,25,25,0.92);
+}
+
+#tiptip_holder.tip_bottom #tiptip_arrow_inner {
+       margin-top: -5px;
+       margin-left: -6px;
+       border-bottom-color: rgb(25,25,25);
+       border-bottom-color: rgba(25,25,25,0.92);
+}
+
+#tiptip_holder.tip_right #tiptip_arrow_inner {
+       margin-top: -6px;
+       margin-left: -5px;
+       border-right-color: rgb(25,25,25);
+       border-right-color: rgba(25,25,25,0.92);
+}
+
+#tiptip_holder.tip_left #tiptip_arrow_inner {
+       margin-top: -6px;
+       margin-left: -7px;
+       border-left-color: rgb(25,25,25);
+       border-left-color: rgba(25,25,25,0.92);
+}
+
+/* Webkit Hacks  */
+@media screen and (-webkit-min-device-pixel-ratio:0) { 
+       #tiptip_content {
+               padding: 4px 8px 5px 8px;
+               background-color: rgba(45,45,45,0.88);
+       }
+       #tiptip_holder.tip_bottom #tiptip_arrow_inner { 
+               border-bottom-color: rgba(45,45,45,0.88);
+       }
+       #tiptip_holder.tip_top #tiptip_arrow_inner { 
+               border-top-color: rgba(20,20,20,0.92);
+       }
+}
\ No newline at end of file
index cb5959a95b4b6393158097ef263b9d264ca8ee42..f2d2456a64586a0d23e9032937758cf1ab2377e1 100644 (file)
@@ -53,12 +53,13 @@ function acl_init(&$a){
                        "photo" => "images/default-group-mm.png",
                        "name"  => $g['name'],
                        "id"    => intval($g['id']),
-                       "uids"  => array_map("intval", explode(",",$g['uids']))
+                       "uids"  => array_map("intval", explode(",",$g['uids'])),
+                       "link"  => ''
                );
        }
        
        
-       $r = q("SELECT `id`, `name`, `micro`, `network` FROM `contact` 
+       $r = q("SELECT `id`, `name`, `micro`, `network`, `url` FROM `contact` 
                WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `notify` != ''
                $sql_extra
                ORDER BY `name` ASC ",
@@ -70,7 +71,8 @@ function acl_init(&$a){
                        "photo" => $g['micro'],
                        "name"  => $g['name'],
                        "id"    => intval($g['id']),
-                       "network" => $g['network']
+                       "network" => $g['network'],
+                       "link" => $g['url'],
                );
        }
                
index 7799e64ab1a9fb1e468287a16835f5fe6be9a326..ebef1ccb9378b784d86107789fc33f4ca218cfc6 100644 (file)
@@ -177,6 +177,8 @@ function admin_page_site_post(&$a){
        
        
        $register_policy        =       ((x($_POST,'register_policy'))  ? intval(trim($_POST['register_policy']))       :  0);
+       $abandon_days       =   ((x($_POST,'abandon_days'))         ? intval(trim($_POST['abandon_days']))          :  0);
+
        $register_text          =       ((x($_POST,'register_text'))    ? notags(trim($_POST['register_text']))         : '');  
        
        $allowed_sites          =       ((x($_POST,'allowed_sites'))    ? notags(trim($_POST['allowed_sites']))         : '');
@@ -215,6 +217,7 @@ function admin_page_site_post(&$a){
        set_config('system','maximagesize', $maximagesize);
        
        set_config('config','register_policy', $register_policy);
+       set_config('system','account_abandon_days', $abandon_days);
        set_config('config','register_text', $register_text);
        set_config('system','allowed_sites', $allowed_sites);
        set_config('system','allowed_email', $allowed_email);
@@ -314,6 +317,7 @@ function admin_page_site(&$a) {
 
                '$register_policy'      => array('register_policy', t("Register policy"), $a->config['register_policy'], "", $register_choices),
                '$register_text'        => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES), "Will be displayed prominently on the registration page."),
+               '$abandon_days'     => array('abandon_days', t('Accounts abandoned after x days'), get_config('system','account_abandon_days'), t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')),
                '$allowed_sites'        => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), "Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"),
                '$allowed_email'        => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), "Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"),
                '$block_public'         => array('block_public', t("Block public"), get_config('system','block_public'), "Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."),
@@ -344,7 +348,7 @@ function admin_page_site(&$a) {
  * Users admin page
  */
 function admin_page_users_post(&$a){
-       $pending = ( x(£_POST, 'pending') ? $_POST['pending'] : Array() );
+       $pending = ( x($_POST, 'pending') ? $_POST['pending'] : Array() );
        $users = ( x($_POST, 'user') ? $_POST['user'] : Array() );
        
        if (x($_POST,'page_users_block')){
@@ -540,7 +544,7 @@ function admin_page_plugins(&$a){
                } 
                
                $admin_form="";
-               if (in_array($plugin, $a->plugins_admin)){
+               if (is_array($a->plugins_admin) && in_array($plugin, $a->plugins_admin)){
                        @require_once("addon/$plugin/$plugin.php");
                        $func = $plugin.'_plugin_admin';
                        $func($a, $admin_form);
@@ -632,7 +636,7 @@ function admin_page_logs(&$a){
 
        $f = get_config('system','logfile');
        $size = filesize($f);
-       if($size > 5000000)
+       if($size > 5000000 || $size < 0)
                $size = 5000000;
 
        $data = '';
index 7a0a3f59ea1d62636a28bd7eb0bc90ac855c700c..8049b45fb3e846162b8a06ab41bfa2763b61b84a 100644 (file)
@@ -1,15 +1,18 @@
 <?php
 
-
 function apps_content(&$a) {
+       $title = t('Applications');
 
-       $o .= '<h3>' . t('Applications') . '</h3>';
-
-       if($a->apps)
-               $o .= $a->apps;
-       else
+       if(count($a->apps)==0)
                notice( t('No installed applications.') . EOL);
 
-       return $o;
 
-}
\ No newline at end of file
+       $tpl = get_markup_template("apps.tpl");
+       return replace_macros($tpl, array(
+               '$title' => $title,
+               '$apps' => $a->apps,
+       ));
+
+       
+
+}
index cf43598b518bdf5a5cd5a64cc7ed878c1b36794b..cb255029f0d47e84d64ae9e825c731cdf1982362 100644 (file)
@@ -25,7 +25,7 @@ function community_content(&$a, $update = 0) {
 
        $o .= '<h3>' . t('Community') . '</h3>';
        if(! $update) {
-               $o .= '<script> $(document).ready(function() { $(\'#nav-community-link\').addClass(\'nav-selected\'); });</script>';
+               nav_set_selected('community');
                $o .= '<div id="live-community"></div>' . "\r\n";
                $o .= "<script> var profile_uid = -1; var netargs = '/?f='; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
        }
index 4d9385026cdf6622b92d90fa8c7fa377f3af3dd2..ea429d39fe15384b90f445f129bd84ba35393b0e 100644 (file)
@@ -23,8 +23,6 @@ function contacts_init(&$a) {
                $a->page['aside'] = '';
        $a->page['aside'] .= group_side('contacts','group',false,0,$contact_id);
 
-       $inv = '<div class="side-link" id="side-invite-link" ><a href="invite" >' . t("Invite Friends") . '</a></div>';
-
        if(get_config('system','invitation_only')) {
                $x = get_pconfig(local_user(),'system','invites_remaining');
                if($x || is_site_admin()) {
@@ -33,21 +31,26 @@ function contacts_init(&$a) {
                        . '</div>' . $inv;
                }
        }
-       elseif($a->config['register_policy'] != REGISTER_CLOSED)
-               $a->page['aside'] .= $inv;
-
-
-       $a->page['aside'] .= '<div class="side-link" id="side-match-link"><a href="match" >' 
-               . t('Find People With Shared Interests') . '</a></div>';
 
        $tpl = get_markup_template('follow.tpl');
+       
+       $findSimilarLink = '<div class="side-link" id="side-match-link"><a href="match" >' 
+               . t('Similar Interests') . '</a></div>';
+       
+       $inv = '';
+       if($a->config['register_policy'] != REGISTER_CLOSED) {
+               $inv = '<div class="side-link" id="side-invite-link" ><a href="invite" >' . t("Invite Friends") . '</a></div>';
+       }
+               
        $a->page['aside'] .= replace_macros($tpl,array(
                '$label' => t('Connect/Follow'),
                '$hint' => t('Example: bob@example.com, http://example.com/barbara'),
-               '$follow' => t('Follow')
+               '$follow' => t('Follow'),
+               '$findSimilar' => $findSimilarLink,
+               '$inviteFriends' => $inv
        ));
 
-
+       
 
 }
 
@@ -87,25 +90,15 @@ function contacts_post(&$a) {
 
 
        $priority = intval($_POST['poll']);
-       if($priority == (-1))
-               
        if($priority > 5 || $priority < 0)
                $priority = 0;
 
-       $rating = intval($_POST['reputation']);
-       if($rating > 5 || $rating < 0)
-               $rating = 0;
-
-       $reason = notags(trim($_POST['reason']));
-
        $info = escape_tags(trim($_POST['info']));
 
-       $r = q("UPDATE `contact` SET `profile-id` = %d, `priority` = %d , `rating` = %d, `reason` = '%s', `info` = '%s'
+       $r = q("UPDATE `contact` SET `profile-id` = %d, `priority` = %d , `info` = '%s'
                WHERE `id` = %d AND `uid` = %d LIMIT 1",
                intval($profile_id),
                intval($priority),
-               intval($rating),
-               dbesc($reason),
                dbesc($info),
                intval($contact_id),
                intval(local_user())
@@ -124,7 +117,7 @@ function contacts_content(&$a) {
 
        $sort_type = 0;
        $o = '';
-       $o .= '<script> $(document).ready(function() { $(\'#nav-contacts-link\').addClass(\'nav-selected\'); });</script>';
+       nav_set_selected('contacts');
 
        $_SESSION['return_url'] = $a->get_baseurl() . '/' . $a->cmd;
 
@@ -277,8 +270,6 @@ function contacts_content(&$a) {
                        $sparkle = '';
                }
 
-               $grps = '';
-
                $insecure = '<div id="profile-edit-insecure"><p><img src="images/unlock_icon.gif" alt="' . t('Privacy Unavailable') . '" />&nbsp;'
                        . t('Private communications are not available for this contact.') . '</p></div>';
 
@@ -292,6 +283,9 @@ function contacts_content(&$a) {
                $lblsuggest = (($r[0]['network'] === NETWORK_DFRN) 
                        ? '<div id="contact-suggest-wrapper"><a href="fsuggest/' . $r[0]['id'] . '" id="contact-suggest">' . t('Suggest friends') . '</a></div>' : '');
 
+               $poll_enabled = (($r[0]['network'] !== NETWORK_DIASPORA) ? true : false);
+
+               $nettype = '<div id="contact-edit-nettype">' . sprintf( t('Network type: %s'),network_to_name($r[0]['network'])) . '</div>';
 
                $o .= replace_macros($tpl,array(
                        '$header' => t('Contact Editor'),
@@ -310,9 +304,10 @@ function contacts_content(&$a) {
                        '$lblcrepair' => t("Repair contact URL settings \x28WARNING: Advanced\x29"),
                        '$lblrecent' => t('View conversations'),
                        '$lblsuggest' => $lblsuggest,
-                       '$grps' => $grps,
                        '$delete' => t('Delete contact'),
-                       '$poll_interval' => contact_poll_interval($r[0]['priority']),
+                       '$nettype' => $nettype,
+                       '$poll_interval' => contact_poll_interval($r[0]['priority'],(! $poll_enabled)),
+                       '$poll_enabled' => $poll_enabled,
                        '$lastupdtext' => t('Last updated: '),
                        '$updpub' => t('Update public posts: '),
                        '$last_update' => $last_update,
@@ -325,9 +320,6 @@ function contacts_content(&$a) {
                        '$info' => $r[0]['info'],
                        '$blocked' => (($r[0]['blocked']) ? '<div id="block-message">' . t('Currently blocked') . '</div>' : ''),
                        '$ignored' => (($r[0]['readonly']) ? '<div id="ignore-message">' . t('Currently ignored') . '</div>' : ''),
-                       '$rating' => contact_reputation($r[0]['rating']),
-                       '$reason' => $r[0]['reason'],
-                       '$groups' => '', // group_selector(),
                        '$photo' => $r[0]['photo'],
                        '$name' => $r[0]['name'],
                        '$dir_icon' => $dir_icon,
@@ -422,11 +414,12 @@ function contacts_content(&$a) {
                        $o .= replace_macros($tpl, array(
                                '$img_hover' => sprintf( t('Visit %s\'s profile [%s]'),$rr['name'],$rr['url']),
                                '$edit_hover' => t('Edit contact'),
+                               '$contact_photo_menu' => contact_photo_menu($rr),
                                '$id' => $rr['id'],
                                '$alt_text' => $alt_text,
                                '$dir_icon' => $dir_icon,
                                '$thumb' => $rr['thumb'], 
-                               '$name' => substr($rr['name'],0,20),
+                               '$name' => $rr['name'],
                                '$username' => $rr['name'],
                                '$sparkle' => $sparkle,
                                '$url' => $url
index 4babd6bf7b955bee1b1f43e2590b60470030f0c9..afa45e881cf2d017aa10592c1527682ff0a199df 100644 (file)
@@ -18,15 +18,16 @@ function crepair_post(&$a) {
 
        $contact = $r[0];
 
-       $nick    = ((x($_POST,'nick')) ? $_POST['nick'] : null);
-       $url     = ((x($_POST,'url')) ? $_POST['url'] : null);
-       $request = ((x($_POST,'request')) ? $_POST['request'] : null);
-       $confirm = ((x($_POST,'confirm')) ? $_POST['confirm'] : null);
-       $notify  = ((x($_POST,'notify')) ? $_POST['notify'] : null);
-       $poll    = ((x($_POST,'poll')) ? $_POST['poll'] : null);
+       $nick    = ((x($_POST,'nick')) ? $_POST['nick'] : '');
+       $url     = ((x($_POST,'url')) ? $_POST['url'] : '');
+       $request = ((x($_POST,'request')) ? $_POST['request'] : '');
+       $confirm = ((x($_POST,'confirm')) ? $_POST['confirm'] : '');
+       $notify  = ((x($_POST,'notify')) ? $_POST['notify'] : '');
+       $poll    = ((x($_POST,'poll')) ? $_POST['poll'] : '');
+       $attag   = ((x($_POST,'attag')) ? $_POST['attag'] : '');
 
 
-       $r = q("UPDATE `contact` SET `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s'
+       $r = q("UPDATE `contact` SET `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' 
                WHERE `id` = %d AND `uid` = %d LIMIT 1",
                dbesc($nick),
                dbesc($url),
@@ -34,6 +35,7 @@ function crepair_post(&$a) {
                dbesc($confirm),
                dbesc($notify),
                dbesc($poll),
+               dbesc($attag),
                intval($contact['id']),
                local_user()
        );
@@ -84,6 +86,7 @@ function crepair_content(&$a) {
        $o .= replace_macros($tpl, array(
                '$label_name' => t('Name'),
                '$label_nick' => t('Account Nickname'),
+               '$label_attag' => t('@Tagname - overrides Name/Nickname'),
                '$label_url' => t('Account URL'),
                '$label_request' => t('Friend Request URL'),
                '$label_confirm' => t('Friend Confirm URL'),
@@ -97,6 +100,7 @@ function crepair_content(&$a) {
                '$confirm'      => $contact['confirm'],
                '$notify'       => $contact['notify'],
                '$poll'         => $contact['poll'],
+               '$contact_attag'  => $contact['attag'],
                '$lbl_submit'   => t('Submit')
        ));
 
index 4dacb5d81707c9528ae6d9729be42a80dbb2b956..180e8ff31c7a587ab5eb1770a7b8de3d2f45cf60 100644 (file)
@@ -566,7 +566,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
                                dbesc($newurl),
                                intval($local_uid)
                        );
-                       if(! count($r)) {
+                       if(! count($ret)) {
                                // this is either a bogus confirmation (?) or we deleted the original introduction.
                                $message = t('Contact record was not found for you on our site.');
                                xml_status(3,$message);
@@ -581,6 +581,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
                $foreign_pubkey = $ret[0]['site-pubkey'];
                $dfrn_record    = $ret[0]['id'];
 
+               if(! $foreign_pubkey) {
+                       $message = sprintf( t('Site public key not available in contact record for URL %s.'), $newurl);
+                       xml_status(3,$message);
+               }
+
                $decrypted_dfrn_id = "";
                openssl_public_decrypt($dfrn_id,$decrypted_dfrn_id,$foreign_pubkey);
 
index 84cb2fc165ac3ba13b47fa63ecaac5c814935286..23bdd7388edc0a22f1bfbaff32de663ebaff603c 100644 (file)
@@ -72,7 +72,7 @@ function dfrn_notify_post(&$a) {
                        FROM `contact` 
                        LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid` 
                        WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0 
-                               AND `user`.`nickname` = '%s' $sql_extra LIMIT 1",
+                               AND `user`.`nickname` = '%s' AND `user`.`account_expired` = 0 $sql_extra LIMIT 1",
                dbesc($a->argv[1])
        );
 
@@ -807,7 +807,7 @@ function dfrn_notify_content(&$a) {
                        intval(time() + 90 )
                );
 
-               logger('dfrn_notify: challenge=' . $hash );
+               logger('dfrn_notify: challenge=' . $hash, LOGGER_DEBUG );
 
                $sql_extra = '';
                switch($direction) {
@@ -829,7 +829,8 @@ function dfrn_notify_content(&$a) {
                }
 
                $r = q("SELECT `contact`.*, `user`.`nickname` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` 
-                               WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `user`.`nickname` = '%s' $sql_extra LIMIT 1",
+                               WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `user`.`nickname` = '%s' 
+                               AND `user`.`account_expired` = 0 $sql_extra LIMIT 1",
                                dbesc($a->argv[1])
                );
 
@@ -840,14 +841,20 @@ function dfrn_notify_content(&$a) {
                $encrypted_id = '';
                $id_str = $my_id . '.' . mt_rand(1000,9999);
 
-               if((($r[0]['duplex']) && strlen($r[0]['prvkey'])) || (! strlen($r[0]['pubkey']))) {
-                       openssl_private_encrypt($hash,$challenge,$r[0]['prvkey']);
-                       openssl_private_encrypt($id_str,$encrypted_id,$r[0]['prvkey']);
+               $prv_key = trim($r[0]['prvkey']);
+               $pub_key = trim($r[0]['pubkey']);
+               $dplx = intval($r[0]['duplex']);
+
+               if((($dplx) && (strlen($prv_key))) || ((strlen($prv_key)) && (!(strlen($pub_key))))) {
+                       openssl_private_encrypt($hash,$challenge,$prv_key);
+                       openssl_private_encrypt($id_str,$encrypted_id,$prv_key);
                }
-               else {
-                       openssl_public_encrypt($hash,$challenge,$r[0]['pubkey']);
-                       openssl_public_encrypt($id_str,$encrypted_id,$r[0]['pubkey']);
+               elseif(strlen($pub_key)) {
+                       openssl_public_encrypt($hash,$challenge,$pub_key);
+                       openssl_public_encrypt($id_str,$encrypted_id,$pub_key);
                }
+               else
+                       $status = 1;
 
                $challenge    = bin2hex($challenge);
                $encrypted_id = bin2hex($encrypted_id);
index 98901e9f56c80c4e10745c0e9d4a0eb4128ab37d..5d789f480bb31cd34ddf3472004351eb1faf2321 100644 (file)
@@ -277,14 +277,15 @@ function dfrn_request_post(&$a) {
 
                // Canonicalise email-style profile locator
 
-               $url = webfinger_dfrn($url);
+               $hcard = '';
+               $url = webfinger_dfrn($url,$hcard);
 
                if(substr($url,0,5) === 'stat:') {
-                       $network = 'stat';
+                       $network = NETWORK_OSTATUS;
                        $url = substr($url,5);
                }
                else {
-                       $network = 'dfrn';
+                       $network = NETWORK_DFRN;
                }
 
                logger('dfrn_request: url: ' . $url);
@@ -342,7 +343,7 @@ function dfrn_request_post(&$a) {
 
                                require_once('Scrape.php');
 
-                               $parms = scrape_dfrn($url);
+                               $parms = scrape_dfrn(($hcard) ? $hcard : $url);
 
                                if(! count($parms)) {
                                        notice( t('Profile location is not valid or does not contain profile information.') . EOL );
@@ -611,6 +612,9 @@ function dfrn_request_content(&$a) {
                        $myaddr = ((x($_GET,'address')) ? $_GET['address'] : '');
                }
 
+               $target_addr = $a->profile['nickname'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3 );
+
+
                /**
                 *
                 * The auto_request form only has the profile address
@@ -624,6 +628,11 @@ function dfrn_request_content(&$a) {
                else
                        $tpl = get_markup_template('auto_request.tpl');
 
+               $page_desc = sprintf( t('Diaspora members: Please do not use this form. Instead, enter "%s" into your Diaspora search bar.'), 
+                       $target_addr) . EOL . EOL;
+
+               $page_desc .= t("Please enter your 'Identity Address' from one of the following supported social networks:");
+
                $o .= replace_macros($tpl,array(
                        '$header' => t('Friend/Connection Request'),
                        '$desc' => t('Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'),
@@ -632,11 +641,11 @@ function dfrn_request_content(&$a) {
                        '$yes' => t('Yes'),
                        '$no' => t('No'),
                        '$add_note' => t('Add a personal note:'),
-                       '$page_desc' => t("Please enter your 'Identity Address' from one of the following supported social networks:"),
+                       '$page_desc' => $page_desc,
                        '$friendika' => t('Friendika'),
                        '$statusnet' => t('StatusNet/Federated Social Web'),
-                       '$private_net' => t("Private \x28secure\x29 network"),
-                       '$public_net' => t("Public \x28insecure\x29 network"),
+                       '$diaspora' => t('Diaspora'),
+                       '$diasnote' => t('- please share from your own site as noted above'),
                        '$your_address' => t('Your Identity Address:'),
                        '$submit' => t('Submit Request'),
                        '$cancel' => t('Cancel'),
index 0c60f04bf4be14cb8ff4a2b29363047813405924..93abcd5de845dd661fd9afef49649c438ed44644 100644 (file)
@@ -22,7 +22,7 @@ function directory_content(&$a) {
        }
 
        $o = '';
-       $o .= '<script> $(document).ready(function() { $(\'#nav-directory-link\').addClass(\'nav-selected\'); });</script>';
+       nav_set_selected('directory');
        if(x($_SESSION,'theme'))
                unset($_SESSION['theme']);
 
index 52a84e755e1dd0802b5d8e578c6447c0185fe921..281ce1dd414140d5d4cb3402df8c30d6f4b912ca 100644 (file)
@@ -114,8 +114,6 @@ function display_content(&$a) {
 
        }
 
-       $o .= cc_license();
-
        return $o;
 }
 
index c396ee44b04e13d39117b2e1a74abb201391f55b..bceb9250a2d44f83abe547db4f4294ed6656860e 100644 (file)
@@ -71,7 +71,7 @@ function editpost_content(&$a) {
 
        if($mail_enabled) {
        $selected = (($pubmail_enabled) ? ' checked="checked" ' : '');
-               $jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . 'value="1" /> '
+               $jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . ' value="1" /> '
                . t("Post to Email") . '</div>';
        }
                                        
index 27ca698307852a941b93eae88c2affe1766c29d4..5bc9807ed7b60e9f33c69f8ab351f8c9a0dcf697 100644 (file)
@@ -45,13 +45,20 @@ function events_post(&$a) {
                        $finish = datetime_convert('UTC','UTC',$finish);
        }
 
+       // Don't allow the event to finish before it begins.
+       // It won't hurt anything, but somebody will file a bug report
+       // and we'll waste a bunch of time responding to it. Time that 
+       // could've been spent doing something else. 
+
+       if(strcmp($finish,$start) < 0)
+               $finish = $start;
 
        $desc     = escape_tags(trim($_POST['desc']));
        $location = escape_tags(trim($_POST['location']));
        $type     = 'event';
 
        if((! $desc) || (! $start)) {
-               notice('Event description and start time are required.');
+               notice( t('Event description and start time are required.') . EOL);
                goaway($a->get_baseurl() . '/events/new');
        }
 
index df4d2e630a9fb57d22e522a80cea8675c709267d..77c8ae18f3e796cf1c30dcd0c227e1990c789c40 100644 (file)
@@ -100,14 +100,15 @@ function follow_post(&$a) {
                        $new_relation = CONTACT_IS_FOLLOWER;
 
                // create contact record 
-               $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`,
+               $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `batch`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`,
                        `writable`, `blocked`, `readonly`, `pending` )
-                       VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
+                       VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
                        intval(local_user()),
                        dbesc(datetime_convert()),
                        dbesc($ret['url']),
                        dbesc($ret['addr']),
                        dbesc($ret['alias']),
+                       dbesc($ret['batch']),
                        dbesc($ret['notify']),
                        dbesc($ret['poll']),
                        dbesc($ret['name']),
index d0e709c753b3cd19ca77e053093aea1e7541bbc4..b12110bd5402a267da7d5ebc2eef1aca20314ced 100644 (file)
@@ -21,6 +21,7 @@ function friendika_init(&$a) {
                        'register_policy' =>  $register_policy[$a->config['register_policy']],
                        'admin' => $admin,
                        'site_name' => $a->config['sitename'],
+                       'platform' => FRIENDIKA_PLATFORM,
                        'info' => ((x($a->config,'info')) ? $a->config['info'] : '')                    
                );
 
@@ -42,8 +43,6 @@ function friendika_content(&$a) {
        $o .= t('This is Friendika version') . ' ' . FRIENDIKA_VERSION . ' ';
        $o .= t('running at web location') . ' ' . z_root() . '</p><p>';
 
-       $o .= t('Shared content within the Friendika network is provided under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a>') . '</p><p>';
-
        $o .= t('Please visit <a href="http://project.friendika.com">Project.Friendika.com</a> to learn more about the Friendika project.') . '</p><p>';        
 
        $o .= t('Bug reports and issues: please visit') . ' ' . '<a href="http://bugs.friendika.com">Bugs.Friendika.com</a></p><p>';
index 981796f67efe6a0674dbd5fd21d3b61d45b53ea7..ca163902ca685d127ca4163eaaf11123428980c6 100644 (file)
@@ -176,8 +176,8 @@ function group_content(&$a) {
        if($change) 
                $o = '';
 
-       $o .= '<div id="group-members">';
        $o .= '<h3>' . t('Members') . '</h3>';
+       $o .= '<div id="group-members">';
        $textmode = (($switchtotext && (count($members) > $switchtotext)) ? true : false);
        foreach($members as $member) {
                if($member['url']) {
@@ -190,9 +190,10 @@ function group_content(&$a) {
 
        $o .= '</div><div id="group-members-end"></div>';
        $o .= '<hr id="group-separator" />';
+       
+       $o .= '<h3>' . t('All Contacts') . '</h3>';
        $o .= '<div id="group-all-contacts">';
 
-               $o .= '<h3>' . t('All Contacts') . '</h3>';
                $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0 ORDER BY `name` ASC",
                        intval(local_user())
                );
index 495b4ccc22d866362481c17af36e430491c33bcf..af05bd47c08109bbd23e70c8b960e7ba66f4decc 100644 (file)
@@ -17,6 +17,7 @@ function load_doc_file($s) {
 
 
 function help_content(&$a) {
+       nav_set_selected('help');
 
        global $lang;
 
@@ -35,10 +36,12 @@ function help_content(&$a) {
        
        if(! strlen($text)) {
                header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
-               notice( t('Page not found.' ) . EOL);
-               return;
+               $tpl = get_markup_template("404.tpl");
+               return replace_macros($tpl, array(
+                       '$message' =>  t('Page not found.' )
+               ));
        }
        
        return Markdown($text);
 
-}
\ No newline at end of file
+}
index c7861d26d0d19264a6276c824beef7fea28ee9f2..fe61a874c36ad952f034fd57fb183634a3073036 100644 (file)
@@ -1,10 +1,38 @@
 <?php
 
+require_once('include/crypto.php');
+
 function hostxrd_init(&$a) {
        header('Access-Control-Allow-Origin: *');
        header("Content-type: text/xml");
+       $pubkey = get_config('system','site_pubkey');
+
+       if(! $pubkey) {
+
+               // should only have to ever do this once.
+
+               $res=openssl_pkey_new(array(
+                       'digest_alg' => 'sha1',
+                       'private_key_bits' => 4096,
+                       'encrypt_key' => false ));
+
+
+               $prvkey = '';
+
+               openssl_pkey_export($res, $prvkey);
+
+               // Get public key
+
+               $pkey = openssl_pkey_get_details($res);
+               $pubkey = $pkey["key"];
+
+               set_config('system','site_prvkey', $prvkey);
+               set_config('system','site_pubkey', $pubkey);
+       }
+
        $tpl = file_get_contents('view/xrd_host.tpl');
-       echo str_replace(array('$zroot','$domain'),array(z_root(),z_path()),$tpl);
+       echo str_replace(array(
+               '$zhost','$zroot','$domain','$zot_post','$bigkey'),array($a->get_hostname(),z_root(),z_path(),z_root() . '/post', salmon_key(get_config('system','site_pubkey'))),$tpl);
        session_write_close();
        exit();
 
index ef0b232d56b12b96374f3c2356fed80be5b24afa..b8c0683aaca90144b5844d27374584109bf161e0 100644 (file)
@@ -15,6 +15,8 @@
  *
  */  
 
+require_once('include/crypto.php');
+
 function item_post(&$a) {
 
        if((! local_user()) && (! remote_user()))
@@ -36,6 +38,7 @@ function item_post(&$a) {
        call_hooks('post_local_start', $_POST);
 
        $api_source = ((x($_POST,'api_source') && $_POST['api_source']) ? true : false);
+       $return_path = ((x($_POST,'return')) ? $_POST['return'] : '');
 
        /**
         * Is this a reply to something?
@@ -80,7 +83,7 @@ function item_post(&$a) {
                if(($r === false) || (! count($r))) {
                        notice( t('Unable to locate original post.') . EOL);
                        if(x($_POST,'return')) 
-                               goaway($a->get_baseurl() . "/" . $_POST['return'] );
+                               goaway($a->get_baseurl() . "/" . $return_path );
                        killme();
                }
                $parent_item = $r[0];
@@ -109,7 +112,7 @@ function item_post(&$a) {
        if(! can_write_wall($a,$profile_uid)) {
                notice( t('Permission denied.') . EOL) ;
                if(x($_POST,'return')) 
-                       goaway($a->get_baseurl() . "/" . $_POST['return'] );
+                       goaway($a->get_baseurl() . "/" . $return_path );
                killme();
        }
 
@@ -195,7 +198,7 @@ function item_post(&$a) {
                if(! strlen($body)) {
                        info( t('Empty post discarded.') . EOL );
                        if(x($_POST,'return')) 
-                               goaway($a->get_baseurl() . "/" . $_POST['return'] );
+                               goaway($a->get_baseurl() . "/" . $return_path );
                        killme();
                }
        }
@@ -330,11 +333,20 @@ function item_post(&$a) {
                }
        }
 
+       // embedded bookmark in post? convert to regular url and set bookmark flag
+
+       $bookmark = 0;
+       if(preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$body,$match)) {
+               $bookmark = 1;
+               $body = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'[url=$1]$2[/url]',$body);
+       }
+
+
        /**
         * Fold multi-line [code] sequences
         */
 
-       $body = preg_replace('/\[\/code\]\s*\[code\]/m',"\n",$body); 
+       $body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body); 
 
        /**
         * Look for any tags and linkify them
@@ -351,7 +363,7 @@ function item_post(&$a) {
         * and we are replying, and there isn't one already
         */
 
-       if(($parent_contact) && ($parent_contact['network'] === 'stat'
+       if(($parent_contact) && ($parent_contact['network'] === NETWORK_OSTATUS
                && ($parent_contact['nick']) && (! in_array('@' . $parent_contact['nick'],$tags))) {
                $body = '@' . $parent_contact['nick'] . ' ' . $body;
                $tags[] = '@' . $parent_contact['nick'];
@@ -402,7 +414,8 @@ function item_post(&$a) {
                                                );
                                        }
                                        else {
-                                               $r = q("SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1",
+                                               $r = q("SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
+                                                       dbesc($name),
                                                        dbesc($name),
                                                        intval($profile_uid)
                                                );
@@ -488,6 +501,7 @@ function item_post(&$a) {
        $datarray['author-avatar'] = $author['thumb'];
        $datarray['created']       = datetime_convert();
        $datarray['edited']        = datetime_convert();
+       $datarray['commented']     = datetime_convert();
        $datarray['received']      = datetime_convert();
        $datarray['changed']       = datetime_convert();
        $datarray['uri']           = $uri;
@@ -506,6 +520,7 @@ function item_post(&$a) {
        $datarray['private']       = $private;
        $datarray['pubmail']       = $pubmail_enable;
        $datarray['attach']        = $attachments;
+       $datarray['bookmark']      = intval($bookmark);
        $datarray['thr-parent']    = $thr_parent;
 
        /**
@@ -536,9 +551,9 @@ function item_post(&$a) {
                );
 
                proc_run('php', "include/notifier.php", 'edit_post', "$post_id");
-               if((x($_POST,'return')) && strlen($_POST['return'])) {
-                       logger('return: ' . $_POST['return']);
-                       goaway($a->get_baseurl() . "/" . $_POST['return'] );
+               if((x($_POST,'return')) && strlen($return_path)) {
+                       logger('return: ' . $return_path);
+                       goaway($a->get_baseurl() . "/" . $return_path );
                }
                killme();
        }
@@ -547,9 +562,9 @@ function item_post(&$a) {
 
 
        $r = q("INSERT INTO `item` (`guid`, `uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, 
-               `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, 
-               `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach` )
-               VALUES( '%s', %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )",
+               `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `commented`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, 
+               `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark` )
+               VALUES( '%s', %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d )",
                dbesc($datarray['guid']),
                intval($datarray['uid']),
                dbesc($datarray['type']),
@@ -564,6 +579,7 @@ function item_post(&$a) {
                dbesc($datarray['author-avatar']),
                dbesc($datarray['created']),
                dbesc($datarray['edited']),
+               dbesc($datarray['commented']),
                dbesc($datarray['received']),
                dbesc($datarray['changed']),
                dbesc($datarray['uri']),
@@ -582,7 +598,8 @@ function item_post(&$a) {
                dbesc($datarray['deny_gid']),
                intval($datarray['private']),
                intval($datarray['pubmail']),
-               dbesc($datarray['attach'])
+               dbesc($datarray['attach']),
+               intval($datarray['bookmark'])
        );
 
        $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1",
@@ -674,6 +691,27 @@ function item_post(&$a) {
 
                                pop_lang();
                        }
+
+                       // We won't be able to sign Diaspora comments for authenticated visitors - we don't have their private key
+
+                       if($self) {
+                               require_once('include/bb2diaspora.php');
+                               $signed_body = html_entity_decode(bb2diaspora($datarray['body']));
+                               $myaddr = $a->user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+                               if($datarray['verb'] === ACTIVITY_LIKE) 
+                                       $signed_text = $datarray['guid'] . ';' . 'Post' . ';' . $parent_item['guid'] . ';' . 'true' . ';' . $myaddr;
+                               else
+                               $signed_text = $datarray['guid'] . ';' . $parent_item['guid'] . ';' . $signed_body . ';' . $myaddr;
+
+                               $authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha'));
+
+                               q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+                                       intval($post_id),
+                       dbesc($signed_text),
+                       dbesc(base64_encode($authorsig)),
+                       dbesc($myaddr)
+                       );
+                       }
                }
                else {
                        $parent = $post_id;
@@ -741,6 +779,11 @@ function item_post(&$a) {
                        }
                }
 
+               // fallback so that parent always gets set to non-zero.
+
+               if(! $parent)
+                       $parent = $post_id;
+
                $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `plink` = '%s', `changed` = '%s', `last-child` = 1, `visible` = 1
                        WHERE `id` = %d LIMIT 1",
                        intval($parent),
@@ -763,11 +806,17 @@ function item_post(&$a) {
        else {
                logger('mod_item: unable to retrieve post that was just stored.');
                notify( t('System error. Post not saved.'));
-               goaway($a->get_baseurl() . "/" . $_POST['return'] );
+               goaway($a->get_baseurl() . "/" . $return_path );
                // NOTREACHED
        }
 
-       proc_run('php', "include/notifier.php", $notify_type, "$post_id");
+       // update the commented timestamp on the parent
+
+       q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1",
+               dbesc(datetime_convert()),
+               dbesc(datetime_convert()),
+               intval($parent)
+       );
 
        $datarray['id']    = $post_id;
        $datarray['plink'] = $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id;
@@ -799,6 +848,17 @@ function item_post(&$a) {
                }
        }
 
+       // This is a real juggling act on shared hosting services which kill your processes
+       // e.g. dreamhost. We used to start delivery to our native delivery agents in the background
+       // and then run our plugin delivery from the foreground. We're now doing plugin delivery first,
+       // because as soon as you start loading up a bunch of remote delivey processes, *this* page is
+       // likely to get killed off. If you end up looking at an /item URL and a blank page,
+       // it's very likely the delivery got killed before all your friends could be notified.
+       // Currently the only realistic fixes are to use a reliable server - which precludes shared hosting,
+       // or cut back on plugins which do remote deliveries.  
+
+       proc_run('php', "include/notifier.php", $notify_type, "$post_id");
+
        logger('post_complete');
 
        // figure out how to return, depending on from whence we came
@@ -806,10 +866,10 @@ function item_post(&$a) {
        if($api_source)
                return;
 
-       if((x($_POST,'return')) && strlen($_POST['return'])) {
-               logger('return: ' . $_POST['return']);
-               goaway($a->get_baseurl() . "/" . $_POST['return'] );
+       if($return_path) {
+               goaway($a->get_baseurl() . "/" . $return_path);
        }
+
        $json = array('success' => 1);
        if(x($_POST,'jsreload') && strlen($_POST['jsreload']))
                $json['reload'] = $a->get_baseurl() . '/' . $_POST['jsreload'];
index 2876302122d78db7dbcb9df87f3ddcf75f92c215..95bedcc20fed2a41a0fc2904e5b6b4fccd47e9e2 100644 (file)
@@ -55,6 +55,22 @@ function like_content(&$a) {
                return;
        }
 
+       $remote_owner = null;
+
+       if(! $item['wall']) {
+               // The top level post may have been written by somebody on another system
+               $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                       intval($item['contact-id']),
+                       intval($item['uid'])
+               );
+               if(! count($r))
+                       return;
+               if(! $r[0]['self'])
+                       $remote_owner = $r[0];
+       }
+
+       // this represents the post owner on this system. 
+
        $r = q("SELECT `contact`.*, `user`.`nickname` FROM `contact` LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
                WHERE `contact`.`self` = 1 AND `contact`.`uid` = %d LIMIT 1",
                intval($owner_uid)
@@ -67,6 +83,11 @@ function like_content(&$a) {
                return;
        }
 
+       if(! $remote_owner)
+               $remote_owner = $owner;
+
+
+       // This represents the person posting
 
        if((local_user()) && (local_user() == $owner_uid)) {
                $contact = $owner;
@@ -137,9 +158,9 @@ EOT;
        $arr['gravity'] = GRAVITY_LIKE;
        $arr['parent'] = $item['id'];
        $arr['parent-uri'] = $item['uri'];
-       $arr['owner-name'] = $owner['name'];
-       $arr['owner-link'] = $owner['url'];
-       $arr['owner-avatar'] = $owner['thumb'];
+       $arr['owner-name'] = $remote_owner['name'];
+       $arr['owner-link'] = $remote_owner['url'];
+       $arr['owner-avatar'] = $remote_owner['thumb'];
        $arr['author-name'] = $contact['name'];
        $arr['author-link'] = $contact['url'];
        $arr['author-avatar'] = $contact['thumb'];
diff --git a/mod/localtime.php b/mod/localtime.php
new file mode 100644 (file)
index 0000000..c03eae1
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+
+require_once('include/datetime.php');
+
+
+function localtime_post(&$a) {
+
+       $t = $_REQUEST['time'];
+       if(! $t)
+               $t = 'now';
+
+       $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM
+
+       if($_POST['timezone'])
+               $a->data['mod-localtime'] = datetime_convert('UTC',$_POST['timezone'],$t,$bd_format);
+
+}
+
+function localtime_content(&$a) {
+       $t = $_REQUEST['time'];
+       if(! $t)
+               $t = 'now';
+
+       $o .= '<h3>' . t('Time Conversion') . '</h3>';
+
+       $o .= '<p>' . t('Friendika provides this service for sharing events with other networks and friends in unknown timezones.') . '</p>';
+
+
+
+       $o .= '<p>' . sprintf( t('UTC time: %s'), $t) . '</p>';
+
+       if($_REQUEST['timezone'])
+               $o .= '<p>' . sprintf( t('Current timezone: %s'), $_REQUEST['timezone']) . '</p>';
+
+       if(x($a->data,'mod-localtime'))
+               $o .= '<p>' . sprintf( t('Converted localtime: %s'),$a->data['mod-localtime']) . '</p>';
+
+
+       $o .= '<form action ="' . $a->get_baseurl() . '/localtime?f=&time=' . $t . '" method="post" >';
+
+       $o .= '<p>' . t('Please select your timezone:') . '</p>'; 
+
+       $o .= select_timezone(($_REQUEST['timezone']) ? $_REQUEST['timezone'] : 'America/Los_Angeles');
+
+       $o .= '<input type="submit" name="submit" value="' . t('Submit') . '" /></form>';
+
+       return $o;
+
+}
\ No newline at end of file
index 5dd80fe3efad761e90757e6e34ef31595e076d5d..eea2dad4ffc490a99b892512614e68e206273a5b 100644 (file)
@@ -22,6 +22,7 @@ function match_content(&$a) {
 
        $params = array();
        $tags = trim($r[0]['pub_keywords'] . ' ' . $r[0]['prv_keywords']);
+       
        if($tags) {
                $params['s'] = $tags;
                if($a->pager['page'] != 1)
@@ -40,15 +41,17 @@ function match_content(&$a) {
                }
 
                if(count($j->results)) {
+                       
+                       $tpl = get_markup_template('match.tpl');
                        foreach($j->results as $jj) {
-
-                               $o .= '<div class="profile-match-wrapper"><div class="profile-match-photo">';
-                               $o .= '<a href="' . $jj->url . '">' . '<img src="' . $jj->photo . '" alt="' . $jj->name . '" title="' . $jj->name . '[' . $jj->tags . ']' . '" /></a></div>';
-                               $o .= '<div class="profile-match-break"></div>';
-                               $o .= '<div class="profile-match-name"><a href="' . $jj->url . '" title="' . $jj->name . '[' . $jj->url .']' . '">' . $jj->name . '</a></div>';
-                               $o .= '<div class="profile-match-end"></div></div>';
+                               
+                               $o .= replace_macros($tpl,array(
+                                       '$url' => $jj->url,
+                                       '$name' => $jj->name,
+                                       '$photo' => $jj->photo,
+                                       '$tags' => $jj->tags
+                               ));
                        }
-                       $o .= '<div id="profile-match-wrapper-end"></div>';
                }
                else {
                        info( t('No matches') . EOL);
index 165d638141ce98ac1dcb7bc2b4f6b3af2dc7c7e4..d4772d026144d21cc9bea0da2cc41c8829cfd98b 100644 (file)
@@ -36,7 +36,7 @@ function message_post(&$a) {
 function message_content(&$a) {
 
        $o = '';
-       $o .= '<script> $(document).ready(function() { $(\'#nav-messages-link\').addClass(\'nav-selected\'); });</script>';
+       nav_set_selected('messages');
 
        if(! local_user()) {
                notice( t('Permission denied.') . EOL);
@@ -45,13 +45,21 @@ function message_content(&$a) {
 
        $myprofile = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
 
-
+       if (($a->argc > 1) && ($a->argv[1] === 'new')) {
+               $tab = 'new';
+       } else if ($a->argc == 2 && $a->argv[1] === 'sent') {
+               $tab = 'sent';
+       } else {
+               $tab = 'inbox';
+       }
+       
        $tpl = get_markup_template('mail_head.tpl');
        $header = replace_macros($tpl, array(
                '$messages' => t('Messages'),
                '$inbox' => t('Inbox'),
                '$outbox' => t('Outbox'),
-               '$new' => t('New Message')
+               '$new' => t('New Message'),
+               '$activetab' => $tab
        ));
 
 
@@ -90,6 +98,8 @@ function message_content(&$a) {
 
        if(($a->argc > 1) && ($a->argv[1] === 'new')) {
                
+               $o .= $header;
+               
                $tpl = get_markup_template('msg-header.tpl');
 
                $a->page['htmlhead'] .= replace_macros($tpl, array(
@@ -114,7 +124,6 @@ function message_content(&$a) {
                        '$upload' => t('Upload photo'),
                        '$insert' => t('Insert web link'),
                        '$wait' => t('Please wait')
-
                ));
 
                return $o;
@@ -159,10 +168,10 @@ function message_content(&$a) {
                                '$from_url' => $a->get_baseurl() . '/redir/' . $rr['contact-id'],
                                '$sparkle' => ' sparkle',
                                '$from_photo' => $rr['thumb'],
-                               '$subject' => (($rr['mailseen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>'),
+                               '$subject' => template_escape((($rr['mailseen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>')),
                                '$delete' => t('Delete conversation'),
-                               '$body' => $rr['body'],
-                               '$to_name' => $rr['name'],
+                               '$body' => template_escape($rr['body']),
+                               '$to_name' => template_escape($rr['name']),
                                '$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A'))
                        ));
                }
@@ -221,14 +230,14 @@ function message_content(&$a) {
                        }
                        $o .= replace_macros($tpl, array(
                                '$id' => $message['id'],
-                               '$from_name' =>$message['from-name'],
+                               '$from_name' => template_escape($message['from-name']),
                                '$from_url' => $from_url,
                                '$sparkle' => $sparkle,
                                '$from_photo' => $message['from-photo'],
-                               '$subject' => $message['title'],
-                               '$body' => smilies(bbcode($message['body'])),
+                               '$subject' => template_escape($message['title']),
+                               '$body' => template_escape(smilies(bbcode($message['body']))),
                                '$delete' => t('Delete message'),
-                               '$to_name' => $message['name'],
+                               '$to_name' => template_escape($message['name']),
                                '$date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'],'D, d M Y - g:i A')
                        ));
                                
@@ -240,7 +249,7 @@ function message_content(&$a) {
                        '$header' => t('Send Reply'),
                        '$to' => t('To:'),
                        '$subject' => t('Subject:'),
-                       '$subjtxt' => $message['title'],
+                       '$subjtxt' => template_escape($message['title']),
                        '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ',
                        '$yourmessage' => t('Your message:'),
                        '$select' => $select,
@@ -248,7 +257,6 @@ function message_content(&$a) {
                        '$upload' => t('Upload photo'),
                        '$insert' => t('Insert web link'),
                        '$wait' => t('Please wait')
-
                ));
 
                return $o;
index 05b74b50a4252782c7a9c410ea97cdfae4c46bea..371a35402a14208c3326c675a144e192e1347e48 100644 (file)
@@ -14,41 +14,137 @@ function network_init(&$a) {
                $a->page['aside'] = '';
 
        $search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : '');
-       $srchurl = '/network' . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '');
 
+       // We need a better way of managing a growing argument list
 
-       $a->page['aside'] .= search($search,'netsearch-box',$srchurl);
+       // moved into savedsearches()
+       // $srchurl = '/network' 
+       //              . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') 
+       //              . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '')
+       //              . ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : '');
+       
+       if(x($_GET,'save')) {
+               $r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1",
+                       intval(local_user()),
+                       dbesc($search)
+               );
+               if(! count($r)) {
+                       q("insert into `search` ( `uid`,`term` ) values ( %d, '%s') ",
+                               intval(local_user()),
+                               dbesc($search)
+                       );
+               }
+       }
+       if(x($_GET,'remove')) {
+               q("delete from `search` where `uid` = %d and `term` = '%s' limit 1",
+                       intval(local_user()),
+                       dbesc($search)
+               );
+       }
 
-       $a->page['aside'] .= '<div id="network-new-link">';
+       // item filter tabs
+       // TODO: fix this logic, reduce duplication
+       $a->page['content'] .= '<div class="tabs-wrapper">';
+       
+       $starred_active = '';
+       $new_active = '';
+       $bookmarked_active = '';
+       $all_active = '';
+       $search_active = '';
+       
+       if(($a->argc > 1 && $a->argv[1] === 'new') 
+               || ($a->argc > 2 && $a->argv[2] === 'new')) {
+                       $new_active = 'active';
+       }
+       
+       if(x($_GET,'search')) {
+               $search_active = 'active';
+       }
+       
+       if(x($_GET,'star')) {
+               $starred_active = 'active';
+       }
+       
+       if($_GET['bmark']) {
+               $bookmarked_active = 'active';
+       }
+       
+       if (($new_active == '') 
+               && ($starred_active == '') 
+               && ($bookmarked_active == '')
+               && ($search_active == '')) {
+                       $all_active = 'active';
+       }
+       
+       // network links moved to content to match other pages
+       // all
+       // added 'button' class for easier styling - not the best place for it, should be moved into the tpl like profile_tabs.tpl
+       // once there is a network_tabs.tpl or something
+       $a->page['content'] .= '<a class="button tabs ' . $all_active . '" href="' . $a->get_baseurl() . '/' 
+               . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . '">' 
+               . t('All') . '</a>';
+               
+       // new
+       $a->page['content'] .= '<a class="button tabs ' . $new_active . '" href="' . $a->get_baseurl() . '/' 
+               . str_replace('/new', '', $a->cmd) . '/new' 
+               . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' 
+               . t('New') . '</a>';
+       
+       // starred
+       $a->page['content'] .= '<a class="button tabs ' . $starred_active . '" href="' . $a->get_baseurl() . '/'
+               . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '&star=1" >' 
+               . t('Starred') . '</a>';
+       
+       // bookmarks
+       $a->page['content'] .= '<a class="button tabs ' . $bookmarked_active . '" href="' . $a->get_baseurl() . '/'
+               . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '&bmark=1" >' 
+               . t('Bookmarks') . '</a>';
+       
+       $a->page['content'] .= '</div>';
+       // --- end item filter tabs
+       
+       // search terms header
+       if(x($_GET,'search')) {
+               $a->page['content'] .= '<h2>Search Results For: '  . $search . '</h2>';
+       }
+       
+       $a->page['aside'] .= group_side('network','network',true,$group_id);
+       
+       // moved to saved searches to have it in the same div
+       //$a->page['aside'] .= search($search,'netsearch-box',$srchurl,true);
 
+       $a->page['aside'] .= saved_searches($search);
 
-       $a->page['aside'] .= '<div id="network-view-link">';
-       if(($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new') || x($_GET,'search'))
-               $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . '">' . t('View Conversations') . '</a></div>';
-       else { 
-               $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . $a->cmd . '/new' . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' . t('View New Items') . '</a></div>';
+}
 
-               if(x($_GET,'star'))
-                       $a->page['aside'] .= '<div id="network-star-link">'
-                               . '<a class="network-star" href="' . $a->get_baseurl() . '/' . $a->cmd 
-                               . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' 
-                               . t('View Any Items') . '</a>' 
-                               . '<span class="network-star icon starred"></span>' 
-                               . '<span class="network-star icon unstarred"></span>' 
-                               . '<div class="clear"></div></div>';
-               else
-                       $a->page['aside'] .= '<div id="network-star-link">'
-                               . '<a class="network-star" href="' . $a->get_baseurl() . '/' . $a->cmd 
-                               . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '&star=1" >' 
-                               . t('View Starred Items') . '</a>'
-                               . '<span class="network-star icon starred"></span>' 
-                               . '<div class="clear"></div></div>';
+function saved_searches($search) {
 
-       }
+       $srchurl = '/network' 
+               . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') 
+               . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '')
+               . ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : '');
+       
+       $o = '';
 
-       $a->page['aside'] .= '</div>';
+       $r = q("select `term` from `search` WHERE `uid` = %d",
+               intval(local_user())
+       );
+
+       $o .= '<div id="saved-search-list" class="widget">';
+       $o .= '<h3 id="search">' . t('Saved Searches') . '</h3>' . "\r\n";
+       $o .= search($search,'netsearch-box',$srchurl,true);
+       
+       if(count($r)) {
+               $o .= '<ul id="saved-search-ul">' . "\r\n";
+               foreach($r as $rr) {
+                       $o .= '<li class="saved-search-li clear"><a href="network/?f=&remove=1&search=' . $rr['term'] . '" class="icon drophide savedsearchdrop" title="' . t('Remove term') . '" onclick="return confirmDelete();" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> <a href="network/?f&search=' . $rr['term'] . '" class="savedsearchterm" >' . $rr['term'] . '</a></li>' . "\r\n";
+               }
+               $o .= '</ul>';
+       }               
+
+       $o .= '</div>' . "\r\n";
+       return $o;
 
-       $a->page['aside'] .= group_side('network','network',true,$group_id);
 }
 
 
@@ -68,8 +164,12 @@ function network_content(&$a, $update = 0) {
        $nouveau = false;
        require_once('include/acl_selectors.php');
 
-       $cid = ((x($_GET['cid'])) ? intval($_GET['cid']) : 0);
-       $star = ((x($_GET['star'])) ? intval($_GET['star']) : 0);
+       $cid = ((x($_GET,'cid')) ? intval($_GET['cid']) : 0);
+       $star = ((x($_GET,'star')) ? intval($_GET['star']) : 0);
+       $bmark = ((x($_GET,'bmark')) ? intval($_GET['bmark']) : 0);
+       $order = ((x($_GET,'order')) ? notags($_GET['order']) : 'comment');
+       $liked = ((x($_GET,'liked')) ? intval($_GET['liked']) : 0);
+
 
        if(($a->argc > 2) && $a->argv[2] === 'new')
                $nouveau = true;
@@ -98,7 +198,7 @@ function network_content(&$a, $update = 0) {
                        }
                }
 
-               $o .= '<script> $(document).ready(function() { $(\'#nav-network-link\').addClass(\'nav-selected\'); });</script>';
+               nav_set_selected('network');
 
                $_SESSION['return_url'] = $a->cmd;
 
@@ -130,6 +230,9 @@ function network_content(&$a, $update = 0) {
                                . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : '')
                                . ((x($_GET,'search')) ? '&search=' . $_GET['search'] : '') 
                                . ((x($_GET,'star')) ? '&star=' . $_GET['star'] : '') 
+                               . ((x($_GET,'order')) ? '&order=' . $_GET['order'] : '') 
+                               . ((x($_GET,'bmark')) ? '&bmark=' . $_GET['bmark'] : '') 
+                               . ((x($_GET,'liked')) ? '&liked=' . $_GET['liked'] : '') 
                                . "'; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
 
        }
@@ -151,6 +254,9 @@ function network_content(&$a, $update = 0) {
 
        $star_sql = (($star) ?  " AND `starred` = 1 " : '');
 
+       if($bmark)
+               $star_sql .= " AND `bookmark` = 1 ";
+
        $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql ) ";
 
        if($group) {
@@ -188,7 +294,7 @@ function network_content(&$a, $update = 0) {
                if(count($r)) {
                        $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql AND `contact-id` IN ( " . intval($cid) . " )) ";
                        $o = '<h2>' . t('Contact: ') . $r[0]['name'] . '</h2>' . $o;
-                       if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
+                       if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['network'] !== NETWORK_DIASPORA && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
                                notice( t('Private messages to this person are at risk of public disclosure.') . EOL);
                        }
 
@@ -247,7 +353,14 @@ function network_content(&$a, $update = 0) {
        else {
 
                // Normal conversation view
-               // First fetch a known number of parent items
+
+
+               if($order === 'post')
+                               $ordering = "`created`";
+               else
+                               $ordering = "`commented`";
+
+               // Fetch a page full of parent items for this page
 
                $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid`
                        FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
@@ -255,13 +368,12 @@ function network_content(&$a, $update = 0) {
                        AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
                        AND `item`.`parent` = `item`.`id`
                        $sql_extra
-                       ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
+                       ORDER BY `item`.$ordering DESC LIMIT %d ,%d ",
                        intval(local_user()),
                        intval($a->pager['start']),
                        intval($a->pager['itemspage'])
                );
 
-
                // Then fetch all the children of the parents that are on this page
 
                $parents_arr = array();
@@ -272,21 +384,21 @@ function network_content(&$a, $update = 0) {
                                $parents_arr[] = $rr['item_id'];
                        $parents_str = implode(', ', $parents_arr);
 
-                       $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
+                       $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
                                `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
                                `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
                                `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
-                               FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact`
+                               FROM `item`, (SELECT `p`.`id`,`p`.`created`,`p`.`commented` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact`
                                WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
                                AND `contact`.`id` = `item`.`contact-id`
                                AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
                                AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s )
                                $sql_extra
-                               ORDER BY `parentitem`.`created`  DESC, `item`.`gravity` ASC, `item`.`created` ASC ",
+                               ORDER BY `parentitem`.$ordering DESC, `parentitem`.`id` ASC, `item`.`gravity` ASC, `item`.`created` ASC ",
                                intval(local_user()),
                                dbesc($parents_str)
                        );
-               }
+               }       
        }
 
        // Set this so that the conversation function can find out contact info for our wall-wall items
@@ -298,7 +410,6 @@ function network_content(&$a, $update = 0) {
 
        if(! $update) {
                $o .= paginate($a);
-               $o .= cc_license();
        }
 
        return $o;
index 9f1a4662da968d5f4a844af6dc5560142be53ef8..369f120a761c80640fe630addbff462eacecc4d1 100644 (file)
@@ -14,7 +14,7 @@ function notes_init(&$a) {
 }
 
 
-function notes_content(&$a) {
+function notes_content(&$a,$update = false) {
 
        if(! local_user()) {
                notice( t('Permission denied.') . EOL);
@@ -52,31 +52,37 @@ function notes_content(&$a) {
        ));     
        
 
-       $o .= '<h3>' . t('Personal Notes') . '</h3>';
+       if(! $update) {
+               $o .= '<h3>' . t('Personal Notes') . '</h3>';
 
-       $commpage = false;
-       $commvisitor = false;
+               $commpage = false;
+               $commvisitor = false;
 
-       $celeb = false;
+               $celeb = false;
 
 
 
-       $x = array(
-               'is_owner' => $is_owner,
-               'allow_location' => (($a->user['allow_location']) ? true : false),
-        'default_location' => $a->user['default-location'],
-        'nickname' => $a->user['nickname'],
-           'lockstate' => 'lock',
-               'acl' => '',
-        'bang' => '',
-        'visitor' => 'block',
-           'profile_uid' => local_user(),
-               'button' => t('Save')
+               $x = array(
+                       'is_owner' => $is_owner,
+                       'allow_location' => (($a->user['allow_location']) ? true : false),
+               'default_location' => $a->user['default-location'],
+           'nickname' => $a->user['nickname'],
+               'lockstate' => 'lock',
+               'acl' => '',
+           'bang' => '',
+               'visitor' => 'block',
+                   'profile_uid' => local_user(),
+                       'button' => t('Save')
 
-    );
+       );
 
-    $o .= status_editor($a,$x,$a->contact['id']);
+       $o .= status_editor($a,$x,$a->contact['id']);
 
+               $o .= '<div id="live-notes"></div>' . "\r\n";
+               $o .= "<script> var profile_uid = " . local_user() 
+                       . "; var netargs = '/?f='; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
+
+       }
 
        // Construct permissions
 
index 8c32ee8628bbe5250a9dd163e6cb4d09c2f245d3..0c35d4cd1a2672e4b7e731eb735e13d2cccca397 100644 (file)
@@ -64,7 +64,7 @@ function notifications_content(&$a) {
        }
 
        $o = '';
-       $o .= '<script> $(document).ready(function() { $(\'#nav-notify-link\').addClass(\'nav-selected\'); });</script>';
+       nav_set_selected("notifications");
 
        if(($a->argc > 1) && ($a->argv[1] == 'all'))
                $sql_extra = '';
index 1a990c64f17350f8b9f7e8e9b5d90efaaabdbf59..53dce6446a2cbdaf722eb194f4390762e6c04c1e 100644 (file)
@@ -28,9 +28,16 @@ function oexchange_content(&$a) {
                return;
        }
 
-       $url = (((x($_GET,'url')) && strlen($_GET['url'])) ? notags(trim($_GET['url'])) : '');
-
-       $s = fetch_url($a->get_baseurl() . '/parse_url&url=' . $url);
+       $url = (((x($_GET,'url')) && strlen($_GET['url'])) 
+               ? urlencode(notags(trim($_GET['url']))) : '');
+       $title = (((x($_GET,'title')) && strlen($_GET['title'])) 
+               ? '&title=' . urlencode(notags(trim($_GET['title']))) : '');
+       $description = (((x($_GET,'description')) && strlen($_GET['description'])) 
+               ? '&description=' . urlencode(notags(trim($_GET['description']))) : '');
+       $tags = (((x($_GET,'tags')) && strlen($_GET['tags'])) 
+               ? '&tags=' . urlencode(notags(trim($_GET['tags']))) : '');
+
+       $s = fetch_url($a->get_baseurl() . '/parse_url?f=&url=' . $url . $title . $description . $tags);
 
        if(! strlen($s))
                return;
index 6fbd013b8d8756d27091a9f26bd5c450d1c2c154..b8734f02342810d390a89747f4a6d7919d8b0d71 100644 (file)
@@ -55,7 +55,8 @@ function openid_content(&$a) {
                        } 
 
 
-                       $r = q("SELECT * FROM `user` WHERE `openid` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1",
+                       $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` 
+                               FROM `user` WHERE `openid` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
                                dbesc($_SESSION['openid'])
                        );
                        if(! count($r)) {
index 9bb0bc46408e76f3a090d512c3d01fc63bc2bafa..a238ecb2f915cabb071787f3e0156867611c7a27 100644 (file)
@@ -3,17 +3,38 @@
 require_once('library/HTML5/Parser.php');
 require_once('library/HTMLPurifier.auto.php');
 
+function arr_add_hashes(&$item,$k) {
+       $item = '#' . $item;
+}
+
 function parse_url_content(&$a) {
 
-       logger('parse_url: ' . $_GET['url']);
+       $text = null;
+       $str_tags = '';
+
+       if(x($_GET,'binurl'))
+               $url = trim(hex2bin($_GET['binurl']));
+       else
+               $url = trim($_GET['url']);
 
-       $url = trim(hex2bin($_GET['url']));
+       if($_GET['title'])
+               $title = strip_tags(trim($_GET['title']));
+
+       if($_GET['description'])
+               $text = strip_tags(trim($_GET['description']));
+
+       if($_GET['tags']) {
+               $arr_tags = str_getcsv($_GET['tags']);
+               if(count($arr_tags)) {
+                       array_walk($arr_tags,'arr_add_hashes');
+                       $str_tags = '<br />' . implode(' ',$arr_tags) . '<br />';               
+               }
+       }
 
        logger('parse_url: ' . $url);
 
-       $text = null;
 
-       $template = "<br /><a href=\"%s\" >%s</a>%s<br />";
+       $template = "<br /><a class=\"bookmark\" href=\"%s\" >%s</a>%s<br />";
 
 
        $arr = array('url' => $url, 'text' => '');
@@ -25,6 +46,20 @@ function parse_url_content(&$a) {
                killme();
        }
 
+       if($url && $title && $text) {
+
+               $text = '<br /><br /><blockquote>' . $text . '</blockquote><br />';
+               $title = str_replace(array("\r","\n"),array('',''),$title);
+
+               $result = sprintf($template,$url,($title) ? $title : $url,$text) . $str_tags;
+
+               logger('parse_url (unparsed): returns: ' . $result); 
+
+               echo $result;
+               killme();
+       }
+
+
        if($url) {
                $s = fetch_url($url);
        } else {
@@ -35,14 +70,16 @@ function parse_url_content(&$a) {
        logger('parse_url: data: ' . $s, LOGGER_DATA);
 
        if(! $s) {
-               echo sprintf($template,$url,$url,'');
+               echo sprintf($template,$url,$url,'') . $str_tags;
                killme();
        }
 
-       if(strpos($s,'<title>')) {
-               $title = substr($s,strpos($s,'<title>')+7,64);
-               if(strpos($title,'<') !== false)
-                       $title = strip_tags(substr($title,0,strpos($title,'<')));
+       if(! $title) {
+               if(strpos($s,'<title>')) {
+                       $title = substr($s,strpos($s,'<title>')+7,64);
+                       if(strpos($title,'<') !== false)
+                               $title = strip_tags(substr($title,0,strpos($title,'<')));
+               }
        }
 
        $config = HTMLPurifier_Config::createDefault();
@@ -56,7 +93,7 @@ function parse_url_content(&$a) {
        $dom = @HTML5_Parser::parse($s);
 
        if(! $dom) {
-               echo sprintf($template,$url,$url,'');
+               echo sprintf($template,$url,$url,'') . $str_tags;
                killme();
        }
 
@@ -69,48 +106,51 @@ function parse_url_content(&$a) {
                }
        }
 
-       $divs = $dom->getElementsByTagName('div');
-       if($divs) {
-               foreach($divs as $div) {
-                       $class = $div->getAttribute('class');
-                       if($class && (stristr($class,'article') || stristr($class,'content'))) {
-                               $items = $div->getElementsByTagName('p');
-                               if($items) {
-                                       foreach($items as $item) {
-                                               $text = $item->textContent;
-                                               if(stristr($text,'<script')) {
-                                                       $text = '';
-                                                       continue;
-                                               }
-                                               $text = strip_tags($text);
-                                               if(strlen($text) < 100) {
-                                                       $text = '';
-                                                       continue;
+
+       if(! $text) {
+               $divs = $dom->getElementsByTagName('div');
+               if($divs) {
+                       foreach($divs as $div) {
+                               $class = $div->getAttribute('class');
+                               if($class && (stristr($class,'article') || stristr($class,'content'))) {
+                                       $items = $div->getElementsByTagName('p');
+                                       if($items) {
+                                               foreach($items as $item) {
+                                                       $text = $item->textContent;
+                                                       if(stristr($text,'<script')) {
+                                                               $text = '';
+                                                               continue;
+                                                       }
+                                                       $text = strip_tags($text);
+                                                       if(strlen($text) < 100) {
+                                                               $text = '';
+                                                               continue;
+                                                       }
+                                                       $text = substr($text,0,250) . '...' ;
+                                                       break;
                                                }
-                                               $text = substr($text,0,250) . '...' ;
-                                               break;
                                        }
                                }
+                               if($text)
+                                       break;
                        }
-                       if($text)
-                               break;
                }
-       }
 
-       if(! $text) {
-               $items = $dom->getElementsByTagName('p');
-               if($items) {
-                       foreach($items as $item) {
-                               $text = $item->textContent;
-                               if(stristr($text,'<script'))
-                                       continue;
-                               $text = strip_tags($text);
-                               if(strlen($text) < 100) {
-                                       $text = '';
-                                       continue;
+               if(! $text) {
+                       $items = $dom->getElementsByTagName('p');
+                       if($items) {
+                               foreach($items as $item) {
+                                       $text = $item->textContent;
+                                       if(stristr($text,'<script'))
+                                               continue;
+                                       $text = strip_tags($text);
+                                       if(strlen($text) < 100) {
+                                               $text = '';
+                                               continue;
+                                       }
+                                       $text = substr($text,0,250) . '...' ;
+                                       break;
                                }
-                               $text = substr($text,0,250) . '...' ;
-                               break;
                        }
                }
        }
@@ -119,6 +159,12 @@ function parse_url_content(&$a) {
                $text = '<br /><br /><blockquote>' . $text . '</blockquote><br />';
        }
 
-       echo sprintf($template,$url,($title) ? $title : $url,$text);
+       $title = str_replace(array("\r","\n"),array('',''),$title);
+
+       $result = sprintf($template,$url,($title) ? $title : $url,$text) . $str_tags;
+
+       logger('parse_url: returns: ' . $result); 
+
+       echo $result;
        killme();
 }
index 3994620f89cfcd1e3fb1253cdfa7bb9bf1290097..a5a5a1dc174fb05ecb1a7e9bc64b527aed58b5eb 100644 (file)
@@ -128,7 +128,14 @@ function photo_init(&$a) {
                }
        }
 
+       if(function_exists('header_remove')) {
+               header_remove('Pragma');
+               header_remove('pragma');
+       }
+
        header("Content-type: image/jpeg");
+       header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT");
+       header("Cache-Control: max-age=" . (3600*24));
        echo $data;
        killme();
        // NOTREACHED
index cb13b760364e72df276db5c3db5dc8eeeef0e074..1321af1920408ab32edb1f9da28798f74d53edc5 100644 (file)
@@ -33,13 +33,18 @@ function photos_init(&$a) {
                if(count($albums)) {
                        $a->data['albums'] = $albums;
 
-                       $o .= '<h4><a href="' . $a->get_baseurl() . '/profile/' . $a->data['user']['nickname'] . '">' . $a->data['user']['username'] . '</a></h4>';
-                       $o .= '<h4>' . '<a href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '">' . t('Photo Albums') . '</a></h4>';
-               
+                       $o .= '<div class="vcard">';
+                       $o .= '<div class="fn">' . $a->data['user']['username'] . '</div>';
+                       $o .= '<div id="profile-photo-wrapper"><img class="photo" style="width: 175px; height: 175px;" src="' . $a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg" alt="' . $a->data['user']['username'] . '" /></div>';
+                       $o .= '</div>';
+                       
+                       $o .= '<div id="side-bar-photos-albums" class="widget">';
+                       $o .= '<h3>' . '<a href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '">' . t('Photo Albums') . '</a></h4>';
+                                       
                        $o .= '<ul>';
                        foreach($albums as $album) {
 
-                               // don't show contact photos. We once trasnlated this name, but then you could still access it under
+                               // don't show contact photos. We once translated this name, but then you could still access it under
                                // a different language setting. Now we store the name in English and check in English (and translated for legacy albums).
 
                                if((! strlen($album['album'])) || ($album['album'] === 'Contact Photos') || ($album['album'] === t('Contact Photos')))
@@ -87,15 +92,11 @@ EOT;
 
 function photos_post(&$a) {
 
-       logger('mod/photos.php: photos_post(): begin' , 'LOGGER_DEBUG');
+       logger('mod-photos: photos_post(): begin' , 'LOGGER_DEBUG');
 
-       foreach($_REQUEST AS $key => $val) {
-               logger('mod/photos.php: photos_post(): $_REQUEST key: ' . $key . ' val: ' . $val , 'LOGGER_DEBUG');
-       }
 
-       foreach($_FILES AS $key => $val) {
-               logger('mod/photos.php: photos_post(): $_FILES key: ' . $key . ' val: ' . $val , 'LOGGER_DEBUG');
-       }
+       logger('mod_photos: REQUEST ' . print_r($_REQUEST,true), LOGGER_DATA);
+       logger('mod_photos: FILES '   . print_r($_FILES,true), LOGGER_DATA);
 
        $can_post  = false;
        $visitor   = 0;
@@ -414,7 +415,8 @@ function photos_post(&$a) {
                                                                );
                                                        }
                                                        else {
-                                                               $r = q("SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1",
+                                                               $r = q("SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
+                                                                       dbesc($name),
                                                                        dbesc($name),
                                                                        intval($page_owner_uid)
                                                                );
@@ -579,6 +581,9 @@ function photos_post(&$a) {
        else
                $visible = 0;
 
+       if(intval($_REQUEST['not_visible']))
+               $visible = 0;
+
        $str_group_allow   = perms2str(((is_array($_REQUEST['group_allow']))   ? $_REQUEST['group_allow']   : explode(',',$_REQUEST['group_allow'])));
        $str_contact_allow = perms2str(((is_array($_REQUEST['contact_allow'])) ? $_REQUEST['contact_allow'] : explode(',',$_REQUEST['contact_allow'])));
        $str_group_deny    = perms2str(((is_array($_REQUEST['group_deny']))    ? $_REQUEST['group_deny']    : explode(',',$_REQUEST['group_deny'])));
@@ -886,9 +891,10 @@ function photos_content(&$a) {
                        '$nickname' => $a->data['user']['nickname'],
                        '$newalbum' => t('New album name: '),
                        '$existalbumtext' => t('or existing album name: '),
-                       '$albumselect' => $albumselect,
+                       '$nosharetext' => t('Do not show a status post for this upload'),
+                       '$albumselect' => template_escape($albumselect),
                        '$permissions' => t('Permissions'),
-                       '$aclselect' => (($visitor) ? '' : populate_acl($a->user, $celeb)),
+                       '$aclselect' => (($visitor) ? '' : template_escape(populate_acl($a->user, $celeb))),
                        '$uploader' => $ret['addon_text'],
                        '$default' => (($ret['default_upload']) ? $default_upload : ''),
                        '$uploadurl' => $ret['post_url']
@@ -929,7 +935,7 @@ function photos_content(&$a) {
                                        $o .= replace_macros($edit_tpl,array(
                                                '$nametext' => t('New album name: '),
                                                '$nickname' => $a->data['user']['nickname'],
-                                               '$album' => $album,
+                                               '$album' => template_escape($album),
                                                '$hexalbum' => bin2hex($album),
                                                '$submit' => t('Submit'),
                                                '$dropsubmit' => t('Delete Album')
@@ -954,8 +960,8 @@ function photos_content(&$a) {
                                        '$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
                                        '$phototitle' => t('View Photo'),
                                        '$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.jpg',
-                                       '$imgalt' => $rr['filename'],
-                                       '$desc'=> $rr['desc']
+                                       '$imgalt' => template_escape($rr['filename']),
+                                       '$desc'=> template_escape($rr['desc'])
                                ));
 
                }
@@ -981,7 +987,15 @@ function photos_content(&$a) {
                );
 
                if(! count($ph)) {
-                       notice( t('Photo not available') . EOL );
+                       $ph = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' 
+                               LIMIT 1",
+                               intval($owner_uid),
+                               dbesc($datum)
+                       );
+                       if(count($ph)) 
+                               notice( t('Permission denied. Access to this item may be restricted.'));
+                       else
+                               notice( t('Photo not available') . EOL );
                        return;
                }
 
@@ -1006,8 +1020,9 @@ function photos_content(&$a) {
                                        break;
                                }
                        }
-                       $prevlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] ;
-                       $nextlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] ;
+                       $edit_suffix = ((($cmd === 'edit') && ($can_post)) ? '/edit' : '');
+                       $prevlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix;
+                       $nextlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix;
                }
 
 
@@ -1030,7 +1045,7 @@ function photos_content(&$a) {
  
                if($can_post && ($ph[0]['uid'] == $owner_uid)) {
                        $tools = array(
-                               'edit'  => array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit', t('Edit photo')),
+                               'edit'  => array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . (($cmd === 'edit') ? '' : '/edit'), (($cmd === 'edit') ? t('View photo') : t('Edit photo'))),
                                'profile'=>array($a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'], t('Use as profile photo')),
                        );
 
@@ -1129,16 +1144,16 @@ function photos_content(&$a) {
                        $edit_tpl = get_markup_template('photo_edit.tpl');
                        $edit = replace_macros($edit_tpl, array(
                                '$id' => $ph[0]['id'],
-                               '$album' => $ph[0]['album'],
+                               '$album' => template_escape($ph[0]['album']),
                                '$newalbum' => t('New album name'), 
                                '$nickname' => $a->data['user']['nickname'],
                                '$resource_id' => $ph[0]['resource-id'],
                                '$capt_label' => t('Caption'),
-                               '$caption' => $ph[0]['desc'],
+                               '$caption' => template_escape($ph[0]['desc']),
                                '$tag_label' => t('Add a Tag'),
                                '$tags' => $link_item['tag'],
                                '$permissions' => t('Permissions'),
-                               '$aclselect' => populate_acl($ph[0]),
+                               '$aclselect' => template_escape(populate_acl($ph[0])),
                                '$help_tags' => t('Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'),
                                '$item_id' => ((count($linked_items)) ? $link_item['id'] : 0),
                                '$submit' => t('Submit'),
@@ -1284,11 +1299,11 @@ function photos_content(&$a) {
                                        $comments .= replace_macros($template,array(
                                                '$id' => $item['item_id'],
                                                '$profile_url' => $profile_link,
-                                               '$name' => $profile_name,
+                                               '$name' => template_escape($profile_name),
                                                '$thumb' => $profile_avatar,
                                                '$sparkle' => $sparkle,
-                                               '$title' => $item['title'],
-                                               '$body' => bbcode($item['body']),
+                                               '$title' => template_escape($item['title']),
+                                               '$body' => template_escape(bbcode($item['body'])),
                                                '$ago' => relative_date($item['created']),
                                                '$indent' => (($item['parent'] != $item['item_id']) ? ' comment' : ''),
                                                '$drop' => $drop,
@@ -1303,18 +1318,18 @@ function photos_content(&$a) {
                $photo_tpl = get_markup_template('photo_view.tpl');
                $o .= replace_macros($photo_tpl, array(
                        '$id' => $ph[0]['id'],
-                       '$album' => array($album_link,$ph[0]['album']),
+                       '$album' => array($album_link,template_escape($ph[0]['album'])),
                        '$tools' => $tools,
                        '$lock' => $lock,
                        '$photo' => $photo,
                        '$prevlink' => $prevlink,
                        '$nextlink' => $nextlink,
                        '$desc' => $ph[0]['desc'],
-                       '$tags' => $tags,
+                       '$tags' => template_escape($tags),
                        '$edit' => $edit,       
                        '$likebuttons' => $likebuttons,
-                       '$like' => $like,
-                       '$dislike' => $dislike,
+                       '$like' => template_escape($like),
+                       '$dislike' => template_escape($dislike),
                        '$comments' => $comments,
                        '$paginate' => $paginate,
                ));
@@ -1362,9 +1377,9 @@ function photos_content(&$a) {
                                '$phototitle' => t('View Photo'),
                                '$imgsrc'     => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.jpg',
                                '$albumlink'  => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']),
-                               '$albumname'  => $rr['album'],
+                               '$albumname'  => template_escape($rr['album']),
                                '$albumalt'   => t('View Album'),
-                               '$imgalt'     => $rr['filename']
+                               '$imgalt'     => template_escape($rr['filename'])
                        ));
 
                }
index 924f9ff76bff228c0db16ff41e91c34d2c59d25c..544a42e1447cc5d057b5e8dede2fa13e9b6fa3d8 100644 (file)
 <?php
-
+require_once("include/datetime.php");
 
 
 function ping_init(&$a) {
 
-       if(! local_user())
-               xml_status(0);
-
-       $r = q("SELECT COUNT(*) AS `total` FROM `item` 
-               WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `wall` = 0 ",
-               intval(local_user())
-       );
-       $network = $r[0]['total'];
-
-       $r = q("SELECT COUNT(*) AS `total` FROM `item` 
-               WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `wall` = 1 ",
-               intval(local_user())
-       );
-       $home = $r[0]['total'];
-
-       $r = q("SELECT COUNT(*) AS `total` FROM `intro` 
-               WHERE `uid` = %d  AND `blocked` = 0 AND `ignore` = 0 ",
-               intval(local_user())
-       );
-       $intro = $r[0]['total'];
-
-       $myurl = $a->get_baseurl() . '/profile/' . $a->user['nickname'] ;
-       $r = q("SELECT COUNT(*) AS `total` FROM `mail`
-               WHERE `uid` = %d AND `seen` = 0 AND `from-url` != '%s' ",
-               intval(local_user()),
-               dbesc($myurl)
-       );
-       $mail = $r[0]['total'];
-
-       if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){
-               $r = q("SELECT COUNT(*) AS `total` FROM `register`");
-               $register = $r[0]['total'];
-       } else {
-               $register = "0";
+       header("Content-type: text/xml");
+       echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
+               <result>";
+
+       if(local_user()){
+
+               
+               $comments = array();
+               $likes = array();
+               $dislikes = array();
+               $friends = array();
+               
+               $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, 
+                               `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`, 
+                               `pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink` 
+                               FROM `item` INNER JOIN `item` as `pitem` ON  `pitem`.`id`=`item`.`parent`
+                               WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
+                                `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0",
+                       intval(local_user())
+               );
+               
+               $network = count($r);
+               foreach ($r as $it) {
+                       switch($it['verb']){
+                               case ACTIVITY_LIKE:
+                                       $likes[] = $it;
+                                       break;
+                               case ACTIVITY_DISLIKE:
+                                       $dislikes[] = $it;
+                                       break;
+                               case ACTIVITY_FRIEND:
+                                       $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
+                                       $obj = parse_xml_string($xmlhead.$it['object']);
+                                       $it['fname'] = $obj->title;                     
+                                       $friends[] = $it;
+                                       break;
+                               default:
+                                       if ($it['parent']!=$it['id']) $comments[] = $it;
+                       }
+               }
+
+
+               $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, 
+                               `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`, 
+                               `pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink` 
+                               FROM `item` INNER JOIN `item` as `pitem` ON  `pitem`.`id`=`item`.`parent`
+                               WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
+                                `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1",
+                       intval(local_user())
+               );      
+               $home = count($r);
+               foreach ($r as $it) {
+                       switch($it['verb']){
+                               case ACTIVITY_LIKE:
+                                       $likes[] = $it;
+                                       break;
+                               case ACTIVITY_DISLIKE:
+                                       $dislikes[] = $it;
+                                       break;
+                               case ACTIVITY_FRIEND:
+                                       $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
+                                       $obj = parse_xml_string($xmlhead.$it['object']);
+                                       $it['fname'] = $obj->title;
+                                       $friends[] = $it;
+                                       break;
+                               default:
+                                       if ($it['parent']!=$it['id']) $comments[] = $it;
+                       }
+               }
+
+
+               $intros1 = q("SELECT COUNT(`intro`.`id`) AS `total`, `intro`.`id`, `intro`.`datetime`, 
+                       `fcontact`.`name`, `fcontact`.`url`, `fcontact`.`photo` 
+                       FROM `intro` LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id`
+                       WHERE `intro`.`uid` = %d  AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`fid`!=0",
+                       intval(local_user())
+               );
+               $intros2 = q("SELECT COUNT(`intro`.`id`) AS `total`, `intro`.`id`, `intro`.`datetime`, 
+                       `contact`.`name`, `contact`.`url`, `contact`.`photo` 
+                       FROM `intro` LEFT JOIN `contact` ON `intro`.`contact-id` = `contact`.`id`
+                       WHERE `intro`.`uid` = %d  AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`contact-id`!=0",
+                       intval(local_user())
+               );
+               
+               $intro = $intros1[0]['total'] + $intros2[0]['total'];
+               if ($intros1[0]['total']==0) $intros1=Array();
+               if ($intros2[0]['total']==0) $intros2=Array();
+               $intros = $intros1+$intros2;
+
+
+
+               $myurl = $a->get_baseurl() . '/profile/' . $a->user['nickname'] ;
+               $mails = q("SELECT *,  COUNT(*) AS `total` FROM `mail`
+                       WHERE `uid` = %d AND `seen` = 0 AND `from-url` != '%s' ",
+                       intval(local_user()),
+                       dbesc($myurl)
+               );
+               $mail = $mails[0]['total'];
+               
+               if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){
+                       $regs = q("SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) as `total` FROM `contact` RIGHT JOIN `register` ON `register`.`uid`=`contact`.`uid` WHERE `contact`.`self`=1");
+                       $register = $regs[0]['total'];
+               } else {
+                       $register = "0";
+               }
+
+
+               function xmlize($href, $name, $url, $photo, $date, $message){
+                       $notsxml = '<note href="%s" name="%s" url="%s" photo="%s" date="%s">%s</note>';
+                       return sprintf ( $notsxml,
+                                       xmlify($href), xmlify($name), xmlify($url), xmlify($photo), xmlify($date), xmlify($message)
+                               );
+               }
+               
+
+               echo "<intro>$intro</intro>
+                               <mail>$mail</mail>
+                               <net>$network</net>
+                               <home>$home</home>";
+               if ($register!=0) echo "<register>$register</register>";
+               
+               $tot = $mail+$intro+$register+count($comments)+count($likes)+count($dislikes)+count($friends);
+               
+               echo '  <notif count="'.$tot.'">';
+               if ($intro>0){
+                       foreach ($intros as $i) { 
+                               echo xmlize( $a->get_baseurl().'/notifications/'.$i['id'], $i['name'], $i['url'], $i['photo'], relative_date($i['datetime']), t("{0} wants to be your friend") );
+                       };
+               }
+               if ($mail>0){
+                       foreach ($mails as $i) { 
+                               echo xmlize( $a->get_baseurl().'/message/'.$i['id'], $i['from-name'], $i['from-url'], $i['from-photo'], relative_date($i['created']), t("{0} sent you a message") );
+                       };
+               }
+               if ($register>0){
+                       foreach ($regs as $i) { 
+                               echo xmlize( $a->get_baseurl().'/admin/users/', $i['name'], $i['url'], $i['micro'], relative_date($i['created']), t("{0} requested registration") );
+                       };
+               }
+
+               if (count($comments)){
+                       foreach ($comments as $i) {
+                               echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} commented %s's post"), $i['pname'] ) );
+                       };
+               }
+               if (count($likes)){
+                       foreach ($likes as $i) {
+                               echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} like %s's post"), $i['pname'] ) );
+                       };
+               }
+               if (count($dislikes)){
+                       foreach ($dislikes as $i) {
+                               echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} dislike %s's post"), $i['pname'] ) );
+                       };
+               }
+               if (count($friends)){
+                       foreach ($friends as $i) {
+                               echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} is now friend with %s"), $i['fname'] ) );
+                       };
+               }
+
+
+               echo "  </notif>";
        }
+       echo " <sysmsgs>";
 
+               if(x($_SESSION,'sysmsg')){
+                       foreach ($_SESSION['sysmsg'] as $m){
+                               echo "<notice>".($m)."</notice>";
+                       }
+                       //$_SESSION['sysmsg']=array();
+                       unset($_SESSION['sysmsg']);
+               }
+               if(x($_SESSION,'sysmsg_info')){
+                       foreach ($_SESSION['sysmsg_info'] as $m){
+                               echo "<info>".($m)."</info>";
+                       }
+                       //$_SESSION['sysmsg_info']=array();
+                       unset($_SESSION['sysmsg_info']);
+               }
        
-       header("Content-type: text/xml");
-       echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<result><intro>$intro</intro><mail>$mail</mail><net>$network</net><home>$home</home><register>$register</register></result>\r\n";
+       echo " </sysmsgs>";
+       echo"</result>
+       ";
 
        killme();
 }
diff --git a/mod/post.php b/mod/post.php
new file mode 100644 (file)
index 0000000..4a7e33b
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zot endpoint
+ */
+
+
+require_once('include/salmon.php');
+require_once('include/crypto.php');
+// not yet ready for prime time
+//require_once('include/zot.php');
+       
+function post_post(&$a) {
+
+       $bulk_delivery = false;
+
+       if($a->argc == 1) {
+               $bulk_delivery = true;
+       }
+       else {
+               $nickname = $a->argv[2];
+               $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' 
+                               AND `account_expired` = 0 LIMIT 1",
+                       dbesc($nickname)
+               );
+               if(! count($r))
+                       http_status_exit(500);
+
+               $importer = $r[0];
+       }
+
+       $xml = file_get_contents('php://input');
+
+       logger('mod-post: new zot: ' . $xml, LOGGER_DATA);
+
+       if(! $xml)
+               http_status_exit(500);
+
+       $msg = zot_decode($importer,$xml);
+
+       logger('mod-post: decoded msg: ' . print_r($msg,true), LOGGER_DATA);
+
+       if(! is_array($msg))
+               http_status_exit(500);
+
+       $ret = 0;
+       $ret = zot_incoming($bulk_delivery, $importer,$msg);
+       http_status_exit(($ret) ? $ret : 200);
+       // NOTREACHED
+}
+
index 2dd5df75855079153c9bb47e5b22736baa50b510..50bbdd46e46e8c7c1ec46999b86730efb532124d 100644 (file)
@@ -70,8 +70,9 @@ function profile_content(&$a, $update = 0) {
                $a->profile['profile_uid'] = $update;
        }
        else {
-               if($a->profile['profile_uid'] == local_user())          
-                       $o .= '<script> $(document).ready(function() { $(\'#nav-home-link\').addClass(\'nav-selected\'); });</script>';
+               if($a->profile['profile_uid'] == local_user()) {
+                       nav_set_selected('home');
+               }
        }
 
        $contact = null;
@@ -238,7 +239,6 @@ function profile_content(&$a, $update = 0) {
 
        if(! $update) {
                $o .= paginate($a);
-               $o .= cc_license();
        }
 
        return $o;
index 8dc8966532d90e80309cd650403578144b085aa5..4de3aaa3e0c255e007d1b7590e9ef9ae3ecd788e 100644 (file)
@@ -155,9 +155,15 @@ function profile_photo_content(&$a) {
                        notice( t('Permission denied.') . EOL );
                        return;
                }
+               $havescale = false;
+               foreach($r as $rr) {
+                       if($rr['scale'] == 5)
+                               $havescale = true;
+               }
+
                // set an already uloaded photo as profile photo
                // if photo is in 'Profile Photos', change it in db
-               if ($r[0]['album']== t('Profile Photos')){
+               if (($r[0]['album']== t('Profile Photos')) && ($havescale)){
                        $r=q("UPDATE `photo` SET `profile`=0 WHERE `profile`=1 AND `uid`=%d",
                                intval(local_user()));
                        
index b269fa30c716f9fd68abf30f629aa4fb8fdf588a..f5f335c7e4e9b3c5fee9324fd3c2eabbb9485430 100644 (file)
@@ -220,7 +220,7 @@ function profiles_post(&$a) {
 function profiles_content(&$a) {
 
        $o = '';
-       $o .= '<script> $(document).ready(function() { $(\'#nav-profiles-link\').addClass(\'nav-selected\'); });</script>';
+       nav_set_selected('profiles');
 
        if(! local_user()) {
                notice( t('Permission denied.') . EOL);
@@ -359,7 +359,7 @@ function profiles_content(&$a) {
 
 
                $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl()));
-               $a->page['htmlhead'] .= "<script type=\"text/javascript\" src=\"include/country.js\" ></script>";
+               $a->page['htmlhead'] .= "<script type=\"text/javascript\" src=\"js/country.js\" ></script>";
 
                $f = get_config('system','birthday_input_format');
                if(! $f)
index 4dff5d531ab27a9450ebe2b37c6c37a7645ad0e1..b2f0069271277d76fa334a9f8fdc1d3f6809f891 100644 (file)
@@ -44,7 +44,7 @@ function pubsub_init(&$a) {
 
                $subscribe = (($hub_mode === 'subscribe') ? 1 : 0);
 
-               $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1",
+               $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1",
                        dbesc($nick)
                );
                if(! count($r))
@@ -99,7 +99,7 @@ function pubsub_post(&$a) {
        $nick       = (($a->argc > 1) ? notags(trim($a->argv[1])) : '');
        $contact_id = (($a->argc > 2) ? intval($a->argv[2])       : 0 );
 
-       $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1",
+       $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1",
                dbesc($nick)
        );
        if(! count($r))
index 34128518b55014e287f3f5fc9b4f398b8625af8a..950bf0bd388e80ed20fd69541bd46b7e5765c99e 100644 (file)
@@ -12,18 +12,26 @@ require_once('include/diaspora.php');
        
 function receive_post(&$a) {
 
-       if($a->argc != 3 || $a->argv[1] !== 'users')
-               http_status_exit(500);
+       $public = false;
 
-       $guid = $a->argv[2];
+       if(($a->argc == 2) && ($a->argv[1] === 'public')) {
+               $public = true;
+       }
+       else {
 
-       $r = q("SELECT * FROM `user` WHERE `guid` = '%s' LIMIT 1",
-               dbesc($guid)
-       );
-       if(! count($r))
-               http_status_exit(500);
+               if($a->argc != 3 || $a->argv[1] !== 'users')
+                       http_status_exit(500);
+
+               $guid = $a->argv[2];
+
+               $r = q("SELECT * FROM `user` WHERE `guid` = '%s' AND `account_expired` = 0 LIMIT 1",
+                       dbesc($guid)
+               );
+               if(! count($r))
+                       http_status_exit(500);
 
-       $importer = $r[0];
+               $importer = $r[0];
+       }
 
        // It is an application/x-www-form-urlencoded
 
@@ -41,9 +49,13 @@ function receive_post(&$a) {
        if(! is_array($msg))
                http_status_exit(500);
 
-       diaspora_dispatch($importer,$msg);
+       $ret = 0;
+       if($public)
+               diaspora_dispatch_public($msg);
+       else
+               $ret = diaspora_dispatch($importer,$msg);
 
-       http_status_exit(200);
+       http_status_exit(($ret) ? $ret : 200);
        // NOTREACHED
 }
 
index 5fceebd4bd87c006e2e5afeb60f7cfdb5c3d1379..85e1f9faa098b6af371e408e4f3b8677982acbfa 100644 (file)
@@ -501,8 +501,7 @@ function register_content(&$a) {
        }
 
 
-       $license = cc_license();
-
+       $license = '';
 
        $o = get_markup_template("register.tpl");
        $o = replace_macros($o, array(
index 0264e820db2a03f224c512928170d2868cfce9b3..6172d17a1ddda0e7c0816fc2cdfbf945f9becbb4 100644 (file)
@@ -25,12 +25,12 @@ function salmon_post(&$a) {
 
        $xml = file_get_contents('php://input');
 
-       logger('mod-salmon: new salmon ' . $xml);
+       logger('mod-salmon: new salmon ' . $xml, LOGGER_DATA);
 
        $nick       = (($a->argc > 1) ? notags(trim($a->argv[1])) : '');
        $mentions   = (($a->argc > 2 && $a->argv[2] === 'mention') ? true : false);
 
-       $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1",
+       $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1",
                dbesc($nick)
        );
        if(! count($r))
index 88ff9bbb73d57db751f067f263cedb6fe317a6f9..034794e179db10d2137967a270fdf3778647ad28 100644 (file)
@@ -1,5 +1,60 @@
 <?php
 
+function search_saved_searches() {
+
+       $o = '';
+
+       $r = q("select `term` from `search` WHERE `uid` = %d",
+               intval(local_user())
+       );
+
+       if(count($r)) {
+               $o .= '<div id="saved-search-list" class="widget">';
+               $o .= '<h3>' . t('Saved Searches') . '</h3>' . "\r\n";
+               $o .= '<ul id="saved-search-ul">' . "\r\n";
+               foreach($r as $rr) {
+                       $o .= '<li class="saved-search-li clear"><a href="search/?f=&remove=1&search=' . $rr['term'] . '" class="icon drophide savedsearchdrop" title="' . t('Remove term') . '" onclick="return confirmDelete();" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> <a href="search/?f=&search=' . $rr['term'] . '" class="savedsearchterm" >' . $rr['term'] . '</a></li>' . "\r\n";
+               }
+               $o .= '</ul></div>' . "\r\n";
+       }               
+
+       return $o;
+
+}
+
+
+function search_init(&$a) {
+
+       $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : '');
+
+       if(local_user()) {
+               if(x($_GET,'save') && $search) {
+                       $r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1",
+                               intval(local_user()),
+                               dbesc($search)
+                       );
+                       if(! count($r)) {
+                               q("insert into `search` ( `uid`,`term` ) values ( %d, '%s') ",
+                                       intval(local_user()),
+                                       dbesc($search)
+                               );
+                       }
+               }
+               if(x($_GET,'remove') && $search) {
+                       q("delete from `search` where `uid` = %d and `term` = '%s' limit 1",
+                               intval(local_user()),
+                               dbesc($search)
+                       );
+               }
+
+               $a->page['aside'] .= search_saved_searches();
+
+       }
+
+
+}
+
+
 
 function search_post(&$a) {
        if(x($_POST,'search'))
@@ -13,6 +68,8 @@ function search_content(&$a) {
                notice( t('Public access denied.') . EOL);
                return;
        }
+       
+       nav_set_selected('search');
 
        require_once("include/bbcode.php");
        require_once('include/security.php');
@@ -30,7 +87,7 @@ function search_content(&$a) {
        else
                $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : '');
 
-       $o .= search($search);
+       $o .= search($search,'search-box','/search',((local_user()) ? true : false));
 
        if(! $search)
                return $o;
@@ -86,12 +143,11 @@ function search_content(&$a) {
 
        );
 
-
+       $o .= '<h2>Search results for: ' . $search . '</h2>';
 
        $o .= conversation($a,$r,'search',false);
 
        $o .= paginate($a);
-       $o .= cc_license();
 
        return $o;
 }
index 1b4098de8f6c1c6b929bfd00785df79d1a63b4b7..44ebdd77b1eb73d048f9d2bfe649011ddd73034b 100644 (file)
@@ -299,7 +299,7 @@ if(! function_exists('settings_content')) {
 function settings_content(&$a) {
 
        $o = '';
-       $o .= '<script> $(document).ready(function() { $(\'#nav-settings-link\').addClass(\'nav-selected\'); });</script>';
+       nav_set_selected('settings');
 
        if(! local_user()) {
                notice( t('Permission denied.') . EOL );
diff --git a/mod/tagmatch.php b/mod/tagmatch.php
new file mode 100644 (file)
index 0000000..8023fa4
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+
+function tagmatch_content(&$a) {
+
+       $search = notags(trim($_REQUEST['search']));
+       
+       $o = '';
+
+       $o .= '<h2>' . t('Tag Match') . ' - ' . $search . '</h2>';
+       
+       if($search) {
+
+               $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : '');
+                       
+               if(strlen(get_config('system','directory_submit_url')))
+                       $x = fetch_url('http://dir.friendika.com/lsearch?f=' . $p .  '&search=' . urlencode($search));
+
+//TODO fallback local search if global dir not available.
+//             else
+//                     $x = post_url($a->get_baseurl() . '/lsearch', $params);
+
+               $j = json_decode($x);
+
+               if($j->total) {
+                       $a->set_pager_total($j->total);
+                       $a->set_pager_itemspage($j->items_page);
+               }
+
+               if(count($j->results)) {
+                       
+                       $tpl = get_markup_template('match.tpl');
+                       foreach($j->results as $jj) {
+                               
+                               $o .= replace_macros($tpl,array(
+                                       '$url' => $jj->url,
+                                       '$name' => $jj->name,
+                                       '$photo' => $jj->photo,
+                                       '$tags' => $jj->tags
+                               ));
+                       }
+               }
+               else {
+                       info( t('No matches') . EOL);
+               }               
+
+       }
+
+       $o .= '<div class="clear"></div>';
+       $o .= paginate($a);
+       return $o;
+}
diff --git a/mod/update_notes.php b/mod/update_notes.php
new file mode 100644 (file)
index 0000000..90cc5bc
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Module: update_profile
+ * Purpose: AJAX synchronisation of profile page
+ *
+ */
+
+
+require_once('mod/notes.php');
+
+function update_notes_content(&$a) {
+
+       $profile_uid = intval($_GET['p']);
+
+       header("Content-type: text/html");
+       echo "<!DOCTYPE html><html><body>\r\n";
+
+       /**
+        * We can remove this hack once Internet Explorer recognises HTML5 natively
+        */
+
+       echo (($_GET['msie'] == 1) ? '<div>' : '<section>');
+
+       /**
+        *
+        * Grab the page inner contents by calling the content function from the profile module directly, 
+        * but move any image src attributes to another attribute name. This is because 
+        * some browsers will prefetch all the images for the page even if we don't need them.
+        * The only ones we need to fetch are those for new page additions, which we'll discover
+        * on the client side and then swap the image back.
+        *
+        */
+
+       $text = notes_content($a,$profile_uid);
+
+       $pattern = "/<img([^>]*) src=\"([^\"]*)\"/";
+       $replace = "<img\${1} dst=\"\${2}\"";
+       $text = preg_replace($pattern, $replace, $text);
+
+       $replace = '<br />' . t('[Embedded content - reload page to view]') . '<br />';
+       $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
+       $text = preg_replace($pattern, $replace, $text);
+       $pattern = "/<\s*video[^>]*>(.*?)<\s*\/\s*video>/i";
+       $text = preg_replace($pattern, $replace, $text);
+       $pattern = "/<\s*embed[^>]*>(.*?)<\s*\/\s*embed>/i";
+       $text = preg_replace($pattern, $replace, $text);
+    $pattern = "/<\s*iframe[^>]*>(.*?)<\s*\/\s*iframe>/i";
+    $text = preg_replace($pattern, $replace, $text);
+
+       /**
+        * reportedly some versions of MSIE don't handle tabs in XMLHttpRequest documents very well
+        */
+
+       echo str_replace("\t",'       ',$text);
+       echo (($_GET['msie'] == 1) ? '</div>' : '</section>');
+       echo "</body></html>\r\n";
+       killme();
+
+}
\ No newline at end of file
index ef6554df39809118c13f1329296726cd9d8842ed..a66ed0d059c6d36970d0f77ff2796541e68a301a 100644 (file)
@@ -61,7 +61,7 @@ function wall_attach_post(&$a) {
 
        $filedata = @file_get_contents($src);
        $mimetype = z_mime_content_type($filename);
-       if((! strlen($mimetype)) || ($mimetype === 'application/octet-stream') && function_exists('mime_content_type'))
+       if(((! strlen($mimetype)) || ($mimetype === 'application/octet-stream')) && function_exists('mime_content_type'))
                $mimetype = mime_content_type($filename);
        $hash = random_string();
        $created = datetime_convert();
index fcec74336e4eeda0e27726de34263530d03e9a80..a416a2cf3f3e99a3f9ca49be8db58b5cf277b32d 100644 (file)
@@ -41,15 +41,18 @@ function xrd_init(&$a) {
        $tpl = file_get_contents('view/xrd_person.tpl');
 
        $o = replace_macros($tpl, array(
+               '$nick'        => $r[0]['nickname'],
                '$accturi'     => $uri,
                '$profile_url' => $a->get_baseurl() . '/profile/'       . $r[0]['nickname'],
                '$hcard_url'   => $a->get_baseurl() . '/hcard/'         . $r[0]['nickname'],
                '$atom'        => $a->get_baseurl() . '/dfrn_poll/'     . $r[0]['nickname'],
+               '$zot_post'    => $a->get_baseurl() . '/post/'          . $r[0]['nickname'],
                '$photo'       => $a->get_baseurl() . '/photo/profile/' . $r[0]['uid']      . '.jpg',
                '$dspr'        => $dspr,
                '$salmon'      => $a->get_baseurl() . '/salmon/'        . $r[0]['nickname'],
                '$salmen'      => $a->get_baseurl() . '/salmon/'        . $r[0]['nickname'] . '/mention',
-               '$modexp'      => 'data:application/magic-public-key,'  . $salmon_key
+               '$modexp'      => 'data:application/magic-public-key,'  . $salmon_key,
+               '$bigkey'      =>  salmon_key($r[0]['pubkey'])
        ));
 
 
index ef036008fcb4abae39ad19f5b1cf27966b227d3e..723f12c1ac8cc084ec163d83b15d8f6210bd2a23 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define( 'UPDATE_VERSION' , 1082 );
+define( 'UPDATE_VERSION' , 1094 );
 
 /**
  *
@@ -676,8 +676,16 @@ function update_1080() {
 }
 
 function update_1081() {
-       q("ALTER TABLE `photo` ADD `guid` CHAR( 64 ) NOT NULL AFTER `contact`id`,
+       // there was a typo in update 1081 so it was corrected and moved up to 1082
+}
+
+function update_1082() {
+       q("ALTER TABLE `photo` ADD `guid` CHAR( 64 ) NOT NULL AFTER `contact-id`,
                ADD INDEX ( `guid` )  ");
+       // make certain the following code is only executed once
+       $r = q("select `id` from `photo` where `guid` != '' limit 1");
+       if($r && count($r))
+               return;
        $r = q("SELECT distinct(`resource-id`) FROM `photo` WHERE 1 group by `id`");
        if(count($r)) {
                foreach($r as $rr) {
@@ -689,3 +697,93 @@ function update_1081() {
                }
        }
 }
+
+function update_1083() {
+       q("CREATE TABLE IF NOT EXISTS `deliverq` (
+       `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+       `cmd` CHAR( 32 ) NOT NULL ,
+       `item` INT NOT NULL ,
+       `contact` INT NOT NULL
+       ) ENGINE = MYISAM ");
+
+}
+
+function update_1084() {
+       q("ALTER TABLE `contact` ADD `attag` CHAR( 255 ) NOT NULL AFTER `nick` ");
+}
+
+function update_1085() {
+       q("CREATE TABLE IF NOT EXISTS `search` (
+       `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+       `uid` INT NOT NULL ,
+       `term` CHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+       INDEX ( `uid` ),
+       INDEX ( `term` )
+       ) ENGINE = MYISAM ");
+}
+
+function update_1086() {
+       q("ALTER TABLE `item` ADD `bookmark` tinyint(1) NOT NULL DEFAULT '0' AFTER `starred` ");
+}
+
+function update_1087() {
+       q("ALTER TABLE `item` ADD `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `edited` ");
+
+       $r = q("SELECT `id` FROM `item` WHERE `parent` = `id` ");
+       if(count($r)) {
+               foreach($r as $rr) {
+                       $x = q("SELECT max(`created`) AS `cdate` FROM `item` WHERE `parent` = %d LIMIT 1",
+                               intval($rr['id'])
+                       );
+                       if(count($x))
+                               q("UPDATE `item` SET `commented` = '%s' WHERE `id` = %d LIMIT 1",
+                                       dbesc($x[0]['cdate']),
+                                       intval($rr['id'])
+                               );
+               }
+       }
+}
+
+function update_1088() {
+       q("ALTER TABLE `user` ADD `account_expired` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `expire` ,
+               ADD `account_expires_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `account_expired` ,
+               ADD `expire_notification_sent` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `account_expires_on` ");
+}
+
+function update_1089() {
+       q("ALTER TABLE `user` ADD `blocktags` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `hidewall` ");
+}
+
+function update_1090() {
+       q("ALTER TABLE `contact` ADD `batch` char(255) NOT NULL AFTER `prvkey` ");
+
+       q("UPDATE `contact` SET `batch` = concat(substring_index(`url`,'/',3),'/receive/public') WHERE `network` = 'dspr' ");
+
+}
+
+function update_1091() {
+
+       // catch a few stragglers that may have crept in before we added this on remote connects
+       q("UPDATE `contact` SET `batch` = concat(substring_index(`url`,'/',3),'/receive/public') WHERE `network` = 'dspr' AND `batch` = '' ");
+       q("ALTER TABLE `queue` ADD `batch` TINYINT( 1 ) NOT NULL DEFAULT '0' ");
+       q("ALTER TABLE `fcontact` ADD `batch` char(255) NOT NULL AFTER `addr` ");
+
+}
+
+function update_1092() {
+       q("ALTER TABLE `user` ADD INDEX ( `login_date` ) ");
+       q("ALTER TABLE `user` ADD INDEX ( `account_expired` ) ");
+}
+
+function update_1093() {
+       q("CREATE TABLE IF NOT EXISTS `fserver` (
+       `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+       `server` CHAR( 255 ) NOT NULL ,
+       `posturl` CHAR( 255 ) NOT NULL ,
+       `key` TEXT NOT NULL,
+       INDEX ( `server` )
+       ) ENGINE = MYISAM ");
+
+       q("ALTER TABLE `group` ADD `visible` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `uid` ");
+
+}
\ No newline at end of file
index 1a86bb38d07708e26bcf7790cacded8c4889fb7f..c703172af76acedc30ab5d87928af5d8282e9090 100644 (file)
@@ -10,7 +10,14 @@ function po2php_run($argv, $argc) {
        
        $pofile = $argv[1];
        $outfile = dirname($pofile)."/strings.php";
-       
+
+       if(strstr($outfile,'util'))
+               $lang = 'en';
+       else
+               $lang = str_replace('-','_',basename(dirname($pofile)));
+
+
+
        if (!file_exists($pofile)){
                print "Unable to find '$pofile'\n";
                return;
@@ -37,7 +44,7 @@ function po2php_run($argv, $argc) {
                        $match=Array();
                        preg_match("|nplurals=([0-9]*); *plural=(.*)[;\\\\]|", $l, $match);
                        $cond = str_replace('n','$n',$match[2]);
-                       $out .= 'function string_plural_select($n){'."\n";
+                       $out .= 'function string_plural_select_' . $lang . '($n){'."\n";
                        $out .= '       return '.$cond.';'."\n";
                        $out .= '}'."\n";
                }
diff --git a/view/404.tpl b/view/404.tpl
new file mode 100644 (file)
index 0000000..bf4d4e9
--- /dev/null
@@ -0,0 +1 @@
+<h1>$message</h1>
index 63f109d7f76549f1e47e0de3f8f1b5bbfa2300c0..a10c06f4ee4ead8ab603528306695eff6538017d 100644 (file)
 </script>
 <h4><a href="$admurl">Admin</a></h4>
 <ul class='admin linklist'>
-       <li class='admin link $admin.site.2'><a href='$admin.site.0'>$admin.site.1</a></li>
-       <li class='admin link $admin.users.2'><a href='$admin.users.0'>$admin.users.1</a><span id='pending-update' title='$h_pending'></span></li>
-       <li class='admin link $admin.plugins.2'><a href='$admin.plugins.0'>$admin.plugins.1</a></li>
+       <li class='admin link button $admin.site.2'><a href='$admin.site.0'>$admin.site.1</a></li>
+       <li class='admin link button $admin.users.2'><a href='$admin.users.0'>$admin.users.1</a><span id='pending-update' title='$h_pending'></span></li>
+       <li class='admin link button $admin.plugins.2'><a href='$admin.plugins.0'>$admin.plugins.1</a></li>
 </ul>
 
 <ul class='admin linklist'>
-       <li class='admin link $admin.update.2'><a href='$admin.update.0'>$admin.update.1</a></li>
+       <li class='admin link button $admin.update.2'><a href='$admin.update.0'>$admin.update.1</a></li>
 </ul>
 
 
 {{ if $admin.plugins_admin }}<h4>Plugins</h4>{{ endif }}
 <ul class='admin linklist'>
        {{ for $admin.plugins_admin as $l }}
-       <li class='admin link $l.2'><a href='$l.0'>$l.1</a></li>
+       <li class='admin link button $l.2'><a href='$l.0'>$l.1</a></li>
        {{ endfor }}
 </ul>
        
        
 <h4>Logs</h4>
 <ul class='admin linklist'>
-       <li class='admin link $admin.logs.2'><a href='$admin.logs.0'>$admin.logs.1</a></li>
+       <li class='admin link button $admin.logs.2'><a href='$admin.logs.0'>$admin.logs.1</a></li>
 </ul>
 
index 0c15692c2350c1c167f63ecc99398f55403cdc5a..41ecfaf85cf89f5f6e0e7cc302ce73a103e80e8f 100644 (file)
@@ -1,4 +1,4 @@
-<script src="include/jquery.htmlstream.js"></script>
+<script src="js/jquery.htmlstream.js"></script>
 <script>
        /* ajax updater */
        function updateEnd(data){
index 061656df760c8d558fa1c90ba40227785b92d2f0..9a122984546080450117655176e396a4623db839 100644 (file)
@@ -43,6 +43,7 @@
        {{ inc field_input.tpl with $field=$proxy }}{{ endinc }}
        {{ inc field_input.tpl with $field=$proxyuser }}{{ endinc }}
        {{ inc field_input.tpl with $field=$timeout }}{{ endinc }}
+       {{ inc field_input.tpl with $field=$abandon_days }}{{ endinc }}
        
        <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
        
diff --git a/view/apps.tpl b/view/apps.tpl
new file mode 100644 (file)
index 0000000..4c7f8c9
--- /dev/null
@@ -0,0 +1,7 @@
+<h3>$title</h3>
+
+<ul>
+       {{ for $apps as $ap }}
+       <li>$ap</li>
+       {{ endfor }}
+</ul>
index b8d2d1a7298957cc1cd1f13b7d4701ae20ccea5b..377da25c53eacbdea8d741275ffa2134bb6a6b1d 100644 (file)
@@ -4,8 +4,9 @@
 <p id="dfrn-request-intro">
 $page_desc<br />
 <ul id="dfrn-request-networks">
-<li><a href="http://friendika.com" title="$private_net">$friendika</a> <img src="images/lock_icon.gif" alt="$private_net" title="$private_net" /></li>
-<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a> <img src="images/unlock_icon.gif" alt="$public_net" title="$public_net"/></li>
+<li><a href="http://friendika.com" title="$friendika">$friendika</a></li>
+<li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li>
+<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li>
 </ul>
 </p>
 
diff --git a/view/contact_block.tpl b/view/contact_block.tpl
new file mode 100644 (file)
index 0000000..eb46c6c
--- /dev/null
@@ -0,0 +1,11 @@
+<div id="contact-block">
+<h4 class="contact-block-h4">$contacts</h4>
+{{ if $micropro }}
+               <a class="allcontact-link" href="viewcontacts/$nickname">$viewcontacts</a>
+               <div class='contact-block-content'>
+               {{ for $micropro as $m }}
+                       $m
+               {{ endfor }}
+               </div>
+{{ endif }}
+</div>
index 66479210ff9c16d76b5847fd99a95aa0491dc770..248140a6bd0524e909e9487bdfd4e6a9b2849467 100644 (file)
@@ -3,6 +3,8 @@
 
 <div id="contact-edit-banner-name">$name</div>
 
+$nettype
+
 <form action="contacts/$contact_id" method="post" >
 <input type="hidden" name="contact_id" value="$contact_id">
 
                </div>
                <div id="contact-edit-nav-end"></div>
 
-
+               {{ if $poll_enabled }}
                <div id="contact-edit-poll-wrapper">
                        <div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span></div>
                        <div id="contact-edit-poll-text">$updpub</div>
                        $poll_interval
-                       <div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
+                       <div id="contact-edit-update-now" class="button"><a href="contacts/$contact_id/update" >$udnow</a></div>
                </div>
+               {{ endif }}
        </div>
        <div id="contact-edit-end" ></div>
 
@@ -42,8 +45,6 @@ $insecure
 $blocked
 $ignored
 
-$grps
-
 <div id="view-recent-wrapper"><a href="network/?cid=$contact_id" id="contact-view-recent">$lblrecent</a></div>
 $lblsuggest
 
@@ -65,24 +66,5 @@ $profile_select
 
 <input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
 
-
-<div id="contact-edit-rating-wrapper">
-<h4>$lbl_rep1</h4>
-<p>
-$lbl_rep2 $lbl_rep3
-</p>
-<div id="contact-edit-rating-select-wrapper">
-$rating
-</div>
-<div id="contact-edit-rating-explain">
-<p>
-$lbl_rep4
-</p>
-<textarea id="contact-edit-rating-text" name="reason" rows="3" cols="64" >$reason</textarea>
-</div>
-</div>
-$groups
-
-<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
 </form>
 </div>
index e9f616760d47d1487a16bb7c64257ecdd10542d1..e1a080b67560cb772e03a8efe58d0a6c3b4c4f6e 100644 (file)
@@ -1,19 +1,18 @@
 
 <div class="contact-entry-wrapper" id="contact-entry-wrapper-$id" >
        <div class="contact-entry-photo-wrapper" >
-               <div class="contact-entry-nav-wrapper" >
-                       <div class="contact-entry-direction-wrapper" >
-                               <img class="contact-entry-direction-icon" src="$dir_icon" alt="$alt_text" title="$alt_text" />
-                       </div>
-                       <div class="contact-entry-direction-end" ></div>
-                       <div class="contact-entry-edit-links" >
-                               <a class="icon pencil" href="contacts/$id" class="contact-entry-edit-link" title="$edit_hover"></a>
-                       </div>
-                       <div class="contact-entry-edit-end"></div>
-               </div>
-               <div class="contact-entry-nav-end"></div>
-               <div class="contact-entry-photo" id="contact-entry-photo-$id" >
+               <div class="contact-entry-photo mframe" id="contact-entry-photo-$id"
+               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('contact-photo-menu-button-$id')" onmouseout="t$id=setTimeout('closeMenu(\'contact-photo-menu-button-$id\'); closeMenu(\'contact-photo-menu-$id\');',200)" >
+
                        <a href="$url" title="$img_hover" /><img src="$thumb" $sparkle alt="$name" /></a>
+
+                       <span onclick="openClose('contact-photo-menu-$id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$id">menu</span>
+                <div class="contact-photo-menu" id="contact-photo-menu-$id">
+                    <ul>
+                        $contact_photo_menu
+                    </ul>
+                </div>
+
                </div>
                        
        </div>
diff --git a/view/conversation.tpl b/view/conversation.tpl
new file mode 100644 (file)
index 0000000..4468149
--- /dev/null
@@ -0,0 +1,13 @@
+{{ for $threads as $thread }}
+<div class="tread-wrapper">
+       $thread
+</div>
+{{ endfor }}
+
+{{ if $dropping }}
+<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();">
+       <div id="item-delete-selected-icon" class="icon drophide" title="$dropping" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div>
+       <div id="item-delete-selected-desc" >$dropping</div>
+</div>
+<div id="item-delete-selected-end"></div>
+{{ endif }}
index 5870bac60ae83592165b3099efff8873eeca5397..c73fd0fdf1b88134182b5d6bfcd4f6cd1c1cb581 100644 (file)
@@ -7,6 +7,10 @@
 <input type="text" id="crepair-nick" name="nick" value="$contact_nick" />
 <div class="clear"></div>
 
+<label id="crepair-attag-label" for="crepair-attag">$label_attag</label>
+<input type="text" id="crepair-attag" name="attag" value="$contact_attag" />
+<div class="clear"></div>
+
 <label id="crepair-url-label" for="crepair-url">$label_url</label>
 <input type="text" id="crepair-url" name="url" value="$contact_url" />
 <div class="clear"></div>
index 15fe8402b25f26db47ae4f3572df83341a1cfee7..dca34f482496ef867f93f20870425a399ccfe6c6 100644 (file)
@@ -24,6 +24,10 @@ $default_timezone = '$timezone';
 
 $a->config['sitename'] = "Moje síť přátel";
 
+// Nastavení defaultního jazyka webu
+
+$a->config['system']['language'] = 'cs';
+
 // Vaše možnosti jsou REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
 // Ujistěte se, že jste si vytvořili Váš osobníúčet dříve, než nastavíte 
 // REGISTER_CLOSED. 'register_text' (pokud je nastaven) se bude zobrazovat jako první text na 
index b9ca68ba644e81e895988bcb59ecf42ac48f4700..05042ddce0c20bcf3f1fd1b17480c56694b23e01 100644 (file)
@@ -15,7 +15,7 @@ Následně si toto heslo můžete změnit z vašeho účtu na stránce Nastaven
 
 Přihlašovací údaje jsou tato:
 
-Adresa webu:            $siteurl
+Adresa webu:       $siteurl
 Přihlašovací jméno: $email
 
 S pozdravem,
index 0909b450c21bde3add4b103e41703413752dbe70..427c6c98da26320f3c4c60c2cf906c5a419fd7a6 100644 (file)
@@ -16,7 +16,7 @@
                 <td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
         <tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr>
         <tr><td style="padding-right:22px;">$htmlversion</td></tr>
-        <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Přihlaste se na <a href="$siteurl">$siteurl$<a/> pro čtení a zaslání odpovědí na Vaše soukromé zprávy.</td></tr>
+        <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Přihlaste se na <a href="$siteurl">$siteurl<a/> pro čtení a zaslání odpovědí na Vaše soukromé zprávy.</td></tr>
         <tr><td></td><td>Díky,</td></tr>
         <tr><td></td><td>$siteName administrátor</td></tr>
         </tbody>
index ac83cca4e9c0d09d33e32e7d5290f3a438234a92..82f6f2fb9f1e29bfd58558df25849090c207e8e5 100644 (file)
@@ -2,13 +2,13 @@
 # Copyright (C) 2010, 2011 Mike Macgirvin
 # This file is distributed under the same license as the Friendika package.
 # 
-# Michal Šupler <msupler@gmail.com>, 2011, 2011.0
+# Michal Šupler <msupler@gmail.com>, 2011.
 msgid ""
 msgstr ""
 "Project-Id-Version: friendika\n"
 "Report-Msgid-Bugs-To: http://bugs.friendika.com/\n"
-"POT-Creation-Date: 2011-05-26 06:46-0700\n"
-"PO-Revision-Date: 2011-05-29 22:49+0000\n"
+"POT-Creation-Date: 2011-08-14 21:17-0700\n"
+"PO-Revision-Date: 2011-09-03 04:29+0000\n"
 "Last-Translator: michal_s <msupler@gmail.com>\n"
 "Language-Team: Czech (http://www.transifex.net/projects/p/friendika/team/cs/)\n"
 "MIME-Version: 1.0\n"
@@ -23,33 +23,34 @@ msgstr "Příspěvek úspěšně odeslán"
 
 #: ../../mod/crepair.php:42
 msgid "Contact settings applied."
-msgstr "Opravit nastavení kontaktu"
+msgstr "Nastavení kontaktu změněno"
 
 #: ../../mod/crepair.php:44
 msgid "Contact update failed."
 msgstr "Aktualizace kontaktu selhala."
 
 #: ../../mod/crepair.php:54 ../../mod/wall_attach.php:43
-#: ../../mod/photos.php:89 ../../mod/photos.php:802 ../../mod/editpost.php:10
-#: ../../mod/install.php:93 ../../mod/notifications.php:56
-#: ../../mod/contacts.php:106 ../../mod/settings.php:15
-#: ../../mod/settings.php:20 ../../mod/settings.php:251
-#: ../../mod/manage.php:75 ../../mod/network.php:6 ../../mod/notes.php:20
-#: ../../mod/attach.php:64 ../../mod/group.php:19
+#: ../../mod/fsuggest.php:78 ../../mod/events.php:102 ../../mod/photos.php:122
+#: ../../mod/photos.php:849 ../../mod/editpost.php:10 ../../mod/install.php:96
+#: ../../mod/notifications.php:62 ../../mod/contacts.php:132
+#: ../../mod/settings.php:41 ../../mod/settings.php:46
+#: ../../mod/settings.php:305 ../../mod/manage.php:75 ../../mod/network.php:6
+#: ../../mod/notes.php:20 ../../mod/attach.php:33 ../../mod/group.php:19
 #: ../../mod/viewcontacts.php:21 ../../mod/register.php:27
-#: ../../mod/regmod.php:18 ../../mod/item.php:57 ../../mod/item.php:801
+#: ../../mod/regmod.php:111 ../../mod/item.php:110
 #: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:133
 #: ../../mod/profile_photo.php:144 ../../mod/profile_photo.php:155
-#: ../../mod/message.php:8 ../../mod/message.php:116
+#: ../../mod/message.php:8 ../../mod/message.php:116 ../../mod/admin.php:10
 #: ../../mod/wall_upload.php:42 ../../mod/follow.php:8
-#: ../../mod/display.php:138 ../../mod/profiles.php:7
-#: ../../mod/profiles.php:230 ../../mod/invite.php:13 ../../mod/invite.php:54
-#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:242
-#: ../../index.php:256
+#: ../../mod/display.php:108 ../../mod/profiles.php:7
+#: ../../mod/profiles.php:226 ../../mod/invite.php:13 ../../mod/invite.php:81
+#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:308
+#: ../../include/items.php:1930 ../../index.php:266
 msgid "Permission denied."
 msgstr "Přístup odmítnut."
 
-#: ../../mod/crepair.php:68 ../../mod/contacts.php:214
+#: ../../mod/crepair.php:68 ../../mod/fsuggest.php:20
+#: ../../mod/fsuggest.php:92 ../../mod/contacts.php:240
 #: ../../mod/dfrn_confirm.php:114
 msgid "Contact not found."
 msgstr "Kontakt nenalezen."
@@ -70,9 +71,11 @@ msgstr ""
 msgid ""
 "Please use your browser 'Back' button <strong>now</strong> if you are "
 "uncertain what to do on this page."
-msgstr "Aktualizace kontaktu selhala"
+msgstr ""
+"Prosím použijte <strong>ihned</strong> v prohlížeči tlačítko \"zpět\" pokud "
+"si nejste jistí co dělat na této stránce."
 
-#: ../../mod/crepair.php:85
+#: ../../mod/crepair.php:85 ../../mod/admin.php:464 ../../mod/admin.php:473
 msgid "Name"
 msgstr "Jméno"
 
@@ -98,25 +101,27 @@ msgstr "Notifikační URL adresa"
 
 #: ../../mod/crepair.php:91
 msgid "Poll/Feed URL"
-msgstr ""
-"Sdílený obsah v síti Friendika je poskytována pod <a "
-"href=\"http://creativecommons.org/licenses/by/3.0/cz/\">licencí Creative "
-"Commons Attribution 3.0</a>"
-
-#: ../../mod/crepair.php:100 ../../mod/photos.php:830 ../../mod/photos.php:887
-#: ../../mod/photos.php:1095 ../../mod/photos.php:1135
-#: ../../mod/photos.php:1174 ../../mod/photos.php:1205
-#: ../../mod/install.php:133 ../../mod/contacts.php:264
-#: ../../mod/settings.php:426 ../../mod/manage.php:106 ../../mod/group.php:76
-#: ../../mod/group.php:159 ../../mod/profiles.php:383 ../../mod/invite.php:68
-#: ../../addon/facebook/facebook.php:289
-#: ../../addon/randplace/randplace.php:179 ../../addon/oembed/oembed.php:49
-#: ../../addon/statusnet/statusnet.php:216
-#: ../../addon/statusnet/statusnet.php:230
-#: ../../addon/statusnet/statusnet.php:256
-#: ../../addon/statusnet/statusnet.php:263
-#: ../../addon/statusnet/statusnet.php:285 ../../addon/twitter/twitter.php:156
-#: ../../addon/twitter/twitter.php:175 ../../include/conversation.php:383
+msgstr "Poll/Feed URL adresa"
+
+#: ../../mod/crepair.php:100 ../../mod/fsuggest.php:107
+#: ../../mod/events.php:333 ../../mod/photos.php:877 ../../mod/photos.php:934
+#: ../../mod/photos.php:1144 ../../mod/photos.php:1184
+#: ../../mod/photos.php:1223 ../../mod/photos.php:1254
+#: ../../mod/install.php:137 ../../mod/contacts.php:296
+#: ../../mod/settings.php:482 ../../mod/manage.php:106 ../../mod/group.php:84
+#: ../../mod/group.php:167 ../../mod/admin.php:298 ../../mod/admin.php:461
+#: ../../mod/admin.php:587 ../../mod/admin.php:652 ../../mod/profiles.php:372
+#: ../../mod/invite.php:106 ../../addon/facebook/facebook.php:366
+#: ../../addon/randplace/randplace.php:178
+#: ../../addon/impressum/impressum.php:69 ../../addon/oembed/oembed.php:41
+#: ../../addon/statusnet/statusnet.php:274
+#: ../../addon/statusnet/statusnet.php:288
+#: ../../addon/statusnet/statusnet.php:314
+#: ../../addon/statusnet/statusnet.php:321
+#: ../../addon/statusnet/statusnet.php:343
+#: ../../addon/statusnet/statusnet.php:468 ../../addon/piwik/piwik.php:76
+#: ../../addon/twitter/twitter.php:171 ../../addon/twitter/twitter.php:194
+#: ../../addon/twitter/twitter.php:280 ../../include/conversation.php:409
 msgid "Submit"
 msgstr "Odeslat"
 
@@ -137,8 +142,112 @@ msgstr "Velikost souboru přesáhla limit %d"
 msgid "File upload failed."
 msgstr "Nahrání souboru se nezdařilo."
 
+#: ../../mod/fsuggest.php:63
+msgid "Friend suggestion sent."
+msgstr "Návrhy přátelství odeslány "
+
+#: ../../mod/fsuggest.php:97
+msgid "Suggest Friends"
+msgstr "Navrhněte přátelé"
+
+#: ../../mod/fsuggest.php:99
+#, php-format
+msgid "Suggest a friend for %s"
+msgstr "Navrhněte přátelé pro uživatele %s"
+
+#: ../../mod/events.php:112 ../../mod/photos.php:834 ../../mod/notes.php:46
+#: ../../mod/profile.php:116
+msgid "Status"
+msgstr "Stav"
+
+#: ../../mod/events.php:113 ../../mod/photos.php:835 ../../mod/notes.php:47
+#: ../../mod/profperm.php:103 ../../mod/profile.php:117
+#: ../../include/profile_advanced.php:7
+msgid "Profile"
+msgstr "Profil"
+
+#: ../../mod/events.php:114 ../../mod/photos.php:836 ../../mod/notes.php:48
+#: ../../mod/profile.php:118
+msgid "Photos"
+msgstr "Fotografie"
+
+#: ../../mod/events.php:115 ../../mod/events.php:120 ../../mod/photos.php:837
+#: ../../mod/notes.php:49 ../../mod/profile.php:119
+msgid "Events"
+msgstr "Události"
+
+#: ../../mod/events.php:116 ../../mod/photos.php:838 ../../mod/notes.php:50
+#: ../../mod/notes.php:55 ../../mod/profile.php:120
+msgid "Personal Notes"
+msgstr "Osobní poznámky"
+
+#: ../../mod/events.php:210
+msgid "Create New Event"
+msgstr "Vytvořit novou událost"
+
+#: ../../mod/events.php:213
+msgid "Previous"
+msgstr "Předchozí"
+
+#: ../../mod/events.php:216
+msgid "Next"
+msgstr "Následující"
+
+#: ../../mod/events.php:223
+msgid "l, F j"
+msgstr "l, F j"
+
+#: ../../mod/events.php:235
+msgid "Edit event"
+msgstr "Editovat událost"
+
+#: ../../mod/events.php:237 ../../include/text.php:846
+msgid "link to source"
+msgstr "odkaz na zdroj"
+
+#: ../../mod/events.php:305
+msgid "hour:minute"
+msgstr "hodina:minuta"
+
+#: ../../mod/events.php:314
+msgid "Event details"
+msgstr "Detaily události"
+
+#: ../../mod/events.php:315
+#, php-format
+msgid "Format is %s %s. Starting date and Description are required."
+msgstr "Formát je %s %s. Datum zahájení a popis jsou povinné."
+
+#: ../../mod/events.php:316
+msgid "Event Starts:"
+msgstr "Událost začíná:"
+
+#: ../../mod/events.php:319
+msgid "Finish date/time is not known or not relevant"
+msgstr "Datum/čas konce není zadán nebo není relevantní"
+
+#: ../../mod/events.php:321
+msgid "Event Finishes:"
+msgstr "Akce končí:"
+
+#: ../../mod/events.php:324
+msgid "Adjust for viewer timezone"
+msgstr "Nastavit časové pásmo pro uživatele s právem pro čtení"
+
+#: ../../mod/events.php:326
+msgid "Description:"
+msgstr "Popis:"
+
+#: ../../mod/events.php:328 ../../include/event.php:37 ../../boot.php:868
+msgid "Location:"
+msgstr "Místo:"
+
+#: ../../mod/events.php:330
+msgid "Share this event"
+msgstr "Sdílet tuto událost"
+
 #: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94
-#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:41
+#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:45
 msgid "Cancel"
 msgstr "Zrušit"
 
@@ -163,205 +272,231 @@ msgstr "Odstranit"
 msgid "%s welcomes %s"
 msgstr "%s vítá %s "
 
-#: ../../mod/photos.php:34
+#: ../../mod/photos.php:37
 msgid "Photo Albums"
 msgstr "Fotoalba"
 
-#: ../../mod/photos.php:38 ../../mod/photos.php:110 ../../mod/photos.php:810
-#: ../../mod/photos.php:879 ../../mod/photos.php:894 ../../mod/photos.php:1282
-#: ../../mod/photos.php:1293 ../../include/Photo.php:233
-#: ../../include/Photo.php:240 ../../include/Photo.php:247
-#: ../../include/items.php:1041 ../../include/items.php:1044
-#: ../../include/items.php:1047
+#: ../../mod/photos.php:45 ../../mod/photos.php:143 ../../mod/photos.php:857
+#: ../../mod/photos.php:926 ../../mod/photos.php:941 ../../mod/photos.php:1332
+#: ../../mod/photos.php:1344
 msgid "Contact Photos"
 msgstr "Fotogalerie kontaktu"
 
-#: ../../mod/photos.php:99
+#: ../../mod/photos.php:57 ../../mod/settings.php:9
+msgid "everybody"
+msgstr "Žádost o připojení selhala nebo byla zrušena."
+
+#: ../../mod/photos.php:132
 msgid "Contact information unavailable"
 msgstr "Kontakt byl zablokován"
 
-#: ../../mod/photos.php:110 ../../mod/photos.php:535 ../../mod/photos.php:879
-#: ../../mod/photos.php:894 ../../mod/register.php:290
-#: ../../mod/register.php:297 ../../mod/register.php:304
+#: ../../mod/photos.php:143 ../../mod/photos.php:577 ../../mod/photos.php:926
+#: ../../mod/photos.php:941 ../../mod/register.php:316
+#: ../../mod/register.php:323 ../../mod/register.php:330
 #: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65
 #: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:160
 #: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245
 msgid "Profile Photos"
 msgstr "Profilové fotografie"
 
-#: ../../mod/photos.php:120
+#: ../../mod/photos.php:153
 msgid "Album not found."
 msgstr "Album nenalezeno."
 
-#: ../../mod/photos.php:138 ../../mod/photos.php:888
+#: ../../mod/photos.php:171 ../../mod/photos.php:935
 msgid "Delete Album"
 msgstr "Smazat album"
 
-#: ../../mod/photos.php:201 ../../mod/photos.php:1096
+#: ../../mod/photos.php:234 ../../mod/photos.php:1145
 msgid "Delete Photo"
 msgstr "Smazat fotografii"
 
-#: ../../mod/photos.php:473
+#: ../../mod/photos.php:508
 msgid "was tagged in a"
 msgstr "štítek byl přidán v"
 
-#: ../../mod/photos.php:473 ../../mod/like.php:110
-#: ../../include/conversation.php:20
+#: ../../mod/photos.php:508 ../../mod/like.php:110
+#: ../../include/diaspora.php:446 ../../include/conversation.php:31
 msgid "photo"
 msgstr "fotografie"
 
-#: ../../mod/photos.php:473
+#: ../../mod/photos.php:508
 msgid "by"
 msgstr "od"
 
-#: ../../mod/photos.php:563 ../../addon/js_upload/js_upload.php:306
+#: ../../mod/photos.php:608 ../../addon/js_upload/js_upload.php:310
 msgid "Image exceeds size limit of "
 msgstr "Velikost obrázku překračuje limit velikosti"
 
-#: ../../mod/photos.php:577 ../../mod/profile_photo.php:118
+#: ../../mod/photos.php:616
+msgid "Image file is empty."
+msgstr "Soubor obrázku je prázdný."
+
+#: ../../mod/photos.php:630 ../../mod/profile_photo.php:118
 #: ../../mod/wall_upload.php:65
 msgid "Unable to process image."
-msgstr "Kontakt byl odblokován"
+msgstr "Obrázek není možné zprocesovat"
 
-#: ../../mod/photos.php:597 ../../mod/profile_photo.php:241
-#: ../../mod/wall_upload.php:82
+#: ../../mod/photos.php:650 ../../mod/profile_photo.php:241
+#: ../../mod/wall_upload.php:84
 msgid "Image upload failed."
 msgstr "Nahrání obrázku selhalo."
 
-#: ../../mod/photos.php:680 ../../mod/dfrn_request.php:591
-#: ../../mod/viewcontacts.php:16 ../../mod/display.php:7
-#: ../../mod/search.php:13 ../../mod/directory.php:20
+#: ../../mod/photos.php:733 ../../mod/community.php:9
+#: ../../mod/dfrn_request.php:591 ../../mod/viewcontacts.php:16
+#: ../../mod/display.php:7 ../../mod/search.php:13 ../../mod/directory.php:20
 msgid "Public access denied."
 msgstr "Veřejný přístup odepřen."
 
-#: ../../mod/photos.php:690
+#: ../../mod/photos.php:743
 msgid "No photos selected"
 msgstr "Není vybrána žádná fotografie"
 
-#: ../../mod/photos.php:837
+#: ../../mod/photos.php:820
+msgid "Access to this item is restricted."
+msgstr "Přístup k této položce je omezen."
+
+#: ../../mod/photos.php:884
 msgid "Upload Photos"
 msgstr "Nahrání fotografií "
 
-#: ../../mod/photos.php:840 ../../mod/photos.php:883
+#: ../../mod/photos.php:887 ../../mod/photos.php:930
 msgid "New album name: "
 msgstr "Název nového alba:"
 
-#: ../../mod/photos.php:841
+#: ../../mod/photos.php:888
 msgid "or existing album name: "
 msgstr "nebo stávající název alba:"
 
-#: ../../mod/photos.php:843 ../../mod/photos.php:1091
+#: ../../mod/photos.php:890 ../../mod/photos.php:1140
 msgid "Permissions"
 msgstr "Oprávnění:"
 
-#: ../../mod/photos.php:898
+#: ../../mod/photos.php:945
 msgid "Edit Album"
 msgstr "Edituj album"
 
-#: ../../mod/photos.php:908 ../../mod/photos.php:1311
+#: ../../mod/photos.php:955 ../../mod/photos.php:1362
 msgid "View Photo"
 msgstr "Zobraz fotografii"
 
-#: ../../mod/photos.php:937
+#: ../../mod/photos.php:984
 msgid "Photo not available"
 msgstr "Fotografie není k dispozici"
 
-#: ../../mod/photos.php:986
+#: ../../mod/photos.php:1033
 msgid "Edit photo"
 msgstr "Editovat fotografii"
 
-#: ../../mod/photos.php:987
+#: ../../mod/photos.php:1034
 msgid "Use as profile photo"
 msgstr "Použít jako profilovou fotografii"
 
-#: ../../mod/photos.php:993 ../../include/conversation.php:316
+#: ../../mod/photos.php:1040 ../../include/conversation.php:342
 msgid "Private Message"
 msgstr "Soukromá zpráva"
 
-#: ../../mod/photos.php:1000
-msgid "<< Prev"
-msgstr "<< Předchozí"
-
-#: ../../mod/photos.php:1004
+#: ../../mod/photos.php:1051
 msgid "View Full Size"
 msgstr "Zobrazit v plné velikosti"
 
-#: ../../mod/photos.php:1009
-msgid "Next >>"
-msgstr "Následující >>"
-
-#: ../../mod/photos.php:1071
+#: ../../mod/photos.php:1119
 msgid "Tags: "
 msgstr "Štítky:"
 
-#: ../../mod/photos.php:1074
+#: ../../mod/photos.php:1122
 msgid "[Remove any tag]"
 msgstr "[Odstranit všechny štítky]"
 
-#: ../../mod/photos.php:1084
+#: ../../mod/photos.php:1133
 msgid "New album name"
 msgstr "Nové jméno alba"
 
-#: ../../mod/photos.php:1087
+#: ../../mod/photos.php:1136
 msgid "Caption"
 msgstr "Titulek"
 
-#: ../../mod/photos.php:1089
+#: ../../mod/photos.php:1138
 msgid "Add a Tag"
 msgstr "Přidat štítek"
 
-#: ../../mod/photos.php:1093
+#: ../../mod/photos.php:1142
 msgid ""
 "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
-msgstr "Kontakt byl ignorován"
+msgstr ""
+"Příklad: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
 
-#: ../../mod/photos.php:1113 ../../include/conversation.php:364
+#: ../../mod/photos.php:1162 ../../include/conversation.php:390
 msgid "I like this (toggle)"
 msgstr "Líbí se mi to (přepínač)"
 
-#: ../../mod/photos.php:1114 ../../include/conversation.php:365
+#: ../../mod/photos.php:1163 ../../include/conversation.php:391
 msgid "I don't like this (toggle)"
 msgstr "Nelíbí se mi to (přepínač)"
 
-#: ../../mod/photos.php:1115 ../../include/conversation.php:366
-#: ../../include/conversation.php:731
+#: ../../mod/photos.php:1164 ../../include/conversation.php:392
+#: ../../include/conversation.php:746
 msgid "Share"
 msgstr "Sdílet"
 
-#: ../../mod/photos.php:1116 ../../mod/editpost.php:97
+#: ../../mod/photos.php:1165 ../../mod/editpost.php:99
 #: ../../mod/message.php:190 ../../mod/message.php:324
-#: ../../include/conversation.php:367 ../../include/conversation.php:741
+#: ../../include/conversation.php:393 ../../include/conversation.php:756
 msgid "Please wait"
 msgstr "Čekejte prosím"
 
-#: ../../mod/photos.php:1132 ../../mod/photos.php:1171
-#: ../../mod/photos.php:1202 ../../include/conversation.php:380
+#: ../../mod/photos.php:1181 ../../mod/photos.php:1220
+#: ../../mod/photos.php:1251 ../../include/conversation.php:406
 msgid "This is you"
 msgstr "To je Vy"
 
-#: ../../mod/photos.php:1134 ../../mod/photos.php:1173
-#: ../../mod/photos.php:1204 ../../include/conversation.php:382
-#: ../../boot.php:386
+#: ../../mod/photos.php:1183 ../../mod/photos.php:1222
+#: ../../mod/photos.php:1253 ../../include/conversation.php:408
+#: ../../boot.php:411
 msgid "Comment"
 msgstr "Okomentovat"
 
-#: ../../mod/photos.php:1232 ../../mod/group.php:146
-#: ../../include/conversation.php:179 ../../include/conversation.php:393
+#: ../../mod/photos.php:1281 ../../mod/group.php:154 ../../mod/admin.php:468
+#: ../../include/conversation.php:427
 msgid "Delete"
 msgstr "Odstranit"
 
-#: ../../mod/photos.php:1298
+#: ../../mod/photos.php:1349
 msgid "Recent Photos"
 msgstr "Aktuální fotografie"
 
-#: ../../mod/photos.php:1302
+#: ../../mod/photos.php:1353
 msgid "Upload New Photos"
 msgstr "Nahrát nové fotografie"
 
-#: ../../mod/photos.php:1315
+#: ../../mod/photos.php:1366
 msgid "View Album"
 msgstr "Zobrazit album"
 
+#: ../../mod/community.php:14
+msgid "Not available."
+msgstr "Není k dispozici."
+
+#: ../../mod/community.php:26 ../../include/nav.php:79
+msgid "Community"
+msgstr "Komunita"
+
+#: ../../mod/community.php:56 ../../mod/search.php:65
+msgid "No results."
+msgstr "Žádné výsledky."
+
+#: ../../mod/community.php:83 ../../mod/network.php:302
+#: ../../mod/register.php:504 ../../mod/profile.php:241
+#: ../../mod/display.php:117
+msgid ""
+"Shared content is covered by the <a "
+"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
+"Attribution 3.0</a> license."
+msgstr ""
+"Sdílený obsah je v souladu s <a "
+"href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative "
+"3.0</a> licencí."
+
 #: ../../mod/editpost.php:17 ../../mod/editpost.php:27
 msgid "Item not found"
 msgstr "Položka nenalezena"
@@ -370,72 +505,72 @@ msgstr "Položka nenalezena"
 msgid "Edit post"
 msgstr "Upravit příspěvek"
 
-#: ../../mod/editpost.php:75 ../../include/conversation.php:717
+#: ../../mod/editpost.php:75 ../../include/conversation.php:732
 msgid "Post to Email"
 msgstr "Poslat příspěvek na e-mail"
 
-#: ../../mod/editpost.php:88 ../../include/group.php:169
-#: ../../include/conversation.php:391
+#: ../../mod/editpost.php:90 ../../include/group.php:171
+#: ../../include/group.php:172 ../../include/conversation.php:417
 msgid "Edit"
 msgstr "Upravit"
 
-#: ../../mod/editpost.php:89 ../../mod/message.php:188
-#: ../../mod/message.php:322 ../../include/conversation.php:732
+#: ../../mod/editpost.php:91 ../../mod/message.php:188
+#: ../../mod/message.php:322 ../../include/conversation.php:747
 msgid "Upload photo"
 msgstr "Nahrát fotografii"
 
-#: ../../mod/editpost.php:90 ../../include/conversation.php:733
+#: ../../mod/editpost.php:92 ../../include/conversation.php:748
 msgid "Attach file"
 msgstr "Přiložit soubor"
 
-#: ../../mod/editpost.php:91 ../../mod/message.php:189
-#: ../../mod/message.php:323 ../../include/conversation.php:734
+#: ../../mod/editpost.php:93 ../../mod/message.php:189
+#: ../../mod/message.php:323 ../../include/conversation.php:749
 msgid "Insert web link"
 msgstr "Vložit webový odkaz"
 
-#: ../../mod/editpost.php:92 ../../include/conversation.php:735
+#: ../../mod/editpost.php:94 ../../include/conversation.php:750
 msgid "Insert YouTube video"
 msgstr "Vložit YouTube video"
 
-#: ../../mod/editpost.php:93 ../../include/conversation.php:736
+#: ../../mod/editpost.php:95 ../../include/conversation.php:751
 msgid "Insert Vorbis [.ogg] video"
 msgstr "Vložit Vorbis [.ogg] video"
 
-#: ../../mod/editpost.php:94 ../../include/conversation.php:737
+#: ../../mod/editpost.php:96 ../../include/conversation.php:752
 msgid "Insert Vorbis [.ogg] audio"
 msgstr "Vložit Vorbis [.ogg] audio"
 
-#: ../../mod/editpost.php:95 ../../include/conversation.php:738
+#: ../../mod/editpost.php:97 ../../include/conversation.php:753
 msgid "Set your location"
-msgstr "Kontakt přestal být ignorován"
+msgstr "Nastavte vaši polohu"
 
-#: ../../mod/editpost.php:96 ../../include/conversation.php:739
+#: ../../mod/editpost.php:98 ../../include/conversation.php:754
 msgid "Clear browser location"
-msgstr "Kontakt byl odstraněn"
+msgstr "Odstranit adresu v prohlížeči"
 
-#: ../../mod/editpost.php:98 ../../include/conversation.php:742
+#: ../../mod/editpost.php:100 ../../include/conversation.php:757
 msgid "Permission settings"
 msgstr "Nastavení oprávnění"
 
-#: ../../mod/editpost.php:106 ../../include/conversation.php:750
+#: ../../mod/editpost.php:108 ../../include/conversation.php:765
 msgid "CC: email addresses"
 msgstr "skrytá kopie: e-mailové adresy"
 
-#: ../../mod/editpost.php:107 ../../include/conversation.php:751
+#: ../../mod/editpost.php:109 ../../include/conversation.php:766
 msgid "Public post"
 msgstr "Veřejný příspěvek"
 
-#: ../../mod/editpost.php:109 ../../include/conversation.php:753
+#: ../../mod/editpost.php:111 ../../include/conversation.php:768
 msgid "Example: bob@example.com, mary@example.com"
-msgstr "Editor kontaktu"
+msgstr "Příklad: bob@example.com, mary@example.com"
 
 #: ../../mod/dfrn_request.php:96
 msgid "This introduction has already been accepted."
-msgstr "Kontaktní informace / poznámky"
+msgstr "Toto pozvání již bylo přijato"
 
 #: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351
 msgid "Profile location is not valid or does not contain profile information."
-msgstr "Zablokovat/Odblokovat kontakt"
+msgstr "Adresa profilu není platná nebo neobsahuje profilové informace"
 
 #: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356
 msgid "Warning: profile location has no identifiable owner name."
@@ -460,7 +595,7 @@ msgstr "Představení dokončeno."
 
 #: ../../mod/dfrn_request.php:192
 msgid "Unrecoverable protocol error."
-msgstr "Smazat kontakt"
+msgstr "Neopravitelná chyba protokolu"
 
 #: ../../mod/dfrn_request.php:220
 msgid "Profile unavailable."
@@ -473,7 +608,7 @@ msgstr "%s dnes obdržel příliš mnoho požadavků na připojení."
 
 #: ../../mod/dfrn_request.php:246
 msgid "Spam protection measures have been invoked."
-msgstr "Blokovat tento kontakt"
+msgstr "Ochrana proti spamu byla aktivována"
 
 #: ../../mod/dfrn_request.php:247
 msgid "Friends are advised to please try again in 24 hours."
@@ -504,7 +639,7 @@ msgstr "Neplatné URL profilu."
 msgid "Disallowed profile URL."
 msgstr "Nepovolené URL profilu."
 
-#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:90
+#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:116
 msgid "Failed to update contact record."
 msgstr "Nepodařilo se aktualizovat kontakt."
 
@@ -538,7 +673,7 @@ msgstr "Prosím potvrďte Vaši žádost o představení/spojení %s."
 msgid "Confirm"
 msgstr "Potvrdit"
 
-#: ../../mod/dfrn_request.php:542 ../../include/items.php:1440
+#: ../../mod/dfrn_request.php:542 ../../include/items.php:1519
 msgid "[Name Withheld]"
 msgstr "[Jméno odepřeno]"
 
@@ -546,13 +681,13 @@ msgstr "[Jméno odepřeno]"
 msgid "Introduction received at "
 msgstr "Pozvánka přijata v"
 
-#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:40
-#: ../../mod/lostpass.php:102 ../../mod/register.php:335
-#: ../../mod/register.php:385 ../../mod/regmod.php:98
-#: ../../mod/dfrn_notify.php:191 ../../mod/dfrn_notify.php:443
-#: ../../mod/dfrn_confirm.php:658 ../../include/items.php:1449
+#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:44
+#: ../../mod/lostpass.php:106 ../../mod/register.php:369
+#: ../../mod/register.php:423 ../../mod/regmod.php:54
+#: ../../mod/dfrn_notify.php:291 ../../mod/dfrn_notify.php:547
+#: ../../mod/dfrn_confirm.php:674 ../../include/items.php:1528
 msgid "Administrator"
-msgstr "Správce"
+msgstr "Administrátor"
 
 #: ../../mod/dfrn_request.php:630
 msgid "Friend/Connection Request"
@@ -571,18 +706,21 @@ msgid "Please answer the following:"
 msgstr "Odpovězte, prosím, následující:"
 
 #: ../../mod/dfrn_request.php:633
-msgid "Does $name know you?"
-msgstr "Zná Vás $name?"
+#, php-format
+msgid "Does %s know you?"
+msgstr "Zná Vás uživatel %s ?"
 
-#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:350
-#: ../../mod/settings.php:362 ../../mod/register.php:459
-#: ../../mod/profiles.php:358 ../../mod/profiles.php:367
+#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:415
+#: ../../mod/settings.php:421 ../../mod/settings.php:429
+#: ../../mod/settings.php:433 ../../mod/register.php:498
+#: ../../mod/profiles.php:354
 msgid "Yes"
 msgstr "Ano"
 
-#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:351
-#: ../../mod/settings.php:363 ../../mod/register.php:460
-#: ../../mod/profiles.php:359 ../../mod/profiles.php:368
+#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:415
+#: ../../mod/settings.php:421 ../../mod/settings.php:429
+#: ../../mod/settings.php:433 ../../mod/register.php:499
+#: ../../mod/profiles.php:355
 msgid "No"
 msgstr "Ne"
 
@@ -622,41 +760,41 @@ msgstr "Adresa Vaší identity :"
 msgid "Submit Request"
 msgstr "Odeslat žádost"
 
-#: ../../mod/install.php:33
+#: ../../mod/install.php:34
 msgid "Could not create/connect to database."
 msgstr "Nelze vytvořit / připojit se k databázi."
 
-#: ../../mod/install.php:38
+#: ../../mod/install.php:39
 msgid "Connected to database."
 msgstr "Připojeno k databázi."
 
-#: ../../mod/install.php:72
+#: ../../mod/install.php:75
 msgid "Proceed with Installation"
 msgstr "Pokračovat v instalaci"
 
-#: ../../mod/install.php:74
+#: ../../mod/install.php:77
 msgid "Your Friendika site database has been installed."
 msgstr "Vaše databáze Friendiky byla nainstalována."
 
-#: ../../mod/install.php:75
+#: ../../mod/install.php:78
 msgid ""
 "IMPORTANT: You will need to [manually] setup a scheduled task for the "
 "poller."
 msgstr "Důležité: Budete si muset [ručně] plánovat úlohu pro poller."
 
-#: ../../mod/install.php:76 ../../mod/install.php:86 ../../mod/install.php:199
+#: ../../mod/install.php:79 ../../mod/install.php:89 ../../mod/install.php:207
 msgid "Please see the file \"INSTALL.txt\"."
 msgstr "Přečtěte si prosím informace v souboru \"INSTALL.txt\"."
 
-#: ../../mod/install.php:78
+#: ../../mod/install.php:81
 msgid "Proceed to registration"
 msgstr "Pokračovat k registraci"
 
-#: ../../mod/install.php:84
+#: ../../mod/install.php:87
 msgid "Database import failed."
 msgstr "Import databáze se nezdařil."
 
-#: ../../mod/install.php:85
+#: ../../mod/install.php:88
 msgid ""
 "You may need to import the file \"database.sql\" manually using phpmyadmin "
 "or mysql."
@@ -664,65 +802,73 @@ msgstr ""
 "Možná budete muset importovat soubor \"database.sql\" ručně pomocí "
 "phpMyAdmin či MySQL."
 
-#: ../../mod/install.php:98
+#: ../../mod/install.php:101
 msgid "Welcome to Friendika."
 msgstr "Vítejte na Friendice."
 
-#: ../../mod/install.php:121
+#: ../../mod/install.php:124
 msgid "Friendika Social Network"
 msgstr "Sociální síť Friendika "
 
-#: ../../mod/install.php:122
+#: ../../mod/install.php:125
 msgid "Installation"
 msgstr "Instalace"
 
-#: ../../mod/install.php:123
+#: ../../mod/install.php:126
 msgid ""
-"In order to install Friendika we need to know how to contact your database."
-msgstr ""
-"Pro instalaci Friendiky musíme vědět, jak se připojit k Vaší databázi."
+"In order to install Friendika we need to know how to connect to your "
+"database."
+msgstr "Pro instalaci Friendika musíme vědět, jak se připojit k databázi."
 
-#: ../../mod/install.php:124
+#: ../../mod/install.php:127
 msgid ""
 "Please contact your hosting provider or site administrator if you have "
 "questions about these settings."
 msgstr ""
-"Obraťte se na svého poskytovatele hostingu nebo správce serveru, pokud máte "
-"dotazy týkající se těchto nastavení."
+"Obraťte se na svého poskytovatele hostingu nebo administrátora serveru , "
+"pokud máte dotazy týkající se těchto nastavení."
 
-#: ../../mod/install.php:125
+#: ../../mod/install.php:128
 msgid ""
-"The database you specify below must already exist. If it does not, please "
+"The database you specify below should already exist. If it does not, please "
 "create it before continuing."
 msgstr ""
-"Databáze zadáte níže již musí existovat. Pokud ještě neexistuje, vytvořte "
-"ji, prosím, aby bylo možné pokračovat."
+"Databázi, kterou uvedete níže by již měla existovat. Pokud tak není, "
+"prosíme, vytvořte ji před pokračováním."
 
-#: ../../mod/install.php:126
+#: ../../mod/install.php:129
 msgid "Database Server Name"
 msgstr "Jméno databázového serveru"
 
-#: ../../mod/install.php:127
+#: ../../mod/install.php:130
 msgid "Database Login Name"
 msgstr "Přihlašovací jméno k databázi"
 
-#: ../../mod/install.php:128
+#: ../../mod/install.php:131
 msgid "Database Login Password"
 msgstr "Heslo k databázovému účtu "
 
-#: ../../mod/install.php:129
+#: ../../mod/install.php:132
 msgid "Database Name"
 msgstr "Jméno databáze"
 
-#: ../../mod/install.php:130
+#: ../../mod/install.php:133
 msgid "Please select a default timezone for your website"
 msgstr "Prosím, vyberte výchozí časové pásmo pro vaše webové stránky"
 
-#: ../../mod/install.php:148
+#: ../../mod/install.php:134
+msgid ""
+"Site administrator email address. Your account email address must match this"
+" in order to use the web admin panel."
+msgstr ""
+"e-mailová adresa administrárota webu. E-mailová adresa vašeho účtu se musí "
+"shodovat, aby bylo možné využívat panel webové administrace."
+
+#: ../../mod/install.php:153
 msgid "Could not find a command line version of PHP in the web server PATH."
 msgstr "Nelze najít verzi PHP pro příkazový řádek v PATH webového serveru."
 
-#: ../../mod/install.php:149
+#: ../../mod/install.php:154
 msgid ""
 "This is required. Please adjust the configuration file .htconfig.php "
 "accordingly."
@@ -730,7 +876,7 @@ msgstr ""
 "Tento krok je nutný. Upravte příslušným způsobem konfigurační soubor "
 ".htconfig.php."
 
-#: ../../mod/install.php:156
+#: ../../mod/install.php:161
 msgid ""
 "The command line version of PHP on your system does not have "
 "\"register_argc_argv\" enabled."
@@ -738,11 +884,11 @@ msgstr ""
 "Verze PHP pro příkazový řádek na vašem systému nemá povolen "
 "\"register_argc_argv\"."
 
-#: ../../mod/install.php:157
+#: ../../mod/install.php:162
 msgid "This is required for message delivery to work."
 msgstr "Toto je nutné pro fungování doručování zpráv."
 
-#: ../../mod/install.php:179
+#: ../../mod/install.php:184
 msgid ""
 "Error: the \"openssl_pkey_new\" function on this system is not able to "
 "generate encryption keys"
@@ -750,7 +896,7 @@ msgstr ""
 "Chyba: funkce \"openssl_pkey_new\" na tomto systému není schopna generovat "
 "šifrovací klíče"
 
-#: ../../mod/install.php:180
+#: ../../mod/install.php:185
 msgid ""
 "If running under Windows, please see "
 "\"http://www.php.net/manual/en/openssl.installation.php\"."
@@ -758,30 +904,34 @@ msgstr ""
 "Pokud systém běží na Windows, seznamte se s "
 "\"http://www.php.net/manual/en/openssl.installation.php\"."
 
-#: ../../mod/install.php:189
+#: ../../mod/install.php:194
 msgid ""
 "Error: Apache webserver mod-rewrite module is required but not installed."
 msgstr ""
 "Chyba: Požadovaný Apache webserver mod-rewrite modul není nainstalován."
 
-#: ../../mod/install.php:191
+#: ../../mod/install.php:196
 msgid "Error: libCURL PHP module required but not installed."
 msgstr "Chyba: požadovaný libcurl PHP modul není nainstalován."
 
-#: ../../mod/install.php:193
+#: ../../mod/install.php:198
 msgid ""
 "Error: GD graphics PHP module with JPEG support required but not installed."
 msgstr "Chyba: požadovaný GD graphics PHP modul není nainstalován."
 
-#: ../../mod/install.php:195
+#: ../../mod/install.php:200
 msgid "Error: openssl PHP module required but not installed."
 msgstr "Chyba: požadovaný openssl PHP modul není nainstalován."
 
-#: ../../mod/install.php:197
+#: ../../mod/install.php:202
 msgid "Error: mysqli PHP module required but not installed."
 msgstr "Chyba: požadovaný mysqli PHP modul není nainstalován."
 
-#: ../../mod/install.php:208
+#: ../../mod/install.php:204
+msgid "Error: mb_string PHP module required but not installed."
+msgstr "Chyba: PHP modul mb_string  je vyžadován, ale není nainstalován."
+
+#: ../../mod/install.php:216
 msgid ""
 "The web installer needs to be able to create a file called \".htconfig.php\""
 " in the top folder of your web server and it is unable to do so."
@@ -790,7 +940,7 @@ msgstr ""
 "\".htconfig.php\" v hlavním adresáři vašeho webového serveru ale nyní mu to "
 "není umožněno."
 
-#: ../../mod/install.php:209
+#: ../../mod/install.php:217
 msgid ""
 "This is most often a permission setting, as the web server may not be able "
 "to write files in your folder - even if you can."
@@ -798,7 +948,7 @@ msgstr ""
 "Toto je nejčastěji nastavením oprávnění, kdy webový server nemusí být "
 "schopen zapisovat soubory do vašeho adresáře - i když Vy můžete."
 
-#: ../../mod/install.php:210
+#: ../../mod/install.php:218
 msgid ""
 "Please check with your site documentation or support people to see if this "
 "situation can be corrected."
@@ -806,7 +956,7 @@ msgstr ""
 "Prosím, poraďte se s dokumentací k Vašemu hostingu nebo s technickou "
 "podporou, zda-li lze tuto situaci napravit."
 
-#: ../../mod/install.php:211
+#: ../../mod/install.php:219
 msgid ""
 "If not, you may be required to perform a manual installation. Please see the"
 " file \"INSTALL.txt\" for instructions."
@@ -814,7 +964,7 @@ msgstr ""
 "Pokud ne, může být vyžadováno provedení ruční instalace. Prosím, seznamte se"
 " s návodem popsaným v souboru \"INSTALL.txt\"."
 
-#: ../../mod/install.php:220
+#: ../../mod/install.php:228
 msgid ""
 "The database configuration file \".htconfig.php\" could not be written. "
 "Please use the enclosed text to create a configuration file in your web "
@@ -824,15 +974,26 @@ msgstr ""
 "použijte přiložený text k vytvoření konfiguračního souboru ve vašem "
 "kořenovém adresáři webového serveru."
 
-#: ../../mod/install.php:235
+#: ../../mod/install.php:243
 msgid "Errors encountered creating database tables."
 msgstr "Při vytváření databázových tabulek došlo k chybám."
 
+#: ../../mod/update_community.php:18 ../../mod/update_network.php:22
+#: ../../mod/update_profile.php:41
+msgid "[Embedded content - reload page to view]"
+msgstr "[Vložený obsah - obnovení stránky pro zobrazení]"
+
 #: ../../mod/match.php:10
 msgid "Profile Match"
 msgstr "Shoda profilu"
 
-#: ../../mod/match.php:50
+#: ../../mod/match.php:18
+msgid "No keywords to match. Please add keywords to your default profile."
+msgstr ""
+"Žádná klíčová slova k porovnání. Prosím, přidejte klíčová slova do Vašeho "
+"výchozího profilu."
+
+#: ../../mod/match.php:54
 msgid "No matches"
 msgstr "Žádné shody"
 
@@ -849,183 +1010,195 @@ msgstr "Viditelné pro:"
 msgid "Welcome to %s"
 msgstr "Vítá Vás %s"
 
-#: ../../mod/notifications.php:28
+#: ../../mod/notifications.php:26
 msgid "Invalid request identifier."
 msgstr "Neplatný identifikátor požadavku."
 
-#: ../../mod/notifications.php:31 ../../mod/notifications.php:133
+#: ../../mod/notifications.php:35 ../../mod/notifications.php:118
+#: ../../mod/notifications.php:162
 msgid "Discard"
 msgstr "Odstranit"
 
-#: ../../mod/notifications.php:41 ../../mod/notifications.php:132
+#: ../../mod/notifications.php:47 ../../mod/notifications.php:117
+#: ../../mod/notifications.php:161
 msgid "Ignore"
 msgstr "Ignorovat"
 
-#: ../../mod/notifications.php:68
+#: ../../mod/notifications.php:74
 msgid "Pending Friend/Connect Notifications"
 msgstr "Čekající požadavky na Přátelství / Připojení "
 
-#: ../../mod/notifications.php:72
+#: ../../mod/notifications.php:78
 msgid "Show Ignored Requests"
 msgstr "Zobrazit ignorované žádosti"
 
-#: ../../mod/notifications.php:72
+#: ../../mod/notifications.php:78
 msgid "Hide Ignored Requests"
 msgstr "Skrýt ignorované žádosti"
 
-#: ../../mod/notifications.php:104
+#: ../../mod/notifications.php:105 ../../mod/notifications.php:148
+msgid "Notification type: "
+msgstr "Typ oznámení:"
+
+#: ../../mod/notifications.php:106
+msgid "Friend Suggestion"
+msgstr "Návrh přátelství"
+
+#: ../../mod/notifications.php:108
+#, php-format
+msgid "suggested by %s"
+msgstr "navrhl %s"
+
+#: ../../mod/notifications.php:114 ../../mod/notifications.php:159
+#: ../../mod/admin.php:466
+msgid "Approve"
+msgstr "Schválit"
+
+#: ../../mod/notifications.php:133
 msgid "Claims to be known to you: "
 msgstr "Vaši údajní známí:"
 
-#: ../../mod/notifications.php:104
+#: ../../mod/notifications.php:133
 msgid "yes"
 msgstr "ano"
 
-#: ../../mod/notifications.php:104
+#: ../../mod/notifications.php:133
 msgid "no"
 msgstr "ne"
 
-#: ../../mod/notifications.php:110
+#: ../../mod/notifications.php:139
 msgid "Approve as: "
 msgstr "Schválit jako:"
 
-#: ../../mod/notifications.php:111
+#: ../../mod/notifications.php:140
 msgid "Friend"
 msgstr "Přítel"
 
-#: ../../mod/notifications.php:112
+#: ../../mod/notifications.php:141
 msgid "Fan/Admirer"
 msgstr "Fanoušek / obdivovatel"
 
-#: ../../mod/notifications.php:119
-msgid "Notification type: "
-msgstr "Typ oznámení:"
-
-#: ../../mod/notifications.php:120
+#: ../../mod/notifications.php:149
 msgid "Friend/Connect Request"
 msgstr "Přítel / žádost o připojení"
 
-#: ../../mod/notifications.php:120
+#: ../../mod/notifications.php:149
 msgid "New Follower"
 msgstr "Nový následovník"
 
-#: ../../mod/notifications.php:130 ../../mod/notifications.php:153
-msgid "Approve"
-msgstr "Schválit"
-
-#: ../../mod/notifications.php:139
+#: ../../mod/notifications.php:168
 msgid "No notifications."
 msgstr "Žádné oznámení."
 
-#: ../../mod/notifications.php:143
-msgid "User registrations waiting for confirm"
-msgstr "Registrace uživatele čeká na potvrzení"
-
-#: ../../mod/notifications.php:154
-msgid "Deny"
-msgstr "Odmítnout"
-
-#: ../../mod/notifications.php:159
-msgid "No registrations."
-msgstr "Žádné registrace."
-
-#: ../../mod/contacts.php:12
+#: ../../mod/contacts.php:26
 msgid "Invite Friends"
 msgstr "Pozvat přátele"
 
-#: ../../mod/contacts.php:15
+#: ../../mod/contacts.php:32
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] "Pozvánka %d k dispozici"
+msgstr[1] "Pozvánky %d k dispozici"
+msgstr[2] "Pozvánky %d k dispozici"
+
+#: ../../mod/contacts.php:41
 msgid "Find People With Shared Interests"
 msgstr "Najít lidi se společnými zájmy"
 
-#: ../../mod/contacts.php:19
+#: ../../mod/contacts.php:45
 msgid "Connect/Follow"
 msgstr "Připojit / Následovat"
 
-#: ../../mod/contacts.php:20
+#: ../../mod/contacts.php:46
 msgid "Example: bob@example.com, http://example.com/barbara"
 msgstr "Příklad: jan@příklad.cz, http://příklad.cz/jana"
 
-#: ../../mod/contacts.php:21
+#: ../../mod/contacts.php:47
 msgid "Follow"
 msgstr "Následovat"
 
-#: ../../mod/contacts.php:43 ../../mod/contacts.php:124
+#: ../../mod/contacts.php:69 ../../mod/contacts.php:150
 msgid "Could not access contact record."
 msgstr "Nelze získat přístup k záznamu kontaktu."
 
-#: ../../mod/contacts.php:57
+#: ../../mod/contacts.php:83
 msgid "Could not locate selected profile."
 msgstr "Nelze nalézt vybraný profil."
 
-#: ../../mod/contacts.php:88
+#: ../../mod/contacts.php:114
 msgid "Contact updated."
 msgstr "Kontakt aktualizován."
 
-#: ../../mod/contacts.php:146
+#: ../../mod/contacts.php:172
 msgid "Contact has been blocked"
 msgstr "Kontakt byl zablokován"
 
-#: ../../mod/contacts.php:146
+#: ../../mod/contacts.php:172
 msgid "Contact has been unblocked"
 msgstr "Kontakt byl odblokován"
 
-#: ../../mod/contacts.php:160
+#: ../../mod/contacts.php:186
 msgid "Contact has been ignored"
 msgstr "Kontakt bude ignorován"
 
-#: ../../mod/contacts.php:160
+#: ../../mod/contacts.php:186
 msgid "Contact has been unignored"
 msgstr "Kontakt přestal být ignorován"
 
-#: ../../mod/contacts.php:181
+#: ../../mod/contacts.php:207
 msgid "stopped following"
 msgstr "následování zastaveno"
 
-#: ../../mod/contacts.php:200
+#: ../../mod/contacts.php:226
 msgid "Contact has been removed."
 msgstr "Kontakt byl odstraněn."
 
-#: ../../mod/contacts.php:228 ../../mod/contacts.php:363
+#: ../../mod/contacts.php:254 ../../mod/contacts.php:397
 msgid "Mutual Friendship"
 msgstr "Vzájemné přátelství"
 
-#: ../../mod/contacts.php:232 ../../mod/contacts.php:367
+#: ../../mod/contacts.php:258 ../../mod/contacts.php:401
 msgid "is a fan of yours"
 msgstr "je Váš fanoušek"
 
-#: ../../mod/contacts.php:237 ../../mod/contacts.php:371
+#: ../../mod/contacts.php:263 ../../mod/contacts.php:405
 msgid "you are a fan of"
 msgstr "jste fanouškem"
 
-#: ../../mod/contacts.php:252
+#: ../../mod/contacts.php:280
 msgid "Privacy Unavailable"
 msgstr "Ochrana soukromí není k dispozici"
 
-#: ../../mod/contacts.php:253
+#: ../../mod/contacts.php:281
 msgid "Private communications are not available for this contact."
 msgstr "Soukromá komunikace není dostupná pro tento kontakt."
 
-#: ../../mod/contacts.php:256
+#: ../../mod/contacts.php:284
 msgid "Never"
 msgstr "Nikdy"
 
-#: ../../mod/contacts.php:260
+#: ../../mod/contacts.php:288
 msgid "(Update was successful)"
 msgstr "(Aktualizace byla úspěšná)"
 
-#: ../../mod/contacts.php:260
+#: ../../mod/contacts.php:288
 msgid "(Update was not successful)"
 msgstr "(Aktualizace nebyla úspěšná)"
 
-#: ../../mod/contacts.php:263
+#: ../../mod/contacts.php:291
+msgid "Suggest friends"
+msgstr "Navrhněte přátelé"
+
+#: ../../mod/contacts.php:295
 msgid "Contact Editor"
 msgstr "Editor kontaktu"
 
-#: ../../mod/contacts.php:265
+#: ../../mod/contacts.php:297
 msgid "Profile Visibility"
 msgstr "Viditelnost profilu"
 
-#: ../../mod/contacts.php:266
+#: ../../mod/contacts.php:298
 #, php-format
 msgid ""
 "Please choose the profile you would like to display to %s when viewing your "
@@ -1034,22 +1207,22 @@ msgstr ""
 "Vyberte prosím profil, který chcete zobrazit %s při zabezpečeném prohlížení "
 "vašeho profilu."
 
-#: ../../mod/contacts.php:267
+#: ../../mod/contacts.php:299
 msgid "Contact Information / Notes"
 msgstr "Kontaktní informace / poznámky"
 
-#: ../../mod/contacts.php:268
+#: ../../mod/contacts.php:300
 msgid "Online Reputation"
 msgstr "Online pověst"
 
-#: ../../mod/contacts.php:269
+#: ../../mod/contacts.php:301
 msgid ""
 "Occasionally your friends may wish to inquire about this person's online "
 "legitimacy."
 msgstr ""
 "Občas mohou vaši přátelé chtít informovat o online legitimitě této osoby."
 
-#: ../../mod/contacts.php:270
+#: ../../mod/contacts.php:302
 msgid ""
 "You may help them choose whether or not to interact with this person by "
 "providing a <em>reputation</em> to guide them."
@@ -1057,7 +1230,7 @@ msgstr ""
 "Poskytnutím <em>pověsti</em> jim můžete pomoci se rozhodnout, zda-li s touto"
 " osobou komunikovat či nikoliv."
 
-#: ../../mod/contacts.php:271
+#: ../../mod/contacts.php:303
 msgid ""
 "Please take a moment to elaborate on this selection if you feel it could be "
 "helpful to others."
@@ -1065,110 +1238,111 @@ msgstr ""
 "Věnujte prosím chvilku vyplnění této volby, pokud máte pocit, že by mohlo "
 "být užitečné pro ostatní."
 
-#: ../../mod/contacts.php:272
-msgid "Visit $name's profile"
-msgstr "Navštívit profil $name"
+#: ../../mod/contacts.php:304 ../../mod/contacts.php:421
+#: ../../mod/viewcontacts.php:61
+#, php-format
+msgid "Visit %s's profile [%s]"
+msgstr "Navštivte profil uživatele %s [%s]"
 
-#: ../../mod/contacts.php:273
+#: ../../mod/contacts.php:305
 msgid "Block/Unblock contact"
 msgstr "Blokovat / Odblokovat kontakt"
 
-#: ../../mod/contacts.php:274
+#: ../../mod/contacts.php:306
 msgid "Ignore contact"
 msgstr "Ignorovat kontakt"
 
-#: ../../mod/contacts.php:275
+#: ../../mod/contacts.php:307
 msgid "Repair contact URL settings"
 msgstr "Opravit nastavení URL kontaktu"
 
-#: ../../mod/contacts.php:276
+#: ../../mod/contacts.php:308
 msgid "Repair contact URL settings (WARNING: Advanced)"
 msgstr "Opravit nastavení URL kontaktu (Varování: Pokročilé)"
 
-#: ../../mod/contacts.php:277
+#: ../../mod/contacts.php:309
 msgid "View conversations"
 msgstr "Zobrazit konverzace"
 
-#: ../../mod/contacts.php:278
+#: ../../mod/contacts.php:312
 msgid "Delete contact"
 msgstr "Odstranit kontakt"
 
-#: ../../mod/contacts.php:280
+#: ../../mod/contacts.php:314
 msgid "Last updated: "
 msgstr "Poslední aktualizace:"
 
-#: ../../mod/contacts.php:281
+#: ../../mod/contacts.php:315
 msgid "Update public posts: "
 msgstr "Aktualizace veřejných příspěvků:"
 
-#: ../../mod/contacts.php:283
+#: ../../mod/contacts.php:317 ../../mod/admin.php:701
 msgid "Update now"
 msgstr "Aktualizovat"
 
-#: ../../mod/contacts.php:286
+#: ../../mod/contacts.php:320
 msgid "Unblock this contact"
 msgstr "Odblokovat tento kontakt"
 
-#: ../../mod/contacts.php:286
+#: ../../mod/contacts.php:320
 msgid "Block this contact"
 msgstr "Blokovat tento kontakt"
 
-#: ../../mod/contacts.php:287
+#: ../../mod/contacts.php:321
 msgid "Unignore this contact"
 msgstr "Přestat ignorovat tento kontakt"
 
-#: ../../mod/contacts.php:287
+#: ../../mod/contacts.php:321
 msgid "Ignore this contact"
 msgstr "Ignorovat tento kontakt"
 
-#: ../../mod/contacts.php:290
+#: ../../mod/contacts.php:324
 msgid "Currently blocked"
 msgstr "V současnosti zablokováno"
 
-#: ../../mod/contacts.php:291
+#: ../../mod/contacts.php:325
 msgid "Currently ignored"
 msgstr "V současnosti ignorováno"
 
-#: ../../mod/contacts.php:322 ../../include/nav.php:109
-#: ../../include/acl_selectors.php:141 ../../include/acl_selectors.php:156
+#: ../../mod/contacts.php:356 ../../include/nav.php:110
 msgid "Contacts"
 msgstr "Kontakty"
 
-#: ../../mod/contacts.php:324
+#: ../../mod/contacts.php:358
 msgid "Show Blocked Connections"
 msgstr "Zobrazit blokované spojení"
 
-#: ../../mod/contacts.php:324
+#: ../../mod/contacts.php:358
 msgid "Hide Blocked Connections"
 msgstr "Skrýt blokované spojení"
 
-#: ../../mod/contacts.php:326 ../../mod/directory.php:55
+#: ../../mod/contacts.php:360 ../../mod/directory.php:55
 msgid "Finding: "
 msgstr "Zjištění: "
 
-#: ../../mod/contacts.php:327 ../../mod/directory.php:57
+#: ../../mod/contacts.php:361 ../../mod/directory.php:57
 msgid "Find"
 msgstr "Najít"
 
-#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:52
-msgid "Visit $username's profile"
-msgstr "Navštívit profil uživatele $username"
-
-#: ../../mod/contacts.php:388 ../../include/conversation.php:597
+#: ../../mod/contacts.php:422 ../../include/conversation.php:612
 msgid "Edit contact"
 msgstr "Editovat kontakt"
 
-#: ../../mod/lostpass.php:27
+#: ../../mod/lostpass.php:16
+msgid "No valid account found."
+msgstr "Nenalezen žádný platný účet."
+
+#: ../../mod/lostpass.php:31
 msgid "Password reset request issued. Check your email."
 msgstr ""
 "Žádost o obnovení hesla vyřízena. Zkontrolujte Vaši e-mailovou schránku."
 
-#: ../../mod/lostpass.php:38
+#: ../../mod/lostpass.php:42
 #, php-format
 msgid "Password reset requested at %s"
-msgstr "Resetování hesla vyžádáno v %s"
+msgstr "Na %s bylo zažádáno o resetování hesla"
 
-#: ../../mod/lostpass.php:60
+#: ../../mod/lostpass.php:64
 msgid ""
 "Request could not be verified. (You may have previously submitted it.) "
 "Password reset failed."
@@ -1176,27 +1350,27 @@ msgstr ""
 "Žádost nemohla být ověřena. (Možná jste ji odeslali již dříve.) Obnovení "
 "hesla se nezdařilo."
 
-#: ../../mod/lostpass.php:78 ../../boot.php:852
+#: ../../mod/lostpass.php:82 ../../boot.php:654
 msgid "Password Reset"
-msgstr "Obnovit heslo"
+msgstr "Obnovení hesla"
 
-#: ../../mod/lostpass.php:79
+#: ../../mod/lostpass.php:83
 msgid "Your password has been reset as requested."
-msgstr "Vaše heslo bylo resetováno jak bylo požadováno."
+msgstr "Vaše heslo bylo na Vaše přání resetováno."
 
-#: ../../mod/lostpass.php:80
+#: ../../mod/lostpass.php:84
 msgid "Your new password is"
 msgstr "Vaše nové heslo je"
 
-#: ../../mod/lostpass.php:81
+#: ../../mod/lostpass.php:85
 msgid "Save or copy your new password - and then"
 msgstr "Uložte si nebo zkopírujte nové heslo - a pak"
 
-#: ../../mod/lostpass.php:82
+#: ../../mod/lostpass.php:86
 msgid "click here to login"
 msgstr "klikněte zde pro přihlášení"
 
-#: ../../mod/lostpass.php:83
+#: ../../mod/lostpass.php:87
 msgid ""
 "Your password may be changed from the <em>Settings</em> page after "
 "successful login."
@@ -1204,11 +1378,11 @@ msgstr ""
 "Vaše heslo může být změněno na stránce <em>nastavení</em> po úspěšném "
 "přihlášení."
 
-#: ../../mod/lostpass.php:114
+#: ../../mod/lostpass.php:118
 msgid "Forgot your Password?"
 msgstr "Zapomněli jste heslo?"
 
-#: ../../mod/lostpass.php:115
+#: ../../mod/lostpass.php:119
 msgid ""
 "Enter your email address and submit to have your password reset. Then check "
 "your email for further instructions."
@@ -1216,246 +1390,267 @@ msgstr ""
 "Zadejte svůj e-mailovou adresu a odešlete žádost o zaslání Vašeho nového "
 "hesla. Poté zkontrolujte svůj e-mail pro další instrukce."
 
-#: ../../mod/lostpass.php:116
+#: ../../mod/lostpass.php:120
 msgid "Nickname or Email: "
 msgstr "Přezdívka nebo e-mail:"
 
-#: ../../mod/lostpass.php:117
+#: ../../mod/lostpass.php:121
 msgid "Reset"
 msgstr "Reset"
 
-#: ../../mod/settings.php:38
+#: ../../mod/settings.php:64
 msgid "Passwords do not match. Password unchanged."
 msgstr "Hesla se neshodují. Heslo nebylo změněno."
 
-#: ../../mod/settings.php:43
+#: ../../mod/settings.php:69
 msgid "Empty passwords are not allowed. Password unchanged."
 msgstr "Prázdné hesla nejsou povolena. Heslo nebylo změněno."
 
-#: ../../mod/settings.php:54
+#: ../../mod/settings.php:80
 msgid "Password changed."
 msgstr "Heslo bylo změněno."
 
-#: ../../mod/settings.php:56
+#: ../../mod/settings.php:82
 msgid "Password update failed. Please try again."
 msgstr "Aktualizace hesla se nezdařila. Zkuste to prosím znovu."
 
-#: ../../mod/settings.php:138
+#: ../../mod/settings.php:161
+msgid "Failed to connect with email account using the settings provided."
+msgstr "Nepodařilo se připojit k e-mailovému účtu pomocí dodaného nastavení."
+
+#: ../../mod/settings.php:188
 msgid " Please use a shorter name."
 msgstr "Prosím použijte kratší jméno."
 
-#: ../../mod/settings.php:140
+#: ../../mod/settings.php:190
 msgid " Name too short."
 msgstr "Jméno je příliš krátké."
 
-#: ../../mod/settings.php:146
+#: ../../mod/settings.php:196
 msgid " Not valid email."
 msgstr "Neplatný e-mail."
 
-#: ../../mod/settings.php:148
+#: ../../mod/settings.php:198
 msgid " Cannot change to that email."
 msgstr "Nelze provést změnu na tento e-mail."
 
-#: ../../mod/settings.php:206
+#: ../../mod/settings.php:257 ../../addon/facebook/facebook.php:297
+#: ../../addon/impressum/impressum.php:64 ../../addon/piwik/piwik.php:89
+#: ../../addon/twitter/twitter.php:275
 msgid "Settings updated."
 msgstr "Nastavení aktualizováno."
 
-#: ../../mod/settings.php:256 ../../mod/settings.php:418
-#: ../../addon/widgets/widgets.php:123
-msgid "Plugin Settings"
-msgstr "Nastavení doplňku"
-
-#: ../../mod/settings.php:257 ../../mod/settings.php:417
-msgid "Account Settings"
+#: ../../mod/settings.php:311 ../../include/nav.php:108
+msgid "Account settings"
 msgstr "Nastavení účtu"
 
-#: ../../mod/settings.php:263
+#: ../../mod/settings.php:312
+msgid "Plugin settings"
+msgstr "Nastavení pluginu"
+
+#: ../../mod/settings.php:322
 msgid "No Plugin settings configured"
 msgstr "Žádný doplněk není nastaven"
 
-#: ../../mod/settings.php:323
+#: ../../mod/settings.php:329 ../../addon/widgets/widgets.php:122
+msgid "Plugin Settings"
+msgstr "Nastavení doplňku"
+
+#: ../../mod/settings.php:382 ../../mod/admin.php:133 ../../mod/admin.php:443
 msgid "Normal Account"
 msgstr "Normální účet"
 
-#: ../../mod/settings.php:324
+#: ../../mod/settings.php:383
 msgid "This account is a normal personal profile"
 msgstr "Tento účet je běžný osobní profil"
 
-#: ../../mod/settings.php:325
+#: ../../mod/settings.php:386 ../../mod/admin.php:134 ../../mod/admin.php:444
 msgid "Soapbox Account"
 msgstr "Soapbox účet"
 
-#: ../../mod/settings.php:326
+#: ../../mod/settings.php:387
 msgid "Automatically approve all connection/friend requests as read-only fans"
 msgstr ""
 "Automaticky schválit všechna spojení / přátelství jako fanoušky s právem "
 "pouze ke čtení"
 
-#: ../../mod/settings.php:327
+#: ../../mod/settings.php:390 ../../mod/admin.php:135 ../../mod/admin.php:445
 msgid "Community/Celebrity Account"
 msgstr "Komunitní účet / Účet celebrity"
 
-#: ../../mod/settings.php:328
+#: ../../mod/settings.php:391
 msgid ""
 "Automatically approve all connection/friend requests as read-write fans"
 msgstr ""
 "Automaticky schvalovat všechny žádosti o spojení / přátelství, jako fanoušky"
 " s právem ke čtení."
 
-#: ../../mod/settings.php:329
+#: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:446
 msgid "Automatic Friend Account"
-msgstr "Automatický účet přítele"
+msgstr "Účet s automatickým schvalováním přátel"
 
-#: ../../mod/settings.php:330
+#: ../../mod/settings.php:395
 msgid "Automatically approve all connection/friend requests as friends"
 msgstr ""
 "Automaticky schvalovat všechny žádosti o spojení / přátelství jako přátele"
 
-#: ../../mod/settings.php:339
-msgid "OpenID: "
-msgstr "OpenID: "
+#: ../../mod/settings.php:405
+msgid "OpenID:"
+msgstr "OpenID:"
+
+#: ../../mod/settings.php:405
+msgid "(Optional) Allow this OpenID to login to this account."
+msgstr "(Volitelné) Povolit OpenID pro přihlášení k tomuto účtu."
+
+#: ../../mod/settings.php:415
+msgid "Publish your default profile in your local site directory?"
+msgstr "Publikovat Váš výchozí profil v místním adresáři webu?"
 
-#: ../../mod/settings.php:339
-msgid "&nbsp;(Optional) Allow this OpenID to login to this account."
-msgstr "&nbsp;(Volitelné) Povolit toto OpenID pro přihlášení k tomuto účtu."
+#: ../../mod/settings.php:421
+msgid "Publish your default profile in the global social directory?"
+msgstr "Publikovat Váš výchozí profil v globální sociálním adresáři?"
 
-#: ../../mod/settings.php:349
-msgid "Publish your default profile in site directory?"
-msgstr "Zveřejnit Váš výchozí profil v místním adresáři?"
+#: ../../mod/settings.php:429
+msgid "Hide your contact/friend list from viewers of your default profile?"
+msgstr ""
+"Skrýt Vaše kontaktní údaje a seznam přátel před návštěvníky ve Vašem "
+"výchozím profilu?"
 
-#: ../../mod/settings.php:361
-msgid "Publish your default profile in global social directory?"
-msgstr "Zveřejnit Váš výchozí profil v globálním sociální adresáři?"
+#: ../../mod/settings.php:433
+msgid "Hide profile details and all your messages from unknown viewers?"
+msgstr "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?"
 
-#: ../../mod/settings.php:377
+#: ../../mod/settings.php:442
 msgid "Profile is <strong>not published</strong>."
 msgstr "Profil <strong>není zveřejněn</strong>."
 
-#: ../../mod/settings.php:398 ../../mod/profile_photo.php:196
+#: ../../mod/settings.php:461 ../../mod/profile_photo.php:196
 msgid "or"
 msgstr "nebo"
 
-#: ../../mod/settings.php:403
+#: ../../mod/settings.php:466
 msgid "Your Identity Address is"
 msgstr "Vaše adresa identity je"
 
-#: ../../mod/settings.php:413
+#: ../../mod/settings.php:480
+msgid "Account Settings"
+msgstr "Nastavení účtu"
+
+#: ../../mod/settings.php:487
 msgid "Export Personal Data"
 msgstr "Export osobních údajů"
 
-#: ../../mod/settings.php:419
+#: ../../mod/settings.php:490
+msgid "Password Settings"
+msgstr "Nastavení hesla"
+
+#: ../../mod/settings.php:491
+msgid "New Password:"
+msgstr "Nové heslo:"
+
+#: ../../mod/settings.php:492
+msgid "Confirm:"
+msgstr "Potvrďte:"
+
+#: ../../mod/settings.php:492
+msgid "Leave password fields blank unless changing"
+msgstr "Pokud nechcete změnit heslo, položku hesla nevyplňujte"
+
+#: ../../mod/settings.php:496
 msgid "Basic Settings"
 msgstr "Základní nastavení"
 
-#: ../../mod/settings.php:420 ../../include/profile_advanced.php:10
+#: ../../mod/settings.php:497 ../../include/profile_advanced.php:10
 msgid "Full Name:"
 msgstr "Celé jméno:"
 
-#: ../../mod/settings.php:421
+#: ../../mod/settings.php:498
 msgid "Email Address:"
 msgstr "E-mailová adresa:"
 
-#: ../../mod/settings.php:422
+#: ../../mod/settings.php:499
 msgid "Your Timezone:"
 msgstr "Vaše časové pásmo:"
 
-#: ../../mod/settings.php:423
+#: ../../mod/settings.php:500
 msgid "Default Post Location:"
 msgstr "Výchozí umístění příspěvků:"
 
-#: ../../mod/settings.php:424
+#: ../../mod/settings.php:501
 msgid "Use Browser Location:"
-msgstr "Použijte prohlížeč Místo:"
+msgstr "Používat umístění dle prohlížeče:"
 
-#: ../../mod/settings.php:425
+#: ../../mod/settings.php:502
 msgid "Display Theme:"
-msgstr "Zobrazit téma:"
+msgstr "Vybrat grafickou šablonu:"
 
-#: ../../mod/settings.php:427
+#: ../../mod/settings.php:506
 msgid "Security and Privacy Settings"
 msgstr "Nastavení zabezpečení a soukromí"
 
-#: ../../mod/settings.php:428
+#: ../../mod/settings.php:508
 msgid "Maximum Friend Requests/Day:"
 msgstr "Maximální počet žádostí o přátelství za den:"
 
-#: ../../mod/settings.php:429
+#: ../../mod/settings.php:508
 msgid "(to prevent spam abuse)"
 msgstr "(Aby se zabránilo spamu)"
 
-#: ../../mod/settings.php:430
+#: ../../mod/settings.php:509
+msgid "Default Post Permissions"
+msgstr "Výchozí oprávnění pro příspěvek"
+
+#: ../../mod/settings.php:510
+msgid "(click to open/close)"
+msgstr "(Klikněte pro otevření/zavření)"
+
+#: ../../mod/settings.php:514
 msgid "Allow friends to post to your profile page:"
 msgstr "Povolit přátelům příspěvky na Vaši profilovou stránku:"
 
-#: ../../mod/settings.php:431
-msgid "Automatically expire (delete) posts older than"
-msgstr "Automaticky smazat příspěvky starší než"
+#: ../../mod/settings.php:515
+msgid "Automatically expire posts after days:"
+msgstr "Po kolika dnech automaticky expirovat příspěvky:"
 
-#: ../../mod/settings.php:432 ../../include/datetime.php:154
-msgid "days"
-msgstr "dnů"
+#: ../../mod/settings.php:515
+msgid "If empty, posts will not expire. Expired posts will be deleted"
+msgstr ""
+"Pokud je prázdné, příspěvky nebudou nikdy expirovat. Expirované příspěvky "
+"budou vymazány"
 
-#: ../../mod/settings.php:433
+#: ../../mod/settings.php:524
 msgid "Notification Settings"
 msgstr "Nastavení notifikací"
 
-#: ../../mod/settings.php:434
+#: ../../mod/settings.php:525
 msgid "Send a notification email when:"
-msgstr "Posílat e-mailové upozornění když: "
+msgstr "Poslat notifikaci e-mailem, když"
 
-#: ../../mod/settings.php:435
+#: ../../mod/settings.php:526
 msgid "You receive an introduction"
-msgstr "Obdržíte žádost o propojení"
+msgstr "obdržíte žádost o propojení"
 
-#: ../../mod/settings.php:436
+#: ../../mod/settings.php:527
 msgid "Your introductions are confirmed"
 msgstr "Vaše žádosti jsou potvrzeny"
 
-#: ../../mod/settings.php:437
+#: ../../mod/settings.php:528
 msgid "Someone writes on your profile wall"
-msgstr "Někdo píše na Vaši profilovou stránku"
+msgstr "někdo Vám napíše na Vaši profilovou stránku"
 
-#: ../../mod/settings.php:438
+#: ../../mod/settings.php:529
 msgid "Someone writes a followup comment"
-msgstr "Někdo píše následný komentář"
+msgstr "někdo Vám napíše následný komentář"
 
-#: ../../mod/settings.php:439
+#: ../../mod/settings.php:530
 msgid "You receive a private message"
-msgstr "Obdržel jste soukromou zprávu"
-
-#: ../../mod/settings.php:440
-msgid "Password Settings"
-msgstr "Nastavení hesla"
-
-#: ../../mod/settings.php:441
-msgid "Leave password fields blank unless changing"
-msgstr "Pokud nechcete změnit heslo, položku hesla nevyplňujte"
-
-#: ../../mod/settings.php:442
-msgid "New Password:"
-msgstr "Nové heslo:"
-
-#: ../../mod/settings.php:443
-msgid "Confirm:"
-msgstr "Potvrďte:"
-
-#: ../../mod/settings.php:444
-msgid "Advanced Page Settings"
-msgstr "Pokročilé nastavení stránky"
-
-#: ../../mod/settings.php:459
-msgid "Default Post Permissions"
-msgstr "Výchozí oprávnění pro příspěvek"
-
-#: ../../mod/settings.php:460
-msgid "(click to open/close)"
-msgstr "(Klikněte pro otevření/zavření)"
+msgstr "obdržíte soukromou zprávu"
 
-#: ../../mod/settings.php:473
+#: ../../mod/settings.php:534
 msgid "Email/Mailbox Setup"
 msgstr "Nastavení e-mailu"
 
-#: ../../mod/settings.php:474
+#: ../../mod/settings.php:535
 msgid ""
 "If you wish to communicate with email contacts using this service "
 "(optional), please specify how to connect to your mailbox."
@@ -1463,37 +1658,49 @@ msgstr ""
 "Pokud chcete komunikovat pomocí této služby s Vašimi kontakty z e-mailu "
 "(volitelné), uveďte, jak se připojit k Vaší e-mailové schránce."
 
-#: ../../mod/settings.php:475
+#: ../../mod/settings.php:536
+msgid "Last successful email check:"
+msgstr "Poslední úspěšná kontrola e-mailu:"
+
+#: ../../mod/settings.php:537
+msgid "Email access is disabled on this site."
+msgstr "Přístup k elektronické poště je na tomto serveru zakázán."
+
+#: ../../mod/settings.php:538
 msgid "IMAP server name:"
 msgstr "jméno IMAP serveru:"
 
-#: ../../mod/settings.php:477
+#: ../../mod/settings.php:539
 msgid "IMAP port:"
 msgstr "IMAP port:"
 
-#: ../../mod/settings.php:479
-msgid "Security (TLS or SSL):"
-msgstr "Zabezpečení (TLS nebo SSL):"
+#: ../../mod/settings.php:540
+msgid "Security:"
+msgstr "Zabezpečení:"
 
-#: ../../mod/settings.php:481
+#: ../../mod/settings.php:540
+msgid "None"
+msgstr "Žádný"
+
+#: ../../mod/settings.php:541
 msgid "Email login name:"
 msgstr "přihlašovací jméno k e-mailu:"
 
-#: ../../mod/settings.php:483
+#: ../../mod/settings.php:542
 msgid "Email password:"
 msgstr "heslo k Vašemu e-mailu:"
 
-#: ../../mod/settings.php:484
-msgid "Reply-to address (Optional):"
-msgstr "Odpovědět na adresu (nepovinné):"
+#: ../../mod/settings.php:543
+msgid "Reply-to address:"
+msgstr "Odpovědět na adresu:"
 
-#: ../../mod/settings.php:486
+#: ../../mod/settings.php:544
 msgid "Send public posts to all email contacts:"
 msgstr "Poslat veřejné příspěvky na všechny e-mailové kontakty:"
 
-#: ../../mod/settings.php:488
-msgid "Email access is disabled on this site."
-msgstr "Přístup k elektronické poště je na tomto serveru zakázán."
+#: ../../mod/settings.php:549
+msgid "Advanced Page Settings"
+msgstr "Pokročilé nastavení stránky"
 
 #: ../../mod/manage.php:37
 #, php-format
@@ -1516,15 +1723,23 @@ msgstr ""
 msgid "Select an identity to manage: "
 msgstr "Vyberte identitu pro správu:"
 
-#: ../../mod/network.php:18
-msgid "Normal View"
-msgstr "Normální zobrazení"
+#: ../../mod/network.php:27
+msgid "View Conversations"
+msgstr "Zobrazit konverzace"
+
+#: ../../mod/network.php:29
+msgid "View New Items"
+msgstr "Zobrazit nové položky"
+
+#: ../../mod/network.php:35
+msgid "View Any Items"
+msgstr "Zobrazit všechny položky"
 
-#: ../../mod/network.php:20
-msgid "New Item View"
-msgstr "Zobrazení nových položek"
+#: ../../mod/network.php:43
+msgid "View Starred Items"
+msgstr "Zobrazit položky označené hvězdu"
 
-#: ../../mod/network.php:64
+#: ../../mod/network.php:94
 #, php-format
 msgid "Warning: This group contains %s member from an insecure network."
 msgid_plural ""
@@ -1533,135 +1748,239 @@ msgstr[0] "Upozornění: Tato skupina obsahuje %s člena z nezabezpečené sít
 msgstr[1] "Upozornění: Tato skupina obsahuje %s členy z nezabezpečené sítě."
 msgstr[2] "Upozornění: Tato skupina obsahuje %s členy z nezabezpečené sítě."
 
-#: ../../mod/network.php:67
+#: ../../mod/network.php:97
 msgid "Private messages to this group are at risk of public disclosure."
 msgstr "Soukromé zprávy této skupině jsou vystaveny riziku prozrazení."
 
-#: ../../mod/network.php:129
+#: ../../mod/network.php:164
 msgid "No such group"
 msgstr "Žádná taková skupina"
 
-#: ../../mod/network.php:140
+#: ../../mod/network.php:175
 msgid "Group is empty"
 msgstr "Skupina je prázdná"
 
-#: ../../mod/network.php:144
+#: ../../mod/network.php:180
 msgid "Group: "
 msgstr "Skupina:"
 
-#: ../../mod/network.php:154
+#: ../../mod/network.php:190
 msgid "Contact: "
 msgstr "Kontakt:"
 
-#: ../../mod/network.php:156
+#: ../../mod/network.php:192
 msgid "Private messages to this person are at risk of public disclosure."
 msgstr "Soukromé zprávy této osobě jsou vystaveny riziku prozrazení."
 
-#: ../../mod/network.php:161
+#: ../../mod/network.php:197
 msgid "Invalid contact."
 msgstr "Neplatný kontakt."
 
-#: ../../mod/network.php:262 ../../mod/register.php:465
-#: ../../mod/profile.php:265 ../../mod/display.php:147
-msgid ""
-"Shared content is covered by the <a "
-"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
-"Attribution 3.0</a> license."
-msgstr ""
-"Sdílený obsah je v souladu s <a "
-"href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative "
-"3.0</a> licencí."
-
-#: ../../mod/notes.php:41 ../../mod/apps.php:8
-msgid "Private Notes"
-msgstr "Soukromé poznámky"
-
-#: ../../mod/notes.php:60
+#: ../../mod/notes.php:74
 msgid "Save"
 msgstr "Uložit"
 
-#: ../../mod/attach.php:6
-msgid "Item not available."
-msgstr "Položka není k dispozici."
-
-#: ../../mod/attach.php:16
-msgid "Item was not found."
-msgstr "Položka nebyla nalezena."
+#: ../../mod/newmember.php:6
+msgid "Welcome to Friendika"
+msgstr "Vítejte na Friendika"
 
-#: ../../mod/group.php:27
-msgid "Group created."
-msgstr "Skupina vytvořena."
+#: ../../mod/newmember.php:8
+msgid "New Member Checklist"
+msgstr "Seznam doporučení pro nového člena"
 
-#: ../../mod/group.php:33
-msgid "Could not create group."
-msgstr "Nelze vytvořit skupinu."
+#: ../../mod/newmember.php:12
+msgid ""
+"We would like to offer some tips and links to help make your experience "
+"enjoyable. Click any item to visit the relevant page."
+msgstr ""
+"Dovolujeme si Vám nabídnout některé tipy a odkazy, abychom Vám zpříjemnili "
+"práci se systémem Friendika. Kliknutím na libovolnou položku navštívit "
+"příslušnou stránku."
 
-#: ../../mod/group.php:43 ../../mod/group.php:115
-msgid "Group not found."
-msgstr "Skupina nenalezena."
+#: ../../mod/newmember.php:16
+msgid ""
+"On your <em>Settings</em> page -  change your initial password. Also make a "
+"note of your Identity Address. This will be useful in making friends."
+msgstr ""
+"Na stránce <em>Nastavení</em> - změnit výchozí heslo. Poznamenejte si také "
+"adresu své identity. To může být užitečné při navazování přátelství."
 
-#: ../../mod/group.php:56
-msgid "Group name changed."
-msgstr "Název skupiny byl změněn."
+#: ../../mod/newmember.php:18
+msgid ""
+"Review the other settings, particularly the privacy settings. An unpublished"
+" directory listing is like having an unlisted phone number. In general, you "
+"should probably publish your listing - unless all of your friends and "
+"potential friends know exactly how to find you."
+msgstr ""
+"Prohlédněte si další nastavení, a to zejména nastavení soukromí. "
+"Nezveřejnění svého účtu v adresáři je jako mít nezveřejněné telefonní číslo."
+" Obecně platí, že je lepší mít svůj účet zveřejněný, leda by všichni vaši "
+"potenciální přátelé věděli, jak vás přesně najít."
 
-#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:255
+#: ../../mod/newmember.php:20
+msgid ""
+"Upload a profile photo if you have not done so already. Studies have shown "
+"that people with real photos of themselves are ten times more likely to make"
+" friends than people who do not."
+msgstr ""
+"Nahrajte si svou profilovou fotku, pokud jste tak již neučinili. Studie "
+"ukázaly, že lidé se skutečnými fotografiemi mají desetkrát častěji přátele "
+"než lidé, kteří nemají."
+
+#: ../../mod/newmember.php:23
+msgid ""
+"Authorise the Facebook Connector if you currently have a Facebook account "
+"and we will (optionally) import all your Facebook friends and conversations."
+msgstr ""
+"Jestliže máte účet na Facebooku, povolte konektor na Facebook a bude možné "
+"(na přání) importovat všechny Vaš přátele na Facebooku a všechny Vaše "
+"konverzace."
+
+#: ../../mod/newmember.php:28
+msgid ""
+"Enter your email access information on your Settings page if you wish to "
+"import and interact with friends or mailing lists from your email INBOX"
+msgstr ""
+"na stránce Nastavení zadejte informace pro přístup k Vaší e-mailové stránce,"
+" pokud si přejete importovat a komunikovat s přáteli nebo distribučními "
+"skupinami z Vaší e-mailové schránky"
+
+#: ../../mod/newmember.php:30
+msgid ""
+"Edit your <strong>default</strong> profile to your liking. Review the "
+"settings for hiding your list of friends and hiding the profile from unknown"
+" visitors."
+msgstr ""
+"Upravit <strong>výchozí</strong> profil podle vašich představ. Prověřte "
+"nastavení pro skrytí Vašeho  seznamu přátel a skrytí profilu před neznámými "
+"návštěvníky."
+
+#: ../../mod/newmember.php:32
+msgid ""
+"Set some public keywords for your default profile which describe your "
+"interests. We may be able to find other people with similar interests and "
+"suggest friendships."
+msgstr ""
+"Nastavte si nějaká veřejné klíčová slova pro výchozí profil, která popisují "
+"vaše zájmy. Friendika Vám může nalézt další lidi s podobnými zájmy a "
+"navrhnout přátelství."
+
+#: ../../mod/newmember.php:34
+msgid ""
+"Your Contacts page is your gateway to managing friendships and connecting "
+"with friends on other networks. Typically you enter their address or site "
+"URL in the <em>Connect</em> dialog."
+msgstr ""
+"Stránka Kontakty je Vaším odrazovým můstkem k řízení přátelství a spojení s "
+"kamarády v jiných sítích. Obvykle zadáte jejich adresu nebo adresu URL do "
+"dialogu <em>Připojit</em>."
+
+#: ../../mod/newmember.php:36
+msgid ""
+"The Directory page lets you find other people in this network or other "
+"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on "
+"their profile page. Provide your own Identity Address if requested."
+msgstr ""
+"Stránka Adresář Vám pomůže najít další lidi na tomto serveru nebo v jiných "
+"propojených serverech. Prostřednictvím odkazů <em>Připojení</em> nebo "
+"<em>Následovat</em> si prohlédněte jejich profilovou stránku. Uveďte svou "
+"vlastní adresu identity, je-li požadována."
+
+#: ../../mod/newmember.php:38
+msgid ""
+"Once you have made some friends, organize them into private conversation "
+"groups from the sidebar of your Contacts page and then you can interact with"
+" each group privately on your Network page."
+msgstr ""
+"Jakmile získáte nějaké přátele, uspořádejte si je do soukromých "
+"konverzačních skupin na postranním panelu vaší stránky Kontakty a pak můžete"
+" komunikovat s každou touto skupinu soukromě prostřednictvím stránky Síť."
+
+#: ../../mod/newmember.php:40
+msgid ""
+"Our <strong>help</strong> pages may be consulted for detail on other program"
+" features and resources."
+msgstr ""
+"Na stránkách <strong>Nápověda</strong> naleznete nejen další podrobnosti o "
+"všech funkcích Friendika ale také další zdroje informací."
+
+#: ../../mod/attach.php:8
+msgid "Item not available."
+msgstr "Položka není k dispozici."
+
+#: ../../mod/attach.php:20
+msgid "Item was not found."
+msgstr "Položka nebyla nalezena."
+
+#: ../../mod/group.php:27
+msgid "Group created."
+msgstr "Skupina vytvořena."
+
+#: ../../mod/group.php:33
+msgid "Could not create group."
+msgstr "Nelze vytvořit skupinu."
+
+#: ../../mod/group.php:43 ../../mod/group.php:123
+msgid "Group not found."
+msgstr "Skupina nenalezena."
+
+#: ../../mod/group.php:56
+msgid "Group name changed."
+msgstr "Název skupiny byl změněn."
+
+#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:265
 msgid "Permission denied"
 msgstr "Nedostatečné oprávnění"
 
-#: ../../mod/group.php:74
+#: ../../mod/group.php:82
 msgid "Create a group of contacts/friends."
 msgstr "Vytvořit skupinu kontaktů / přátel."
 
-#: ../../mod/group.php:75 ../../mod/group.php:158
+#: ../../mod/group.php:83 ../../mod/group.php:166
 msgid "Group Name: "
 msgstr "Název skupiny:"
 
-#: ../../mod/group.php:90
+#: ../../mod/group.php:98
 msgid "Group removed."
 msgstr "Skupina odstraněna. "
 
-#: ../../mod/group.php:92
+#: ../../mod/group.php:100
 msgid "Unable to remove group."
 msgstr "Nelze odstranit skupinu."
 
-#: ../../mod/group.php:156 ../../mod/profperm.php:96
+#: ../../mod/group.php:164 ../../mod/profperm.php:105
 msgid "Click on a contact to add or remove."
 msgstr "Klikněte na kontakt pro přidání nebo odebrání"
 
-#: ../../mod/group.php:157
+#: ../../mod/group.php:165
 msgid "Group Editor"
 msgstr "Editor skupin"
 
-#: ../../mod/group.php:172
+#: ../../mod/group.php:180
 msgid "Members"
 msgstr "Členové"
 
-#: ../../mod/group.php:186
+#: ../../mod/group.php:195
 msgid "All Contacts"
 msgstr "Všechny kontakty"
 
-#: ../../mod/profperm.php:25 ../../mod/profperm.php:46
+#: ../../mod/profperm.php:25 ../../mod/profperm.php:55
 msgid "Invalid profile identifier."
 msgstr "Neplatný identifikátor profilu."
 
-#: ../../mod/profperm.php:92
+#: ../../mod/profperm.php:101
 msgid "Profile Visibility Editor"
 msgstr "Editor viditelnosti profilu "
 
-#: ../../mod/profperm.php:94 ../../mod/profile.php:116
-#: ../../include/profile_advanced.php:7
-msgid "Profile"
-msgstr "Profil"
-
-#: ../../mod/profperm.php:105
+#: ../../mod/profperm.php:114
 msgid "Visible To"
 msgstr "Viditelný pro"
 
-#: ../../mod/profperm.php:116
+#: ../../mod/profperm.php:128
 msgid "All Contacts (with secure profile access)"
 msgstr "Všechny kontakty (se zabezpečeným přístupovým profilem )"
 
-#: ../../mod/viewcontacts.php:25 ../../boot.php:2059
+#: ../../mod/viewcontacts.php:25 ../../include/text.php:555
 msgid "View Contacts"
 msgstr "Zobrazit kontakty"
 
@@ -1669,39 +1988,47 @@ msgstr "Zobrazit kontakty"
 msgid "No contacts."
 msgstr "Žádné kontakty."
 
-#: ../../mod/register.php:49
+#: ../../mod/register.php:53
+msgid "An invitation is required."
+msgstr "Pozvánka je vyžadována."
+
+#: ../../mod/register.php:58
+msgid "Invitation could not be verified."
+msgstr "Pozvánka nemohla být ověřena."
+
+#: ../../mod/register.php:66
 msgid "Invalid OpenID url"
 msgstr "Neplatný odkaz OpenID"
 
-#: ../../mod/register.php:64
+#: ../../mod/register.php:81
 msgid "Please enter the required information."
 msgstr "Zadejte prosím požadované informace."
 
-#: ../../mod/register.php:76
+#: ../../mod/register.php:95
 msgid "Please use a shorter name."
 msgstr "Použijte prosím kratší jméno."
 
-#: ../../mod/register.php:78
+#: ../../mod/register.php:97
 msgid "Name too short."
 msgstr "Jméno je příliš krátké."
 
-#: ../../mod/register.php:93
+#: ../../mod/register.php:112
 msgid "That doesn't appear to be your full (First Last) name."
 msgstr "Nezdá se, že by to bylo vaše celé jméno (křestní jméno a příjmení)."
 
-#: ../../mod/register.php:97
+#: ../../mod/register.php:117
 msgid "Your email domain is not among those allowed on this site."
 msgstr "Váš e-mailová doména není na tomto serveru mezi povolenými."
 
-#: ../../mod/register.php:100
+#: ../../mod/register.php:120
 msgid "Not a valid email address."
 msgstr "Neplatná e-mailová adresa."
 
-#: ../../mod/register.php:106
+#: ../../mod/register.php:130
 msgid "Cannot use that email."
 msgstr "Tento e-mail nelze použít."
 
-#: ../../mod/register.php:111
+#: ../../mod/register.php:136
 msgid ""
 "Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
 "must also begin with a letter."
@@ -1709,55 +2036,55 @@ msgstr ""
 "Vaše \"přezdívka\" může obsahovat pouze \"a-z\", \"0-9\", \"-\", a \"_\", a "
 "musí začínat písmenem."
 
-#: ../../mod/register.php:117 ../../mod/register.php:217
+#: ../../mod/register.php:142 ../../mod/register.php:243
 msgid "Nickname is already registered. Please choose another."
 msgstr "Přezdívka je již registrována. Prosím vyberte jinou."
 
-#: ../../mod/register.php:136
+#: ../../mod/register.php:161
 msgid "SERIOUS ERROR: Generation of security keys failed."
 msgstr "Závažná chyba: Generování bezpečnostních klíčů se nezdařilo."
 
-#: ../../mod/register.php:203
+#: ../../mod/register.php:229
 msgid "An error occurred during registration. Please try again."
 msgstr "Došlo k chybě při registraci. Zkuste to prosím znovu."
 
-#: ../../mod/register.php:239
+#: ../../mod/register.php:265
 msgid "An error occurred creating your default profile. Please try again."
 msgstr ""
 "Došlo k chybě při vytváření Vašeho výchozího profilu. Zkuste to prosím "
 "znovu."
 
-#: ../../mod/register.php:333 ../../mod/regmod.php:96
+#: ../../mod/register.php:367 ../../mod/regmod.php:52
 #, php-format
 msgid "Registration details for %s"
 msgstr "Registrační údaje pro %s"
 
-#: ../../mod/register.php:341
+#: ../../mod/register.php:375
 msgid ""
 "Registration successful. Please check your email for further instructions."
 msgstr ""
 "Registrace úspěšná. Zkontrolujte prosím svůj e-mail pro další instrukce."
 
-#: ../../mod/register.php:345
+#: ../../mod/register.php:379
 msgid "Failed to send email message. Here is the message that failed."
 msgstr ""
 "Nepodařilo se odeslat zprávu na e-mail. Zde je zpráva, která nebyla "
 "odeslána."
 
-#: ../../mod/register.php:350
+#: ../../mod/register.php:384
 msgid "Your registration can not be processed."
 msgstr "Vaši registraci nelze zpracovat."
 
-#: ../../mod/register.php:383
+#: ../../mod/register.php:421
 #, php-format
 msgid "Registration request at %s"
 msgstr "Žádost o registraci na %s"
 
-#: ../../mod/register.php:392
+#: ../../mod/register.php:430
 msgid "Your registration is pending approval by the site owner."
 msgstr "Vaše registrace čeká na schválení vlastníkem serveru."
 
-#: ../../mod/register.php:440
+#: ../../mod/register.php:479
 msgid ""
 "You may (optionally) fill in this form via OpenID by supplying your OpenID "
 "and clicking 'Register'."
@@ -1765,7 +2092,7 @@ msgstr ""
 "Tento formulář můžete (volitelně) vyplnit s pomocí OpenID tím, že vyplníte "
 "své OpenID a kliknutete na tlačítko 'Zaregistrovat'."
 
-#: ../../mod/register.php:441
+#: ../../mod/register.php:480
 msgid ""
 "If you are not familiar with OpenID, please leave that field blank and fill "
 "in the rest of the items."
@@ -1773,27 +2100,35 @@ msgstr ""
 "Pokud nepoužíváte OpenID, nechte prosím toto pole prázdné a vyplňte zbylé "
 "položky."
 
-#: ../../mod/register.php:442
+#: ../../mod/register.php:481
 msgid "Your OpenID (optional): "
 msgstr "Vaše OpenID (nepovinné):"
 
-#: ../../mod/register.php:456
+#: ../../mod/register.php:495
 msgid "Include your profile in member directory?"
 msgstr "Uvést Váš profil v adresáři členů?"
 
-#: ../../mod/register.php:472
+#: ../../mod/register.php:511
+msgid "Membership on this site is by invitation only."
+msgstr "Členství na tomto webu je pouze na pozvání."
+
+#: ../../mod/register.php:512
+msgid "Your invitation ID: "
+msgstr "Vaše pozvání ID:"
+
+#: ../../mod/register.php:515 ../../mod/admin.php:299
 msgid "Registration"
 msgstr "Registrace"
 
-#: ../../mod/register.php:480
+#: ../../mod/register.php:523
 msgid "Your Full Name (e.g. Joe Smith): "
 msgstr "Vaše celé jméno (např. Jan Novák):"
 
-#: ../../mod/register.php:481
+#: ../../mod/register.php:524
 msgid "Your Email Address: "
 msgstr "Vaše e-mailová adresa:"
 
-#: ../../mod/register.php:482
+#: ../../mod/register.php:525
 msgid ""
 "Choose a profile nickname. This must begin with a text character. Your "
 "profile address on this site will then be "
@@ -1802,39 +2137,41 @@ msgstr ""
 "Vyberte přezdívku k profilu. Ta musí začít s textovým znakem. Vaše profilová"
 " adresa na tomto webu pak bude \"<strong>přezdívka@$sitename</strong>\"."
 
-#: ../../mod/register.php:483
+#: ../../mod/register.php:526
 msgid "Choose a nickname: "
 msgstr "Vyberte přezdívku:"
 
-#: ../../mod/register.php:486 ../../include/nav.php:59 ../../boot.php:835
+#: ../../mod/register.php:529 ../../include/nav.php:59 ../../boot.php:637
 msgid "Register"
 msgstr "Registrovat"
 
-#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:774
-#: ../../include/conversation.php:20
+#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:954
+#: ../../include/diaspora.php:446 ../../include/conversation.php:26
+#: ../../include/conversation.php:35
 msgid "status"
 msgstr "Stav"
 
-#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:778
-#: ../../include/conversation.php:25
+#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:958
+#: ../../include/diaspora.php:463 ../../include/conversation.php:43
 #, php-format
 msgid "%1$s likes %2$s's %3$s"
 msgstr "%1$s má rád %2$s' na %3$s"
 
-#: ../../mod/like.php:129 ../../include/conversation.php:28
+#: ../../mod/like.php:129 ../../include/diaspora.php:465
+#: ../../include/conversation.php:46
 #, php-format
 msgid "%1$s doesn't like %2$s's %3$s"
 msgstr "%1$s nemá rád %2$s na %3$s"
 
-#: ../../mod/friendika.php:43
+#: ../../mod/friendika.php:42
 msgid "This is Friendika version"
 msgstr "Toto je Friendika verze"
 
-#: ../../mod/friendika.php:44
+#: ../../mod/friendika.php:43
 msgid "running at web location"
 msgstr "běžící na webu"
 
-#: ../../mod/friendika.php:46
+#: ../../mod/friendika.php:45
 msgid ""
 "Shared content within the Friendika network is provided under the <a "
 "href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
@@ -1844,7 +2181,7 @@ msgstr ""
 "href=\"http://creativecommons.org/licenses/by/3.0/cz/\">licencí Creative "
 "Commons Attribution 3.0</a>"
 
-#: ../../mod/friendika.php:48
+#: ../../mod/friendika.php:47
 msgid ""
 "Please visit <a "
 "href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn "
@@ -1853,11 +2190,11 @@ msgstr ""
 "Pokud se chcete dozvědět více o projektu Friendika, navštivte, prosím, <a "
 "href=\"http://project.friendika.com\">Project.Friendika.com</a>"
 
-#: ../../mod/friendika.php:50
+#: ../../mod/friendika.php:49
 msgid "Bug reports and issues: please visit"
 msgstr "Pro hlášení chyb a námětů na změny navštivte:"
 
-#: ../../mod/friendika.php:51
+#: ../../mod/friendika.php:50
 msgid ""
 "Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - "
 "dot com"
@@ -1865,84 +2202,80 @@ msgstr ""
 "Návrhy, chválu, dary, atd. - prosím pošlete na e-mail \"Info\" na Friendika "
 "tečka com"
 
-#: ../../mod/friendika.php:56
+#: ../../mod/friendika.php:55
 msgid "Installed plugins/addons/apps"
 msgstr "Nainstalované doplňky/aplikace"
 
-#: ../../mod/friendika.php:64
+#: ../../mod/friendika.php:63
 msgid "No installed plugins/addons/apps"
 msgstr "Nejsou žádné nainstalované doplňky/aplikace"
 
-#: ../../mod/regmod.php:12
-msgid "Please login."
-msgstr "Přihlaste se, prosím."
+#: ../../mod/regmod.php:61
+msgid "Account approved."
+msgstr "Účet schválen."
 
-#: ../../mod/regmod.php:56
+#: ../../mod/regmod.php:93
 #, php-format
 msgid "Registration revoked for %s"
 msgstr "Registrace zrušena pro %s"
 
 #: ../../mod/regmod.php:105
-msgid "Account approved."
-msgstr "Účet schválen."
-
-#: ../../mod/update_network.php:22 ../../mod/update_profile.php:41
-msgid "[Embedded content - reload page to view]"
-msgstr "[Vložený obsah - obnovení stránky pro zobrazení]"
+msgid "Please login."
+msgstr "Přihlaste se, prosím."
 
-#: ../../mod/item.php:37
+#: ../../mod/item.php:81
 msgid "Unable to locate original post."
 msgstr "Nelze nalézt původní příspěvek."
 
-#: ../../mod/item.php:128
+#: ../../mod/item.php:196
 msgid "Empty post discarded."
 msgstr "Prázdný příspěvek odstraněn."
 
-#: ../../mod/item.php:214 ../../mod/message.php:93
-#: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88
-#: ../../mod/wall_upload.php:95
+#: ../../mod/item.php:296 ../../mod/message.php:93
+#: ../../mod/wall_upload.php:81 ../../mod/wall_upload.php:90
+#: ../../mod/wall_upload.php:97
 msgid "Wall Photos"
 msgstr "Fotografie na zdi"
 
-#: ../../mod/item.php:517 ../../mod/item.php:560 ../../mod/item.php:583
-#: ../../mod/item.php:624 ../../mod/dfrn_notify.php:193
-#: ../../mod/dfrn_notify.php:401 ../../mod/dfrn_notify.php:444
-#: ../../mod/dfrn_notify.php:530 ../../mod/dfrn_notify.php:571
+#: ../../mod/item.php:623 ../../mod/item.php:668 ../../mod/item.php:691
+#: ../../mod/item.php:734 ../../mod/dfrn_notify.php:293
+#: ../../mod/dfrn_notify.php:503 ../../mod/dfrn_notify.php:548
+#: ../../mod/dfrn_notify.php:634 ../../mod/dfrn_notify.php:677
 msgid "noreply"
 msgstr "bez odpovědi"
 
-#: ../../mod/item.php:559 ../../mod/item.php:623 ../../mod/dfrn_notify.php:570
+#: ../../mod/item.php:667 ../../mod/item.php:733 ../../mod/dfrn_notify.php:676
 msgid "Administrator@"
-msgstr "Správce@"
+msgstr "Administrator@"
 
-#: ../../mod/item.php:562 ../../mod/dfrn_notify.php:446
-#: ../../mod/dfrn_notify.php:573
+#: ../../mod/item.php:670 ../../mod/dfrn_notify.php:550
+#: ../../mod/dfrn_notify.php:679
 #, php-format
 msgid "%s commented on an item at %s"
 msgstr "%s okomentoval položku v %s"
 
-#: ../../mod/item.php:626
+#: ../../mod/item.php:736
 #, php-format
 msgid "%s posted to your profile wall at %s"
 msgstr "%s přidal příspěvek na vaší profilovou zeď v %s"
 
-#: ../../mod/item.php:655
+#: ../../mod/item.php:765
 msgid "System error. Post not saved."
 msgstr "Chyba systému. Příspěvek nebyl uložen."
 
-#: ../../mod/item.php:674
+#: ../../mod/item.php:784
 #, php-format
 msgid ""
 "This message was sent to you by %s, a member of the Friendika social "
 "network."
 msgstr "Tuto zprávu Vám zaslal %s, člen sociální sítě Friendika."
 
-#: ../../mod/item.php:676
+#: ../../mod/item.php:786
 #, php-format
 msgid "You may visit them online at %s"
 msgstr "Můžete je navštívit online na adrese %s"
 
-#: ../../mod/item.php:677
+#: ../../mod/item.php:787
 msgid ""
 "Please contact the sender by replying to this post if you do not wish to "
 "receive these messages."
@@ -1950,15 +2283,11 @@ msgstr ""
 "Pokud nechcete dostávat tyto zprávy, kontaktujte prosím odesilatele odpovědí"
 " na tento záznam."
 
-#: ../../mod/item.php:679
+#: ../../mod/item.php:789
 #, php-format
 msgid "%s posted an update."
 msgstr "%s poslal aktualizaci."
 
-#: ../../mod/item.php:730 ../../mod/display.php:25 ../../mod/display.php:142
-msgid "Item not found."
-msgstr "Položka nenalezena."
-
 #: ../../mod/profile_photo.php:28
 msgid "Image uploaded but image cropping failed."
 msgstr "Obrázek byl odeslán, ale jeho oříznutí se nesdařilo."
@@ -2014,6 +2343,10 @@ msgstr "Editace dokončena"
 msgid "Image uploaded successfully."
 msgstr "Obrázek byl úspěšně nahrán."
 
+#: ../../mod/hcard.php:11 ../../mod/profile.php:11 ../../boot.php:792
+msgid "No profile"
+msgstr "Žádný profil"
+
 #: ../../mod/removeme.php:42 ../../mod/removeme.php:45
 msgid "Remove My Account"
 msgstr "Odstranit můj účet"
@@ -2050,7 +2383,7 @@ msgstr "Zpráva odeslána."
 msgid "Message could not be sent."
 msgstr "Zprávu se nepodařilo odeslat."
 
-#: ../../mod/message.php:125 ../../include/nav.php:101
+#: ../../mod/message.php:125 ../../include/nav.php:102
 msgid "Messages"
 msgstr "Zprávy"
 
@@ -2074,7 +2407,7 @@ msgstr "Zpráva odstraněna."
 msgid "Conversation removed."
 msgstr "Konverzace odstraněna."
 
-#: ../../mod/message.php:172 ../../include/conversation.php:684
+#: ../../mod/message.php:172 ../../include/conversation.php:699
 msgid "Please enter a link URL:"
 msgstr "Zadejte prosím URL odkaz:"
 
@@ -2090,7 +2423,8 @@ msgstr "Adresát:"
 msgid "Subject:"
 msgstr "Předmět:"
 
-#: ../../mod/message.php:185 ../../mod/message.php:319 ../../mod/invite.php:63
+#: ../../mod/message.php:185 ../../mod/message.php:319
+#: ../../mod/invite.php:101
 msgid "Your message:"
 msgstr "Vaše zpráva:"
 
@@ -2118,56 +2452,406 @@ msgstr "Smazat zprávu"
 msgid "Send Reply"
 msgstr "Poslat odpověď"
 
-#: ../../mod/profile.php:11 ../../boot.php:2270
-msgid "No profile"
-msgstr "Žádný profil"
+#: ../../mod/admin.php:66 ../../mod/admin.php:297
+msgid "Site"
+msgstr "Web"
+
+#: ../../mod/admin.php:67 ../../mod/admin.php:460 ../../mod/admin.php:472
+msgid "Users"
+msgstr "Uživatelé"
+
+#: ../../mod/admin.php:68 ../../mod/admin.php:549 ../../mod/admin.php:586
+msgid "Plugins"
+msgstr "Pluginy"
+
+#: ../../mod/admin.php:69
+msgid "Update"
+msgstr "Aktualizace"
+
+#: ../../mod/admin.php:83 ../../mod/admin.php:651
+msgid "Logs"
+msgstr "Logy"
+
+#: ../../mod/admin.php:88
+msgid "User registrations waiting for confirmation"
+msgstr "Registrace uživatele čeká na potvrzení"
+
+#: ../../mod/admin.php:118 ../../mod/admin.php:502 ../../mod/display.php:25
+#: ../../mod/display.php:112 ../../include/items.php:1842
+msgid "Item not found."
+msgstr "Položka nenalezena."
+
+#: ../../mod/admin.php:151 ../../mod/admin.php:296 ../../mod/admin.php:459
+#: ../../mod/admin.php:548 ../../mod/admin.php:585 ../../mod/admin.php:650
+msgid "Administration"
+msgstr "Administrace"
+
+#: ../../mod/admin.php:152
+msgid "Summary"
+msgstr "Shrnutí"
+
+#: ../../mod/admin.php:153
+msgid "Registered users"
+msgstr "Registrovaní uživatelé"
+
+#: ../../mod/admin.php:155
+msgid "Pending registrations"
+msgstr "Čekající registrace"
+
+#: ../../mod/admin.php:156
+msgid "Version"
+msgstr "Verze"
+
+#: ../../mod/admin.php:158
+msgid "Active plugins"
+msgstr "Aktivní pluginy"
+
+#: ../../mod/admin.php:245
+msgid "Site settings updated."
+msgstr "Nastavení webu aktualizováno."
+
+#: ../../mod/admin.php:289
+msgid "Closed"
+msgstr "Uzavřít"
+
+#: ../../mod/admin.php:290
+msgid "Requires approval"
+msgstr "Vyžaduje schválení"
+
+#: ../../mod/admin.php:291
+msgid "Open"
+msgstr "Otevřená"
+
+#: ../../mod/admin.php:300
+msgid "File upload"
+msgstr "Nahrání souborů"
+
+#: ../../mod/admin.php:301
+msgid "Policies"
+msgstr "Politiky"
+
+#: ../../mod/admin.php:302
+msgid "Advanced"
+msgstr "Pokročilé"
+
+#: ../../mod/admin.php:306 ../../addon/statusnet/statusnet.php:459
+msgid "Site name"
+msgstr "Název webu"
+
+#: ../../mod/admin.php:307
+msgid "Banner/Logo"
+msgstr "Banner/logo"
+
+#: ../../mod/admin.php:308
+msgid "System language"
+msgstr "Systémový jazyk"
+
+#: ../../mod/admin.php:309
+msgid "System theme"
+msgstr "Grafická šablona systému "
+
+#: ../../mod/admin.php:311
+msgid "Maximum image size"
+msgstr "Maximální velikost obrazu"
+
+#: ../../mod/admin.php:313
+msgid "Register policy"
+msgstr "Politika registrace"
+
+#: ../../mod/admin.php:314
+msgid "Register text"
+msgstr "Registrace textu"
+
+#: ../../mod/admin.php:315
+msgid "Allowed friend domains"
+msgstr "Povolené domény přátel"
+
+#: ../../mod/admin.php:316
+msgid "Allowed email domains"
+msgstr "Povolené e-mailové domény"
+
+#: ../../mod/admin.php:317
+msgid "Block public"
+msgstr "Blokovat veřejnost"
+
+#: ../../mod/admin.php:318
+msgid "Force publish"
+msgstr "Publikovat"
+
+#: ../../mod/admin.php:319
+msgid "Global directory update URL"
+msgstr "aktualizace URL adresy Globálního adresáře "
+
+#: ../../mod/admin.php:321
+msgid "Block multiple registrations"
+msgstr "Blokovat více registrací"
+
+#: ../../mod/admin.php:322
+msgid "OpenID support"
+msgstr "podpora OpenID"
+
+#: ../../mod/admin.php:323
+msgid "Gravatar support"
+msgstr "podpora Gravatar"
+
+#: ../../mod/admin.php:324
+msgid "Fullname check"
+msgstr "kontrola úplného jména"
+
+#: ../../mod/admin.php:325
+msgid "UTF-8 Regular expressions"
+msgstr "UTF-8 Regulární výrazy"
+
+#: ../../mod/admin.php:326
+msgid "Show Community Page"
+msgstr "Zobrazit stránku komunity"
+
+#: ../../mod/admin.php:327
+msgid "Enable OStatus support"
+msgstr "Zapnout podporu OStatus"
+
+#: ../../mod/admin.php:328
+msgid "Only allow Friendika contacts"
+msgstr "Povolit pouze Friendika kontakty  "
+
+#: ../../mod/admin.php:329
+msgid "Verify SSL"
+msgstr "Ověřit SSL"
+
+#: ../../mod/admin.php:330
+msgid "Proxy user"
+msgstr "Proxy uživatel"
+
+#: ../../mod/admin.php:331
+msgid "Proxy URL"
+msgstr "Proxy URL adresa"
+
+#: ../../mod/admin.php:332
+msgid "Network timeout"
+msgstr "čas síťového spojení vypršelo (timeout)"
+
+#: ../../mod/admin.php:353
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked/unblocked"
+msgstr[0] "%s uživatel zablokován"
+msgstr[1] "%s uživatelů zablokováno / odblokováno"
+msgstr[2] "%s uživatelů zablokováno / odblokováno"
+
+#: ../../mod/admin.php:360
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "%s uživatel smazán"
+msgstr[1] "%s uživatelů smazáno"
+msgstr[2] "%s uživatelů smazáno"
+
+#: ../../mod/admin.php:394
+#, php-format
+msgid "User '%s' deleted"
+msgstr "Uživatel '%s' smazán"
+
+#: ../../mod/admin.php:401
+#, php-format
+msgid "User '%s' unblocked"
+msgstr "Uživatel '%s' odblokován"
+
+#: ../../mod/admin.php:401
+#, php-format
+msgid "User '%s' blocked"
+msgstr "Uživatel '%s' blokován"
+
+#: ../../mod/admin.php:462
+msgid "select all"
+msgstr "Vybrat vše"
+
+#: ../../mod/admin.php:463
+msgid "User registrations waiting for confirm"
+msgstr "Registrace uživatele čeká na potvrzení"
+
+#: ../../mod/admin.php:464
+msgid "Request date"
+msgstr "Datum žádosti"
+
+#: ../../mod/admin.php:464 ../../mod/admin.php:473
+msgid "Email"
+msgstr "E-mail"
 
-#: ../../mod/profile.php:59
+#: ../../mod/admin.php:465
+msgid "No registrations."
+msgstr "Žádné registrace."
+
+#: ../../mod/admin.php:467
+msgid "Deny"
+msgstr "Odmítnout"
+
+#: ../../mod/admin.php:469
+msgid "Block"
+msgstr "Blokovat"
+
+#: ../../mod/admin.php:470
+msgid "Unblock"
+msgstr "Odblokovat"
+
+#: ../../mod/admin.php:473
+msgid "Register date"
+msgstr "Datum registrace"
+
+#: ../../mod/admin.php:473
+msgid "Last login"
+msgstr "Datum posledního přihlášení"
+
+#: ../../mod/admin.php:473
+msgid "Last item"
+msgstr "Poslední položka"
+
+#: ../../mod/admin.php:473
+msgid "Account"
+msgstr "Účet"
+
+#: ../../mod/admin.php:475
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+"Vybraní uživatelé budou smazáni!\\n\\n Vše, co tito uživatelé na těchto "
+"stránkách vytvořili, bude trvale odstraněno!\\n\\n Opravdu pokračovat?"
+
+#: ../../mod/admin.php:476
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+"Uživatel {0} bude smazán!\\n\\n Vše, co tento uživatel na těchto stránkách "
+"vytvořil, bude trvale odstraněno!\\n\\n Opravdu pokračovat?"
+
+#: ../../mod/admin.php:512
+#, php-format
+msgid "Plugin %s disabled."
+msgstr "Plugin %s zakázán."
+
+#: ../../mod/admin.php:516
+#, php-format
+msgid "Plugin %s enabled."
+msgstr "Plugin %s povolen."
+
+#: ../../mod/admin.php:526
+msgid "Disable"
+msgstr "Zakázat"
+
+#: ../../mod/admin.php:528
+msgid "Enable"
+msgstr "Povolit"
+
+#: ../../mod/admin.php:550
+msgid "Toggle"
+msgstr "Přepnout"
+
+#: ../../mod/admin.php:551 ../../include/nav.php:108
+msgid "Settings"
+msgstr "Nastavení"
+
+#: ../../mod/admin.php:613
+msgid "Log settings updated."
+msgstr "Nastavení protokolu aktualizováno."
+
+#: ../../mod/admin.php:653
+msgid "Clear"
+msgstr "Vyčistit"
+
+#: ../../mod/admin.php:659
+msgid "Debugging"
+msgstr "Ladění"
+
+#: ../../mod/admin.php:660
+msgid "Log file"
+msgstr "Soubor s logem"
+
+#: ../../mod/admin.php:660
+msgid "Must be writable by web server. Relative to your Friendika index.php."
+msgstr ""
+"Webový server musí mít práva zápisu . Relativní k index.php Friendika."
+
+#: ../../mod/admin.php:661
+msgid "Log level"
+msgstr "Úroveň auditu"
+
+#: ../../mod/admin.php:702
+msgid "Close"
+msgstr "Uzavřená"
+
+#: ../../mod/admin.php:708
+msgid "FTP Host"
+msgstr "Hostitel FTP"
+
+#: ../../mod/admin.php:709
+msgid "FTP Path"
+msgstr "Cesta FTP"
+
+#: ../../mod/admin.php:710
+msgid "FTP User"
+msgstr "FTP uživatel"
+
+#: ../../mod/admin.php:711
+msgid "FTP Password"
+msgstr "FTP heslo"
+
+#: ../../mod/profile.php:102 ../../mod/display.php:63
 msgid "Access to this profile has been restricted."
 msgstr "Přístup na tento profil byl omezen."
 
-#: ../../mod/profile.php:115
-msgid "Status"
-msgstr "Stav"
-
-#: ../../mod/profile.php:117
-msgid "Photos"
-msgstr "Fotografie"
+#: ../../mod/profile.php:133
+msgid "Tips for New Members"
+msgstr "Tipy pro nové členy"
 
-#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:114
-#: ../../include/auth.php:139 ../../include/auth.php:192
+#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:120
+#: ../../include/auth.php:145 ../../include/auth.php:198
 msgid "Login failed."
 msgstr "Přihlášení se nezdařilo."
 
-#: ../../mod/openid.php:78 ../../include/auth.php:208
+#: ../../mod/openid.php:78 ../../include/auth.php:214
 msgid "Welcome "
-msgstr "Vítejte"
+msgstr "Vítejte "
 
-#: ../../mod/openid.php:79 ../../include/auth.php:209
+#: ../../mod/openid.php:79 ../../include/auth.php:215
 msgid "Please upload a profile photo."
 msgstr "Prosím nahrejte profilovou fotografii"
 
-#: ../../mod/openid.php:82 ../../include/auth.php:212
+#: ../../mod/openid.php:82 ../../include/auth.php:218
 msgid "Welcome back "
-msgstr "Vítejte zpět"
+msgstr "Vítejte zpět "
 
-#: ../../mod/follow.php:43
-msgid "The profile address specified does not provide adequate information."
-msgstr "Uvedená adresa profilu neposkytuje dostatečné informace."
+#: ../../mod/follow.php:39
+msgid ""
+"This site is not configured to allow communications with other networks."
+msgstr ""
+"Tento web není nakonfigurován tak, aby umožňoval komunikaci s ostatními "
+"sítěmi."
 
-#: ../../mod/follow.php:45
+#: ../../mod/follow.php:40 ../../mod/follow.php:50
 msgid "No compatible communication protocols or feeds were discovered."
 msgstr "Nenalezen žádný kompatibilní komunikační protokol nebo kanál."
 
-#: ../../mod/follow.php:47
+#: ../../mod/follow.php:48
+msgid "The profile address specified does not provide adequate information."
+msgstr "Uvedená adresa profilu neposkytuje dostatečné informace."
+
+#: ../../mod/follow.php:52
 msgid "An author or name was not found."
 msgstr "Autor nebo jméno nenalezeno"
 
-#: ../../mod/follow.php:49
+#: ../../mod/follow.php:54
 msgid "No browser URL could be matched to this address."
 msgstr "Této adrese neodpovídá žádné URL prohlížeče."
 
-#: ../../mod/follow.php:57
+#: ../../mod/follow.php:61
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
+msgstr ""
+"Zadaná adresa profilu patří do sítě, která  byla na tomto serveru zakázána."
+
+#: ../../mod/follow.php:66
 msgid ""
 "Limited profile. This person will be unable to receive direct/personal "
 "notifications from you."
@@ -2175,19 +2859,19 @@ msgstr ""
 "Omezený profil. Tato osoba nebude schopna od Vás přijímat přímé / osobní "
 "sdělení."
 
-#: ../../mod/follow.php:112
+#: ../../mod/follow.php:122
 msgid "Unable to retrieve contact information."
 msgstr "Nepodařilo se získat kontaktní informace."
 
-#: ../../mod/follow.php:158
+#: ../../mod/follow.php:168
 msgid "following"
 msgstr "následující"
 
-#: ../../mod/display.php:135
+#: ../../mod/display.php:105
 msgid "Item has been removed."
 msgstr "Položka byla odstraněna."
 
-#: ../../mod/dfrn_notify.php:251
+#: ../../mod/dfrn_notify.php:353
 msgid "New mail received at "
 msgstr "Přišel nový e-mail v"
 
@@ -2195,16 +2879,16 @@ msgstr "Přišel nový e-mail v"
 msgid "Applications"
 msgstr "Aplikace"
 
-#: ../../mod/search.php:26 ../../include/nav.php:70 ../../boot.php:2114
+#: ../../mod/apps.php:11
+msgid "No installed applications."
+msgstr "Žádné nainstalované aplikace."
+
+#: ../../mod/search.php:26 ../../include/text.php:610 ../../include/nav.php:69
 msgid "Search"
 msgstr "Vyhledávání"
 
-#: ../../mod/search.php:69
-msgid "No results."
-msgstr "Žádné výsledky."
-
-#: ../../mod/profiles.php:21 ../../mod/profiles.php:240
-#: ../../mod/profiles.php:345 ../../mod/dfrn_confirm.php:62
+#: ../../mod/profiles.php:21 ../../mod/profiles.php:236
+#: ../../mod/profiles.php:341 ../../mod/dfrn_confirm.php:62
 msgid "Profile not found."
 msgstr "Profil nenalezen"
 
@@ -2212,187 +2896,184 @@ msgstr "Profil nenalezen"
 msgid "Profile Name is required."
 msgstr "Jméno profilu je povinné."
 
-#: ../../mod/profiles.php:202
+#: ../../mod/profiles.php:198
 msgid "Profile updated."
 msgstr "Profil aktualizován."
 
-#: ../../mod/profiles.php:257
+#: ../../mod/profiles.php:253
 msgid "Profile deleted."
 msgstr "Profil smazán."
 
-#: ../../mod/profiles.php:273 ../../mod/profiles.php:304
+#: ../../mod/profiles.php:269 ../../mod/profiles.php:300
 msgid "Profile-"
 msgstr "Profil-"
 
-#: ../../mod/profiles.php:292 ../../mod/profiles.php:331
+#: ../../mod/profiles.php:288 ../../mod/profiles.php:327
 msgid "New profile created."
 msgstr "Nový profil vytvořen."
 
-#: ../../mod/profiles.php:310
+#: ../../mod/profiles.php:306
 msgid "Profile unavailable to clone."
 msgstr "Profil není možné naklonovat."
 
-#: ../../mod/profiles.php:357
+#: ../../mod/profiles.php:353
 msgid "Hide your contact/friend list from viewers of this profile?"
 msgstr ""
 "Skrýt u tohoto profilu vaše kontakty / seznam přátel před před dalšími "
 "uživateli zobrazující si tento profil?"
 
-#: ../../mod/profiles.php:366
-msgid "Hide profile details and all your messages from unknown viewers?"
-msgstr "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?"
-
-#: ../../mod/profiles.php:382
+#: ../../mod/profiles.php:371
 msgid "Edit Profile Details"
 msgstr "Upravit podrobnosti profilu "
 
-#: ../../mod/profiles.php:384
+#: ../../mod/profiles.php:373
 msgid "View this profile"
 msgstr "Zobrazit tento profil"
 
-#: ../../mod/profiles.php:385
+#: ../../mod/profiles.php:374
 msgid "Create a new profile using these settings"
 msgstr "Vytvořit nový profil pomocí tohoto nastavení"
 
-#: ../../mod/profiles.php:386
+#: ../../mod/profiles.php:375
 msgid "Clone this profile"
 msgstr "Klonovat tento profil"
 
-#: ../../mod/profiles.php:387
+#: ../../mod/profiles.php:376
 msgid "Delete this profile"
 msgstr "Smazat tento profil"
 
-#: ../../mod/profiles.php:388
+#: ../../mod/profiles.php:377
 msgid "Profile Name:"
 msgstr "Jméno profilu:"
 
-#: ../../mod/profiles.php:389
+#: ../../mod/profiles.php:378
 msgid "Your Full Name:"
 msgstr "Vaše celé jméno:"
 
-#: ../../mod/profiles.php:390
+#: ../../mod/profiles.php:379
 msgid "Title/Description:"
 msgstr "Název / Popis:"
 
-#: ../../mod/profiles.php:391
+#: ../../mod/profiles.php:380
 msgid "Your Gender:"
 msgstr "Vaše pohlaví:"
 
-#: ../../mod/profiles.php:392
-msgid "Birthday (y/m/d):"
-msgstr "Narozeniny (rok/měsíc/den):"
+#: ../../mod/profiles.php:381
+#, php-format
+msgid "Birthday (%s):"
+msgstr "Narozeniny uživatele (%s):"
 
-#: ../../mod/profiles.php:393
+#: ../../mod/profiles.php:382
 msgid "Street Address:"
 msgstr "Ulice:"
 
-#: ../../mod/profiles.php:394
+#: ../../mod/profiles.php:383
 msgid "Locality/City:"
 msgstr "Město:"
 
-#: ../../mod/profiles.php:395
+#: ../../mod/profiles.php:384
 msgid "Postal/Zip Code:"
 msgstr "PSČ:"
 
-#: ../../mod/profiles.php:396
+#: ../../mod/profiles.php:385
 msgid "Country:"
 msgstr "Země:"
 
-#: ../../mod/profiles.php:397
+#: ../../mod/profiles.php:386
 msgid "Region/State:"
 msgstr "Region / stát:"
 
-#: ../../mod/profiles.php:398
+#: ../../mod/profiles.php:387
 msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
 msgstr "<span class=\"heart\">&hearts;</span> Rodinný stav:"
 
-#: ../../mod/profiles.php:399
+#: ../../mod/profiles.php:388
 msgid "Who: (if applicable)"
 msgstr "Kdo: (pokud je možné)"
 
-#: ../../mod/profiles.php:400
+#: ../../mod/profiles.php:389
 msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
 msgstr "Příklady: jan123, Jan Novák, jan@seznam.cz"
 
-#: ../../mod/profiles.php:401 ../../include/profile_advanced.php:90
+#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:90
 msgid "Sexual Preference:"
 msgstr "Sexuální preference:"
 
-#: ../../mod/profiles.php:402
+#: ../../mod/profiles.php:391
 msgid "Homepage URL:"
 msgstr "Odkaz na domovskou stránku:"
 
-#: ../../mod/profiles.php:403 ../../include/profile_advanced.php:115
+#: ../../mod/profiles.php:392 ../../include/profile_advanced.php:115
 msgid "Political Views:"
 msgstr "Politické přesvědčení:"
 
-#: ../../mod/profiles.php:404
+#: ../../mod/profiles.php:393
 msgid "Religious Views:"
 msgstr "Náboženské přesvědčení:"
 
-#: ../../mod/profiles.php:405
+#: ../../mod/profiles.php:394
 msgid "Public Keywords:"
 msgstr "Veřejná klíčová slova:"
 
-#: ../../mod/profiles.php:406
+#: ../../mod/profiles.php:395
 msgid "Private Keywords:"
 msgstr "Soukromá klíčová slova:"
 
-#: ../../mod/profiles.php:407
+#: ../../mod/profiles.php:396
 msgid "Example: fishing photography software"
 msgstr "Příklad: fishing photography software"
 
-#: ../../mod/profiles.php:408
+#: ../../mod/profiles.php:397
 msgid "(Used for suggesting potential friends, can be seen by others)"
 msgstr ""
 "(Používá se pro doporučování potenciálních přátel, může být viděno "
 "ostatními)"
 
-#: ../../mod/profiles.php:409
+#: ../../mod/profiles.php:398
 msgid "(Used for searching profiles, never shown to others)"
 msgstr "(Používá se pro vyhledávání profilů, není nikdy zobrazeno ostatním)"
 
-#: ../../mod/profiles.php:410
+#: ../../mod/profiles.php:399
 msgid "Tell us about yourself..."
 msgstr "Řekněte nám něco o sobě ..."
 
-#: ../../mod/profiles.php:411
+#: ../../mod/profiles.php:400
 msgid "Hobbies/Interests"
 msgstr "Koníčky/zájmy"
 
-#: ../../mod/profiles.php:412
+#: ../../mod/profiles.php:401
 msgid "Contact information and Social Networks"
 msgstr "Kontaktní informace a sociální sítě"
 
-#: ../../mod/profiles.php:413
+#: ../../mod/profiles.php:402
 msgid "Musical interests"
 msgstr "Hudební vkus"
 
-#: ../../mod/profiles.php:414
+#: ../../mod/profiles.php:403
 msgid "Books, literature"
 msgstr "Knihy, literatura"
 
-#: ../../mod/profiles.php:415
+#: ../../mod/profiles.php:404
 msgid "Television"
 msgstr "Televize"
 
-#: ../../mod/profiles.php:416
+#: ../../mod/profiles.php:405
 msgid "Film/dance/culture/entertainment"
 msgstr "Film/tanec/kultura/zábava"
 
-#: ../../mod/profiles.php:417
+#: ../../mod/profiles.php:406
 msgid "Love/romance"
 msgstr "Láska/romantika"
 
-#: ../../mod/profiles.php:418
+#: ../../mod/profiles.php:407
 msgid "Work/employment"
 msgstr "Práce/zaměstnání"
 
-#: ../../mod/profiles.php:419
+#: ../../mod/profiles.php:408
 msgid "School/education"
 msgstr "Škola/vzdělání"
 
-#: ../../mod/profiles.php:424
+#: ../../mod/profiles.php:413
 msgid ""
 "This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
 "be visible to anybody using the internet."
@@ -2400,31 +3081,31 @@ msgstr ""
 "Toto je váš <strong>veřejný</strong> profil.<br />Ten <strong>může</strong> "
 "být viditelný kýmkoliv na internetu."
 
-#: ../../mod/profiles.php:435 ../../mod/directory.php:112
+#: ../../mod/profiles.php:423 ../../mod/directory.php:112
 msgid "Age: "
 msgstr "Věk: "
 
-#: ../../mod/profiles.php:470 ../../include/nav.php:108
+#: ../../mod/profiles.php:458 ../../include/nav.php:109
 msgid "Profiles"
 msgstr "Profily"
 
-#: ../../mod/profiles.php:471
+#: ../../mod/profiles.php:459
 msgid "Change profile photo"
 msgstr "Změnit profilovou fotografii"
 
-#: ../../mod/profiles.php:472
+#: ../../mod/profiles.php:460
 msgid "Create New Profile"
 msgstr "Vytvořit nový profil"
 
-#: ../../mod/profiles.php:482
+#: ../../mod/profiles.php:470
 msgid "Profile Image"
 msgstr "Profilový obrázek"
 
-#: ../../mod/profiles.php:484
-msgid "Visible to everybody"
-msgstr "Viditelné pro všechny"
+#: ../../mod/profiles.php:472
+msgid "visible to everybody"
+msgstr "viditelné pro všechny"
 
-#: ../../mod/profiles.php:485
+#: ../../mod/profiles.php:473
 msgid "Edit visibility"
 msgstr "Upravit viditelnost"
 
@@ -2452,22 +3133,22 @@ msgstr "Pohlaví: "
 msgid "No entries (some entries may be hidden)."
 msgstr "Žádné záznamy (některé položky mohou být skryty)."
 
-#: ../../mod/invite.php:28
+#: ../../mod/invite.php:35
 #, php-format
 msgid "%s : Not a valid email address."
 msgstr "%s : není platná e-mailová adresa."
 
-#: ../../mod/invite.php:32
+#: ../../mod/invite.php:59
 #, php-format
 msgid "Please join my network on %s"
 msgstr "Prosím, připojte se do mé sítě na %s"
 
-#: ../../mod/invite.php:42
+#: ../../mod/invite.php:69
 #, php-format
 msgid "%s : Message delivery failed."
 msgstr "%s : Doručení zprávy se nezdařilo."
 
-#: ../../mod/invite.php:46
+#: ../../mod/invite.php:73
 #, php-format
 msgid "%d message sent."
 msgid_plural "%d messages sent."
@@ -2475,83 +3156,91 @@ msgstr[0] "%d zpráva odeslána."
 msgstr[1] "%d zprávy odeslány."
 msgstr[2] "%d zprávy odeslány."
 
-#: ../../mod/invite.php:61
+#: ../../mod/invite.php:92
+msgid "You have no more invitations available"
+msgstr "Nemáte k dispozici žádné další pozvánky"
+
+#: ../../mod/invite.php:99
 msgid "Send invitations"
 msgstr "Poslat pozvánky"
 
-#: ../../mod/invite.php:62
+#: ../../mod/invite.php:100
 msgid "Enter email addresses, one per line:"
 msgstr "Zadejte e-mailové adresy, jednu na řádek:"
 
-#: ../../mod/invite.php:64
+#: ../../mod/invite.php:102
 #, php-format
 msgid "Please join my social network on %s"
 msgstr "Prosím, připojte se do mé sociální sítě na %s"
 
-#: ../../mod/invite.php:65
+#: ../../mod/invite.php:103
 msgid "To accept this invitation, please visit:"
 msgstr "Chcete-li toto pozvání přijmout, navštivte prosím:"
 
-#: ../../mod/invite.php:66
+#: ../../mod/invite.php:104
+msgid "You will need to supply this invitation code: $invite_code"
+msgstr "Budete muset zadat kód této pozvánky: $invite_code"
+
+#: ../../mod/invite.php:104
 msgid ""
 "Once you have registered, please connect with me via my profile page at:"
 msgstr ""
 "Jakmile se zaregistrujete, prosím spojte se se mnou přes mou profilovu "
 "stránku na:"
 
-#: ../../mod/dfrn_confirm.php:231
+#: ../../mod/dfrn_confirm.php:233
 msgid "Response from remote site was not understood."
 msgstr "Odpověď ze vzdáleného serveru nebyla srozumitelná."
 
-#: ../../mod/dfrn_confirm.php:240
+#: ../../mod/dfrn_confirm.php:242
 msgid "Unexpected response from remote site: "
 msgstr "Neočekávaná odpověď od vzdáleného serveru:"
 
-#: ../../mod/dfrn_confirm.php:248
+#: ../../mod/dfrn_confirm.php:250
 msgid "Confirmation completed successfully."
 msgstr "Potvrzení úspěšně dokončena."
 
-#: ../../mod/dfrn_confirm.php:250 ../../mod/dfrn_confirm.php:264
-#: ../../mod/dfrn_confirm.php:271
+#: ../../mod/dfrn_confirm.php:252 ../../mod/dfrn_confirm.php:266
+#: ../../mod/dfrn_confirm.php:273
 msgid "Remote site reported: "
 msgstr "Vzdálený server oznámil:"
 
-#: ../../mod/dfrn_confirm.php:262
+#: ../../mod/dfrn_confirm.php:264
 msgid "Temporary failure. Please wait and try again."
 msgstr "Dočasné selhání. Prosím, vyčkejte a zkuste to znovu."
 
-#: ../../mod/dfrn_confirm.php:269
+#: ../../mod/dfrn_confirm.php:271
 msgid "Introduction failed or was revoked."
 msgstr "Žádost o propojení selhala nebo byla zrušena."
 
-#: ../../mod/dfrn_confirm.php:387
+#: ../../mod/dfrn_confirm.php:393
 msgid "Unable to set contact photo."
 msgstr "Nelze nastavit fotografii kontaktu."
 
-#: ../../mod/dfrn_confirm.php:430 ../../include/conversation.php:61
+#: ../../mod/dfrn_confirm.php:436 ../../include/conversation.php:79
 #, php-format
 msgid "%1$s is now friends with %2$s"
 msgstr "%1$s je nyní přítel s %2$s"
 
-#: ../../mod/dfrn_confirm.php:501
+#: ../../mod/dfrn_confirm.php:507
 #, php-format
 msgid "No user record found for '%s' "
 msgstr "Pro '%s' nenalezen žádný uživatelský záznam "
 
-#: ../../mod/dfrn_confirm.php:511
+#: ../../mod/dfrn_confirm.php:517
 msgid "Our site encryption key is apparently messed up."
 msgstr "Náš šifrovací klíč zřejmě přestal správně fungovat."
 
-#: ../../mod/dfrn_confirm.php:522
+#: ../../mod/dfrn_confirm.php:528
 msgid "Empty site URL was provided or URL could not be decrypted by us."
 msgstr ""
 "Byla poskytnuta prázdná URL adresa nebo se nepodařilo URL adresu dešifrovat."
 
-#: ../../mod/dfrn_confirm.php:534
+#: ../../mod/dfrn_confirm.php:549
 msgid "Contact record was not found for you on our site."
 msgstr "Kontakt záznam nebyl nalezen pro vás na našich stránkách."
 
-#: ../../mod/dfrn_confirm.php:562
+#: ../../mod/dfrn_confirm.php:578
 msgid ""
 "The ID provided by your system is a duplicate on our system. It should work "
 "if you try again."
@@ -2559,103 +3248,131 @@ msgstr ""
 "Váš systém poskytl duplicitní ID vůči našemu systému. Pokuste se akci "
 "zopakovat."
 
-#: ../../mod/dfrn_confirm.php:573
+#: ../../mod/dfrn_confirm.php:589
 msgid "Unable to set your contact credentials on our system."
 msgstr "Nelze nastavit Vaše přihlašovací údaje v našem systému."
 
-#: ../../mod/dfrn_confirm.php:626
+#: ../../mod/dfrn_confirm.php:642
 msgid "Unable to update your contact profile details on our system"
 msgstr "Nelze aktualizovat Váš profil v našem systému"
 
-#: ../../mod/dfrn_confirm.php:656
+#: ../../mod/dfrn_confirm.php:672
 #, php-format
 msgid "Connection accepted at %s"
 msgstr "Připojení přijato na %s"
 
-#: ../../addon/facebook/facebook.php:248
+#: ../../addon/facebook/facebook.php:314
 msgid "Facebook disabled"
 msgstr "Facebook zakázán"
 
-#: ../../addon/facebook/facebook.php:253
+#: ../../addon/facebook/facebook.php:319
 msgid "Updating contacts"
 msgstr "Aktualizace kontaktů"
 
-#: ../../addon/facebook/facebook.php:262
+#: ../../addon/facebook/facebook.php:328
 msgid "Facebook API key is missing."
 msgstr "Chybí Facebook API klíč."
 
-#: ../../addon/facebook/facebook.php:269
+#: ../../addon/facebook/facebook.php:335
 msgid "Facebook Connect"
 msgstr "Facebook připojen"
 
-#: ../../addon/facebook/facebook.php:275
+#: ../../addon/facebook/facebook.php:341
 msgid "Install Facebook connector for this account."
 msgstr "Nainstalovat pro tento účet Facebook konektor."
 
-#: ../../addon/facebook/facebook.php:282
+#: ../../addon/facebook/facebook.php:348
 msgid "Remove Facebook connector"
 msgstr "Odstranit konektor na Facebook"
 
-#: ../../addon/facebook/facebook.php:288
+#: ../../addon/facebook/facebook.php:354
 msgid "Post to Facebook by default"
 msgstr "Standardně posílat příspěvky na Facebook"
 
-#: ../../addon/facebook/facebook.php:350
+#: ../../addon/facebook/facebook.php:358
+msgid "Link all your Facebook friends and conversations"
+msgstr "Připojit všechny své přátele na Facebooku a konverzace"
+
+#: ../../addon/facebook/facebook.php:363
+msgid "Warning: Your Facebook privacy settings can not be imported."
+msgstr ""
+"Upozornění: nastavení ochrany osobních údajů na Facebooku nelze importovat."
+
+#: ../../addon/facebook/facebook.php:364
+msgid ""
+"Linked Facebook items <strong>may</strong> be publicly visible, depending on"
+" your privacy settings for this website/account."
+msgstr ""
+"Propojené položky z Facebook <strong>mohou</strong> být veřejně viditelné, v"
+" závislosti na nastavení ochrany osobních údajů pro tuto webovou "
+"stránku/účet."
+
+#: ../../addon/facebook/facebook.php:419
 msgid "Facebook"
 msgstr "Facebook"
 
-#: ../../addon/facebook/facebook.php:351
+#: ../../addon/facebook/facebook.php:420
 msgid "Facebook Connector Settings"
 msgstr "Nastavení Facebook konektoru "
 
-#: ../../addon/facebook/facebook.php:365
+#: ../../addon/facebook/facebook.php:434
 msgid "Post to Facebook"
 msgstr "Přidat příspěvek na Facebook"
 
-#: ../../addon/facebook/facebook.php:434
+#: ../../addon/facebook/facebook.php:507
 msgid ""
 "Post to Facebook cancelled because of multi-network access permission "
 "conflict."
 msgstr ""
 "Příspěvek na Facebook zrušen kvůli konfliktu přístupových práv mezi sítěmi."
 
-#: ../../addon/facebook/facebook.php:500
+#: ../../addon/facebook/facebook.php:580
 msgid "Image: "
 msgstr "Obrázek: "
 
-#: ../../addon/facebook/facebook.php:576
+#: ../../addon/facebook/facebook.php:656
 msgid "View on Friendika"
 msgstr "Pohled na Friendiku"
 
-#: ../../addon/widgets/widgets.php:41
-msgid "Widgets key: "
-msgstr "Widgets klíč:"
+#: ../../addon/facebook/facebook.php:687
+msgid "Facebook post failed. Queued for retry."
+msgstr ""
+"Zaslání příspěvku na Facebook selhalo. Příspěvek byl zařazen do fronty pro "
+"opakované odeslání."
 
-#: ../../addon/widgets/widgets.php:45
+#: ../../addon/widgets/widgets.php:53
 msgid "Generate new key"
 msgstr "Generovat nové klíče"
 
+#: ../../addon/widgets/widgets.php:56
+msgid "Widgets key"
+msgstr "Widgety klíč"
+
+#: ../../addon/widgets/widgets.php:58
+msgid "Widgets available"
+msgstr "Widgety k dispozici"
+
 #: ../../addon/widgets/widget_friends.php:30
 msgid "Connect on Friendika!"
 msgstr "Spojit se na Friendice!"
 
-#: ../../addon/tictac/tictac.php:14
+#: ../../addon/tictac/tictac.php:20
 msgid "Three Dimensional Tic-Tac-Toe"
 msgstr "Trojrozměrné Tic-Tac-Toe"
 
-#: ../../addon/tictac/tictac.php:47
+#: ../../addon/tictac/tictac.php:53
 msgid "3D Tic-Tac-Toe"
 msgstr "3D Tic-Tac-Toe"
 
-#: ../../addon/tictac/tictac.php:52
+#: ../../addon/tictac/tictac.php:58
 msgid "New game"
 msgstr "Nová hra"
 
-#: ../../addon/tictac/tictac.php:53
+#: ../../addon/tictac/tictac.php:59
 msgid "New game with handicap"
 msgstr "Nová hra s handicapem"
 
-#: ../../addon/tictac/tictac.php:54
+#: ../../addon/tictac/tictac.php:60
 msgid ""
 "Three dimensional tic-tac-toe is just like the traditional game except that "
 "it is played on multiple levels simultaneously. "
@@ -2663,7 +3380,7 @@ msgstr ""
 "Trojrozměrné tic-tac-toe je podobná této tradiční hře kromě toho, že se "
 "hraje na více úrovních současně."
 
-#: ../../addon/tictac/tictac.php:55
+#: ../../addon/tictac/tictac.php:61
 msgid ""
 "In this case there are three levels. You win by getting three in a row on "
 "any level, as well as up, down, and diagonally across the different levels."
@@ -2671,7 +3388,7 @@ msgstr ""
 "V tomto případě existují tři úrovně. Vyhrajete tím, že dostane tři v řadě na"
 " jakékoli úrovni, stejně jako nahoru, dolů a šikmo na různých úrovních."
 
-#: ../../addon/tictac/tictac.php:57
+#: ../../addon/tictac/tictac.php:63
 msgid ""
 "The handicap game disables the center position on the middle level because "
 "the player claiming this square often has an unfair advantage."
@@ -2679,118 +3396,141 @@ msgstr ""
 "Hra s handicapem zakáže centrální pozici na střední úrovni, protože hráč "
 "zaujímající tuto polohu má často nespravedlivou výhodu."
 
-#: ../../addon/tictac/tictac.php:176
+#: ../../addon/tictac/tictac.php:182
 msgid "You go first..."
 msgstr "Vy začněte ..."
 
-#: ../../addon/tictac/tictac.php:181
+#: ../../addon/tictac/tictac.php:187
 msgid "I'm going first this time..."
 msgstr "Tentokrát začnu já..."
 
-#: ../../addon/tictac/tictac.php:187
+#: ../../addon/tictac/tictac.php:193
 msgid "You won!"
 msgstr "Vyhrál jste!"
 
-#: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218
+#: ../../addon/tictac/tictac.php:199 ../../addon/tictac/tictac.php:224
 msgid "\"Cat\" game!"
 msgstr "\"Kočičí\" hra!"
 
-#: ../../addon/tictac/tictac.php:216
+#: ../../addon/tictac/tictac.php:222
 msgid "I won!"
 msgstr "Vyhrál jsem!"
 
-#: ../../addon/randplace/randplace.php:171
+#: ../../addon/randplace/randplace.php:170
 msgid "Randplace Settings"
 msgstr "Randplace Nastavení"
 
-#: ../../addon/randplace/randplace.php:173
+#: ../../addon/randplace/randplace.php:172
 msgid "Enable Randplace Plugin"
 msgstr "Povolit Randplace Plugin"
 
-#: ../../addon/java_upload/java_upload.php:33
-msgid "Select files to upload: "
-msgstr "Vyberte soubory k nahrání:"
-
-#: ../../addon/java_upload/java_upload.php:35
-msgid ""
-"Use the following controls only if the Java uploader [above] fails to "
-"launch."
-msgstr ""
-"Následující ovládací prvky použijte pouze v případě, že se nezdaří hru "
-"spustit s pomocí Java uploaderu [výše]."
-
-#: ../../addon/js_upload/js_upload.php:39
+#: ../../addon/js_upload/js_upload.php:43
 msgid "Upload a file"
 msgstr "Nahrát soubor"
 
-#: ../../addon/js_upload/js_upload.php:40
+#: ../../addon/js_upload/js_upload.php:44
 msgid "Drop files here to upload"
 msgstr "Přeneste sem soubory k nahrání"
 
-#: ../../addon/js_upload/js_upload.php:42
+#: ../../addon/js_upload/js_upload.php:46
 msgid "Failed"
 msgstr "Neúspěch"
 
-#: ../../addon/js_upload/js_upload.php:288
+#: ../../addon/js_upload/js_upload.php:292
 msgid "No files were uploaded."
 msgstr "Žádné soubory nebyly nahrány."
 
-#: ../../addon/js_upload/js_upload.php:294
-msgid "Uploaded file is empty"
-msgstr "Nahraný soubor je prázdný"
+#: ../../addon/js_upload/js_upload.php:298
+msgid "Uploaded file is empty"
+msgstr "Nahraný soubor je prázdný"
+
+#: ../../addon/js_upload/js_upload.php:321
+msgid "File has an invalid extension, it should be one of "
+msgstr "Soubor má neplatnou příponu, ta by měla být jednou z"
+
+#: ../../addon/js_upload/js_upload.php:332
+msgid "Upload was cancelled, or server error encountered"
+msgstr "Nahrávání bylo zrušeno nebo došlo k chybě na serveru"
+
+#: ../../addon/impressum/impressum.php:25
+msgid "Impressum"
+msgstr "Impressum"
+
+#: ../../addon/impressum/impressum.php:38
+#: ../../addon/impressum/impressum.php:40
+#: ../../addon/impressum/impressum.php:70
+msgid "Site Owner"
+msgstr "Vlastník webu"
+
+#: ../../addon/impressum/impressum.php:38
+#: ../../addon/impressum/impressum.php:74
+msgid "Email Address"
+msgstr "E-mailová adresa"
+
+#: ../../addon/impressum/impressum.php:43
+#: ../../addon/impressum/impressum.php:72
+msgid "Postal Address"
+msgstr "Poštovní adresa"
 
-#: ../../addon/js_upload/js_upload.php:299
-msgid "Uploaded file is too large"
-msgstr "Nahraný soubor je příliš velký"
+#: ../../addon/impressum/impressum.php:49
+msgid ""
+"The impressum addon needs to be configured!<br />Please add at least the "
+"<tt>owner</tt> variable to your config file. For other variables please "
+"refer to the README file of the addon."
+msgstr ""
+"Doplněk Impressum musí být nakonfigurován!<br/>Prosím, přidejte alespoň "
+"proměnnou <tt>owner</tt> do konfiguračního souboru. Pro nastavení ostatních "
+"proměnných se seznamte s nápovědou v souboru README tohoto doplňku."
 
-#: ../../addon/js_upload/js_upload.php:317
-msgid "File has an invalid extension, it should be one of "
-msgstr "Soubor má neplatnou příponu, ta by měla být jednou z"
+#: ../../addon/impressum/impressum.php:71
+msgid "Site Owners Profile"
+msgstr "Profil majitele webu"
 
-#: ../../addon/js_upload/js_upload.php:328
-msgid "Upload was cancelled, or server error encountered"
-msgstr "Nahrávání bylo zrušeno nebo došlo k chybě na serveru"
+#: ../../addon/impressum/impressum.php:73
+msgid "Notes"
+msgstr "Poznámky"
 
-#: ../../addon/oembed/oembed.php:29
+#: ../../addon/oembed/oembed.php:30
 msgid "OEmbed settings updated"
 msgstr "OEmbed nastavení aktualizováno"
 
-#: ../../addon/oembed/oembed.php:42
-msgid "Use OEmbed for YouTube videos"
-msgstr "Použít OEmbed pro videa YouTube:"
+#: ../../addon/oembed/oembed.php:43
+msgid "Use OEmbed for YouTube videos"
+msgstr "Použití OEmbed pro videa na YouTube"
 
-#: ../../addon/oembed/oembed.php:76
+#: ../../addon/oembed/oembed.php:71
 msgid "URL to embed:"
 msgstr "URL adresa k vložení:"
 
-#: ../../addon/statusnet/statusnet.php:78
+#: ../../addon/statusnet/statusnet.php:133
 msgid "Post to StatusNet"
 msgstr "Poslat příspěvek na StatusNet"
 
-#: ../../addon/statusnet/statusnet.php:117
+#: ../../addon/statusnet/statusnet.php:175
 msgid ""
 "Please contact your site administrator.<br />The provided API URL is not "
 "valid."
-msgstr "Obraťte se na správce webu.<br />Poskytnutý odkaz na API není platný."
+msgstr ""
+"Obraťte se na administratora webu.<br />Poskytnutý odkaz na API není platný."
 
-#: ../../addon/statusnet/statusnet.php:145
+#: ../../addon/statusnet/statusnet.php:203
 msgid "We could not contact the StatusNet API with the Path you entered."
 msgstr ""
 "S cestou, kterou jste zadali, se nebylo možné spojit s API StatusNetu."
 
-#: ../../addon/statusnet/statusnet.php:172
+#: ../../addon/statusnet/statusnet.php:230
 msgid "StatusNet settings updated."
 msgstr "Nastavení StatusNetu aktualizováno."
 
-#: ../../addon/statusnet/statusnet.php:195
+#: ../../addon/statusnet/statusnet.php:253
 msgid "StatusNet Posting Settings"
 msgstr "Nastavení zasílání příspěvků na StatusNet "
 
-#: ../../addon/statusnet/statusnet.php:209
+#: ../../addon/statusnet/statusnet.php:267
 msgid "Globally Available StatusNet OAuthKeys"
 msgstr "Globálně dostupné StatusNet OAuth klíče"
 
-#: ../../addon/statusnet/statusnet.php:210
+#: ../../addon/statusnet/statusnet.php:268
 msgid ""
 "There are preconfigured OAuth key pairs for some StatusNet servers "
 "available. If you are useing one of them, please use these credentials. If "
@@ -2800,11 +3540,11 @@ msgstr ""
 " Pokud používáte některý z nich, použijte toto přihlášení. Pokud ne, "
 "neváhejte se připojit k jiné instanci StatusNet (viz níže)."
 
-#: ../../addon/statusnet/statusnet.php:218
+#: ../../addon/statusnet/statusnet.php:276
 msgid "Provide your own OAuth Credentials"
 msgstr "Uveďte své vlastní OAuth přihlašovací údaje"
 
-#: ../../addon/statusnet/statusnet.php:219
+#: ../../addon/statusnet/statusnet.php:277
 msgid ""
 "No consumer key pair for StatusNet found. Register your Friendika Account as"
 " an desktop client on your StatusNet account, copy the consumer key pair "
@@ -2815,23 +3555,23 @@ msgstr ""
 "Nenalezen žádný consumer pár klíčů pro StatusNet. Zaregistrujte svůj "
 "Friendika účet jako desktopový klient na svém účtu StatusNetu, zkopírujte "
 "níže consumer pár klíčů a zadejte API base root.<br />Než si zaregistrujete "
-"svůj vlastní pár klíčů OAuth, zjistěte si od správce, zda-li už náhodou na "
-"tento Friendika server nepřidal pár klíčů pro vámi požadovanou instalaci "
-"StatusNetu."
+"svůj vlastní pár klíčů OAuth, zjistěte si od administrátora, zda-li už "
+"náhodou na tento Friendika server nepřidal pár klíčů pro vámi požadovanou "
+"instalaci StatusNetu."
 
-#: ../../addon/statusnet/statusnet.php:221
+#: ../../addon/statusnet/statusnet.php:279
 msgid "OAuth Consumer Key"
 msgstr "OAuth Consumer Key"
 
-#: ../../addon/statusnet/statusnet.php:224
+#: ../../addon/statusnet/statusnet.php:282
 msgid "OAuth Consumer Secret"
 msgstr "OAuth Consumer Secret"
 
-#: ../../addon/statusnet/statusnet.php:227
+#: ../../addon/statusnet/statusnet.php:285
 msgid "Base API Path (remember the trailing /)"
 msgstr "Cesta k Base API  (nezapomeňte na koncový /)"
 
-#: ../../addon/statusnet/statusnet.php:248
+#: ../../addon/statusnet/statusnet.php:306
 msgid ""
 "To connect to your StatusNet account click the button below to get a "
 "security code from StatusNet which you have to copy into the input box below"
@@ -2843,67 +3583,98 @@ msgstr ""
 "vstupního pole níže a odelat formulář. Pouze Vaše <strong>veřejné</strong> "
 "příspěvky budou zveřejněny na StatusNetu."
 
-#: ../../addon/statusnet/statusnet.php:249
+#: ../../addon/statusnet/statusnet.php:307
 msgid "Log in with StatusNet"
 msgstr "Přihlásit se s StatusNet"
 
-#: ../../addon/statusnet/statusnet.php:251
+#: ../../addon/statusnet/statusnet.php:309
 msgid "Copy the security code from StatusNet here"
 msgstr "Zkopírujte sem bezpečnostní kód ze StatusNet"
 
-#: ../../addon/statusnet/statusnet.php:257
+#: ../../addon/statusnet/statusnet.php:315
 msgid "Cancel Connection Process"
 msgstr "Zrušit připojování"
 
-#: ../../addon/statusnet/statusnet.php:259
+#: ../../addon/statusnet/statusnet.php:317
 msgid "Current StatusNet API is"
 msgstr "Aktuální StatusNet API je"
 
-#: ../../addon/statusnet/statusnet.php:260
+#: ../../addon/statusnet/statusnet.php:318
 msgid "Cancel StatusNet Connection"
 msgstr "Zrušit StatusNet připojení"
 
-#: ../../addon/statusnet/statusnet.php:271 ../../addon/twitter/twitter.php:165
+#: ../../addon/statusnet/statusnet.php:329 ../../addon/twitter/twitter.php:180
 msgid "Currently connected to: "
 msgstr "V současné době připojen k:"
 
-#: ../../addon/statusnet/statusnet.php:272
+#: ../../addon/statusnet/statusnet.php:330
 msgid ""
-"If enabled all your <strong>public</strong> postings will be posted to the "
-"associated StatusNet account."
+"If enabled all your <strong>public</strong> postings can be posted to the "
+"associated StatusNet account. You can choose to do so by default (here) or "
+"for every posting separately in the posting options when writing the entry."
 msgstr ""
-"Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky budou "
-"zveřejněny na příslušném účtu StatusNetu."
+"Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být "
+"zaslány na související StatusNet účet. Můžete si vybrat, zda-li toto bude "
+"výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované "
+"chování při psaní každého příspěvku."
 
-#: ../../addon/statusnet/statusnet.php:274
+#: ../../addon/statusnet/statusnet.php:332
 msgid "Allow posting to StatusNet"
 msgstr "Povolit zasílání příspěvků na StatusNet"
 
-#: ../../addon/statusnet/statusnet.php:277
+#: ../../addon/statusnet/statusnet.php:335
 msgid "Send public postings to StatusNet by default"
 msgstr "Standardně poslílat veřejné příspěvky na StatusNet"
 
-#: ../../addon/statusnet/statusnet.php:282 ../../addon/twitter/twitter.php:172
+#: ../../addon/statusnet/statusnet.php:340 ../../addon/twitter/twitter.php:191
 msgid "Clear OAuth configuration"
 msgstr "Vymazat konfiguraci OAuth"
 
-#: ../../addon/twitter/twitter.php:64
+#: ../../addon/statusnet/statusnet.php:460
+msgid "API URL"
+msgstr "API URL"
+
+#: ../../addon/statusnet/statusnet.php:461
+msgid "Consumer Secret"
+msgstr "Consumer Secret"
+
+#: ../../addon/statusnet/statusnet.php:462
+msgid "Consumer Key"
+msgstr "Consumer Key"
+
+#: ../../addon/piwik/piwik.php:77
+msgid "Piwik Base URL"
+msgstr "Piwik Base adresa URL"
+
+#: ../../addon/piwik/piwik.php:78
+msgid "Site ID"
+msgstr "ID webu"
+
+#: ../../addon/piwik/piwik.php:79
+msgid "Show opt-out cookie link?"
+msgstr "Zobrazit odkaz opt-out cookie?"
+
+#: ../../addon/twitter/twitter.php:70
 msgid "Post to Twitter"
 msgstr "Poslat příspěvek na Twitter"
 
-#: ../../addon/twitter/twitter.php:122
+#: ../../addon/twitter/twitter.php:115
+msgid "Twitter settings updated."
+msgstr "Nastavení Twitteru aktualizováno."
+
+#: ../../addon/twitter/twitter.php:137
 msgid "Twitter Posting Settings"
 msgstr "Nastavení zasílání příspěvků na Twitter "
 
-#: ../../addon/twitter/twitter.php:129
+#: ../../addon/twitter/twitter.php:144
 msgid ""
 "No consumer key pair for Twitter found. Please contact your site "
 "administrator."
 msgstr ""
-"Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na správce"
-" webu."
+"Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na "
+"administrátora webu."
 
-#: ../../addon/twitter/twitter.php:148
+#: ../../addon/twitter/twitter.php:163
 msgid ""
 "At this Friendika instance the Twitter plugin was enabled but you have not "
 "yet connected your account to your Twitter account. To do so click the "
@@ -2917,31 +3688,46 @@ msgstr ""
 "pole níže a odešlete formulář. Pouze Vaše <strong>veřejné</strong> příspěvky"
 " budou zveřejněny na Twitteru."
 
-#: ../../addon/twitter/twitter.php:149
+#: ../../addon/twitter/twitter.php:164
 msgid "Log in with Twitter"
 msgstr "Přihlásit se s Twitter"
 
-#: ../../addon/twitter/twitter.php:151
+#: ../../addon/twitter/twitter.php:166
 msgid "Copy the PIN from Twitter here"
 msgstr "Zkopírujte sem PIN z Twitteru"
 
-#: ../../addon/twitter/twitter.php:166
+#: ../../addon/twitter/twitter.php:181
 msgid ""
-"If enabled all your <strong>public</strong> postings will be posted to the "
-"associated Twitter account as well."
+"If enabled all your <strong>public</strong> postings can be posted to the "
+"associated Twitter account. You can choose to do so by default (here) or for"
+" every posting separately in the posting options when writing the entry."
 msgstr ""
-"Je-li povoleno, všechny <strong>veřejné</strong> příspěvky budou zároveň "
-"zveřejněny na příslušný  Twitter účet."
+"Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být "
+"zaslány na související Twitter účet. Můžete si vybrat, zda-li toto bude "
+"výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované "
+"chování při psaní každého příspěvku."
+
+#: ../../addon/twitter/twitter.php:183
+msgid "Allow posting to Twitter"
+msgstr "Povolit odesílání na Twitter"
+
+#: ../../addon/twitter/twitter.php:186
+msgid "Send public postings to Twitter by default"
+msgstr "Defaultně zasílat veřejné komentáře na Twitter"
 
-#: ../../addon/twitter/twitter.php:168
-msgid "Send public postings to Twitter"
-msgstr "Poslat veřejné příspěvky na Twitter"
+#: ../../addon/twitter/twitter.php:282
+msgid "Consumer key"
+msgstr "Consumer key"
 
-#: ../../include/profile_advanced.php:23 ../../boot.php:2356
+#: ../../addon/twitter/twitter.php:283
+msgid "Consumer secret"
+msgstr "Consumer secret"
+
+#: ../../include/profile_advanced.php:23 ../../boot.php:880
 msgid "Gender:"
 msgstr "Pohlaví:"
 
-#: ../../include/profile_advanced.php:36 ../../include/items.php:1086
+#: ../../include/profile_advanced.php:36 ../../include/items.php:1137
 msgid "Birthday:"
 msgstr "Narozeniny:"
 
@@ -2961,7 +3747,7 @@ msgstr "Věk:"
 msgid "<span class=\"heart\">&hearts;</span> Status:"
 msgstr "<span class=\"heart\">&hearts;</span> Status:"
 
-#: ../../include/profile_advanced.php:103 ../../boot.php:2362
+#: ../../include/profile_advanced.php:103 ../../boot.php:886
 msgid "Homepage:"
 msgstr "Domácí stránka:"
 
@@ -3269,6 +4055,134 @@ msgstr "Nezajímá"
 msgid "Ask me"
 msgstr "Zeptej se mě"
 
+#: ../../include/event.php:11
+msgid "l F d, Y \\@ g:i A"
+msgstr "l F d, Y \\@ g:i A"
+
+#: ../../include/event.php:17
+msgid "Starts:"
+msgstr "Začíná:"
+
+#: ../../include/event.php:27
+msgid "Finishes:"
+msgstr "Končí:"
+
+#: ../../include/text.php:229
+msgid "prev"
+msgstr "předchozí"
+
+#: ../../include/text.php:231
+msgid "first"
+msgstr "první"
+
+#: ../../include/text.php:260
+msgid "last"
+msgstr "poslední"
+
+#: ../../include/text.php:263
+msgid "next"
+msgstr "další"
+
+#: ../../include/text.php:542
+msgid "No contacts"
+msgstr "Žádné kontakty"
+
+#: ../../include/text.php:550
+#, php-format
+msgid "%d Contact"
+msgid_plural "%d Contacts"
+msgstr[0] "%d kontakt"
+msgstr[1] "%d kontaktů"
+msgstr[2] "%d kontaktů"
+
+#: ../../include/text.php:711
+msgid "Monday"
+msgstr "Pondělí"
+
+#: ../../include/text.php:711
+msgid "Tuesday"
+msgstr "Úterý"
+
+#: ../../include/text.php:711
+msgid "Wednesday"
+msgstr "Středa"
+
+#: ../../include/text.php:711
+msgid "Thursday"
+msgstr "Čtvrtek"
+
+#: ../../include/text.php:711
+msgid "Friday"
+msgstr "Pátek"
+
+#: ../../include/text.php:711
+msgid "Saturday"
+msgstr "Sobota"
+
+#: ../../include/text.php:711
+msgid "Sunday"
+msgstr "Neděle"
+
+#: ../../include/text.php:715
+msgid "January"
+msgstr "Ledna"
+
+#: ../../include/text.php:715
+msgid "February"
+msgstr "Února"
+
+#: ../../include/text.php:715
+msgid "March"
+msgstr "Března"
+
+#: ../../include/text.php:715
+msgid "April"
+msgstr "Dubna"
+
+#: ../../include/text.php:715
+msgid "May"
+msgstr "Května"
+
+#: ../../include/text.php:715
+msgid "June"
+msgstr "Června"
+
+#: ../../include/text.php:715
+msgid "July"
+msgstr "Července"
+
+#: ../../include/text.php:715
+msgid "August"
+msgstr "Srpna"
+
+#: ../../include/text.php:715
+msgid "September"
+msgstr "Září"
+
+#: ../../include/text.php:715
+msgid "October"
+msgstr "Října"
+
+#: ../../include/text.php:715
+msgid "November"
+msgstr "Listopadu"
+
+#: ../../include/text.php:715
+msgid "December"
+msgstr "Prosince"
+
+#: ../../include/text.php:778
+msgid "bytes"
+msgstr "bytů"
+
+#: ../../include/text.php:861
+msgid "Select an alternate language"
+msgstr "Vyběr alternativního jazyka"
+
+#: ../../include/diaspora.php:309
+msgid "Sharing notification from Diaspora network"
+msgstr "Sdílení oznámení ze sítě Diaspora"
+
 #: ../../include/oembed.php:95
 msgid "Embedding disabled"
 msgstr "Vkládání zakázáno"
@@ -3281,41 +4195,109 @@ msgstr "Vytvořit novou skupinu"
 msgid "Everybody"
 msgstr "Všichni"
 
-#: ../../include/nav.php:41 ../../boot.php:865
+#: ../../include/nav.php:41 ../../boot.php:667
 msgid "Logout"
 msgstr "Odhlásit se"
 
-#: ../../include/nav.php:44 ../../boot.php:843 ../../boot.php:849
+#: ../../include/nav.php:41
+msgid "End this session"
+msgstr "Konec této relace"
+
+#: ../../include/nav.php:44 ../../boot.php:645 ../../boot.php:651
 msgid "Login"
 msgstr "Přihlásit se"
 
-#: ../../include/nav.php:55 ../../include/nav.php:92
+#: ../../include/nav.php:44
+msgid "Sign in"
+msgstr "Přihlásit se"
+
+#: ../../include/nav.php:55 ../../include/nav.php:93
 msgid "Home"
 msgstr "Domů"
 
-#: ../../include/nav.php:68
+#: ../../include/nav.php:55
+msgid "Home Page"
+msgstr "Domácí stránka"
+
+#: ../../include/nav.php:59
+msgid "Create an account"
+msgstr "Vytvořit účet"
+
+#: ../../include/nav.php:64
+msgid "Help and documentation"
+msgstr "Nápověda a dokumentace"
+
+#: ../../include/nav.php:67
 msgid "Apps"
 msgstr "Aplikace"
 
-#: ../../include/nav.php:80
+#: ../../include/nav.php:67
+msgid "Addon applications, utilities, games"
+msgstr "Doplňkové aplikace, nástroje, hry"
+
+#: ../../include/nav.php:69
+msgid "Search site content"
+msgstr "Hledání na stránkách tohoto webu"
+
+#: ../../include/nav.php:79
+msgid "Conversations on this site"
+msgstr "Konverzace na tomto webu"
+
+#: ../../include/nav.php:81
 msgid "Directory"
 msgstr "Adresář"
 
-#: ../../include/nav.php:90
+#: ../../include/nav.php:81
+msgid "People directory"
+msgstr "Adresář"
+
+#: ../../include/nav.php:91
 msgid "Network"
 msgstr "Síť"
 
-#: ../../include/nav.php:98
+#: ../../include/nav.php:91
+msgid "Conversations from your friends"
+msgstr "Konverzace od Vašich přátel"
+
+#: ../../include/nav.php:93
+msgid "Your posts and conversations"
+msgstr "Vaše příspěvky a konverzace"
+
+#: ../../include/nav.php:99
 msgid "Notifications"
 msgstr "Upozornění"
 
-#: ../../include/nav.php:104
+#: ../../include/nav.php:99
+msgid "Friend requests"
+msgstr "Požadavky přátelství"
+
+#: ../../include/nav.php:102
+msgid "Private mail"
+msgstr "Soukromá pošta"
+
+#: ../../include/nav.php:105
 msgid "Manage"
 msgstr "Spravovat"
 
-#: ../../include/nav.php:107
-msgid "Settings"
-msgstr "Nastavení"
+#: ../../include/nav.php:105
+msgid "Manage other pages"
+msgstr "Spravovat jiné stránky"
+
+#: ../../include/nav.php:109
+msgid "Manage/edit profiles"
+msgstr "Spravovat/upravit profily"
+
+#: ../../include/nav.php:110
+msgid "Manage/edit friends and contacts"
+msgstr "Spravovat/upravit přátelé a kontakty"
+
+#: ../../include/nav.php:117
+msgid "Admin"
+msgstr "Administrace"
+
+#: ../../include/nav.php:117
+msgid "Site setup and configuration"
+msgstr "Nastavení webu a konfigurace"
 
 #: ../../include/auth.php:27
 msgid "Logged out."
@@ -3325,71 +4307,79 @@ msgstr "Odhlášen."
 msgid "Miscellaneous"
 msgstr "Různé"
 
-#: ../../include/datetime.php:148
-msgid "less than a second ago"
-msgstr "méně než před sekundou"
-
-#: ../../include/datetime.php:151
+#: ../../include/datetime.php:105 ../../include/datetime.php:237
 msgid "year"
 msgstr "rok"
 
-#: ../../include/datetime.php:151
-msgid "years"
-msgstr "let"
-
-#: ../../include/datetime.php:152
+#: ../../include/datetime.php:110 ../../include/datetime.php:238
 msgid "month"
 msgstr "měsíc"
 
-#: ../../include/datetime.php:152
+#: ../../include/datetime.php:115 ../../include/datetime.php:240
+msgid "day"
+msgstr "den"
+
+#: ../../include/datetime.php:228
+msgid "never"
+msgstr "nikdy"
+
+#: ../../include/datetime.php:234
+msgid "less than a second ago"
+msgstr "méně než před sekundou"
+
+#: ../../include/datetime.php:237
+msgid "years"
+msgstr "let"
+
+#: ../../include/datetime.php:238
 msgid "months"
 msgstr "měsíců"
 
-#: ../../include/datetime.php:153
+#: ../../include/datetime.php:239
 msgid "week"
 msgstr "týden"
 
-#: ../../include/datetime.php:153
+#: ../../include/datetime.php:239
 msgid "weeks"
 msgstr "týdny"
 
-#: ../../include/datetime.php:154
-msgid "day"
-msgstr "den"
+#: ../../include/datetime.php:240
+msgid "days"
+msgstr "d"
 
-#: ../../include/datetime.php:155
+#: ../../include/datetime.php:241
 msgid "hour"
 msgstr "hodina"
 
-#: ../../include/datetime.php:155
+#: ../../include/datetime.php:241
 msgid "hours"
 msgstr "hodin"
 
-#: ../../include/datetime.php:156
+#: ../../include/datetime.php:242
 msgid "minute"
 msgstr "minuta"
 
-#: ../../include/datetime.php:156
+#: ../../include/datetime.php:242
 msgid "minutes"
 msgstr "minut"
 
-#: ../../include/datetime.php:157
+#: ../../include/datetime.php:243
 msgid "second"
 msgstr "sekunda"
 
-#: ../../include/datetime.php:157
+#: ../../include/datetime.php:243
 msgid "seconds"
 msgstr "sekund"
 
-#: ../../include/datetime.php:164
+#: ../../include/datetime.php:250
 msgid " ago"
-msgstr "před"
+msgstr " nazpět"
 
-#: ../../include/poller.php:380
+#: ../../include/poller.php:418
 msgid "From: "
 msgstr "Od:"
 
-#: ../../include/bbcode.php:83
+#: ../../include/bbcode.php:116
 msgid "Image/photo"
 msgstr "Obrázek/fotografie"
 
@@ -3398,329 +4388,230 @@ msgstr "Obrázek/fotografie"
 msgid "Cannot locate DNS info for database server '%s'"
 msgstr "Nelze nalézt záznam v DNS pro databázový server '%s'"
 
-#: ../../include/acl_selectors.php:133
-msgid "Visible To:"
-msgstr "Viditelné pro:"
-
-#: ../../include/acl_selectors.php:133
-msgid "everybody"
-msgstr "Žádost o připojení selhala nebo byla zrušena."
+#: ../../include/acl_selectors.php:279
+msgid "Visible to everybody"
+msgstr "Viditelné pro všechny"
 
-#: ../../include/acl_selectors.php:137 ../../include/acl_selectors.php:152
-msgid "Groups"
-msgstr "Skupiny"
+#: ../../include/acl_selectors.php:280
+msgid "show"
+msgstr "zobrazit"
 
-#: ../../include/acl_selectors.php:148
-msgid "Except For:"
-msgstr "S výjimkou:"
+#: ../../include/acl_selectors.php:281
+msgid "don't show"
+msgstr "nikdy nezobrazit"
 
-#: ../../include/notifier.php:414
+#: ../../include/notifier.php:465
 msgid "(no subject)"
 msgstr "(Bez předmětu)"
 
-#: ../../include/items.php:1447
+#: ../../include/items.php:1526
 msgid "You have a new follower at "
 msgstr "Máte nového následovníka na"
 
-#: ../../include/conversation.php:191 ../../include/conversation.php:451
-#: ../../include/conversation.php:452
+#: ../../include/conversation.php:23
+msgid "event"
+msgstr "událost"
+
+#: ../../include/conversation.php:213 ../../include/conversation.php:488
+#: ../../include/conversation.php:489
 #, php-format
 msgid "View %s's profile"
 msgstr "Zobrazit %s profilu"
 
-#: ../../include/conversation.php:207
+#: ../../include/conversation.php:222 ../../include/conversation.php:501
+#, php-format
+msgid "%s from %s"
+msgstr "%s od %s"
+
+#: ../../include/conversation.php:230
 msgid "View in context"
 msgstr "Pohled v kontextu"
 
-#: ../../include/conversation.php:278
+#: ../../include/conversation.php:301
 msgid "See more posts like this"
 msgstr "Zobrazit více podobných příspěvků"
 
-#: ../../include/conversation.php:303
+#: ../../include/conversation.php:329
 #, php-format
 msgid "See all %d comments"
 msgstr "Zobrazit všechny komentáře %d"
 
-#: ../../include/conversation.php:453
+#: ../../include/conversation.php:427
+msgid "Select"
+msgstr "Vybrat"
+
+#: ../../include/conversation.php:429
+msgid "toggle star status"
+msgstr "přepnout hvězdu"
+
+#: ../../include/conversation.php:490
 msgid "to"
 msgstr "pro"
 
-#: ../../include/conversation.php:454
+#: ../../include/conversation.php:491
 msgid "Wall-to-Wall"
 msgstr "Zeď-na-Zeď"
 
-#: ../../include/conversation.php:455
+#: ../../include/conversation.php:492
 msgid "via Wall-To-Wall:"
 msgstr "přes Zeď-na-Zeď "
 
-#: ../../include/conversation.php:593
+#: ../../include/conversation.php:534
+msgid "Delete Selected Items"
+msgstr "Smazat vybrané položky"
+
+#: ../../include/conversation.php:608
 msgid "View status"
 msgstr "Zobrazit stav"
 
-#: ../../include/conversation.php:594
+#: ../../include/conversation.php:609
 msgid "View profile"
 msgstr "Zobrazit profil"
 
-#: ../../include/conversation.php:595
+#: ../../include/conversation.php:610
 msgid "View photos"
 msgstr "Zobrazit fotografie"
 
-#: ../../include/conversation.php:596
+#: ../../include/conversation.php:611
 msgid "View recent"
 msgstr "Zobrazit poslední"
 
-#: ../../include/conversation.php:598
+#: ../../include/conversation.php:613
 msgid "Send PM"
-msgstr "Poslat PM"
+msgstr "Poslat soukromou zprávu"
 
-#: ../../include/conversation.php:648
+#: ../../include/conversation.php:663
 #, php-format
 msgid "%s likes this."
 msgstr "%s se to líbí."
 
-#: ../../include/conversation.php:648
+#: ../../include/conversation.php:663
 #, php-format
 msgid "%s doesn't like this."
 msgstr "%s se to nelíbí."
 
-#: ../../include/conversation.php:652
+#: ../../include/conversation.php:667
 #, php-format
 msgid "<span  %1$s>%2$d people</span> like this."
 msgstr "<span  %1$s>%2$d lidem</span> se to líbí."
 
-#: ../../include/conversation.php:654
+#: ../../include/conversation.php:669
 #, php-format
 msgid "<span  %1$s>%2$d people</span> don't like this."
 msgstr "<span  %1$s>%2$d lidem</span> se to nelíbí."
 
-#: ../../include/conversation.php:660
+#: ../../include/conversation.php:675
 msgid "and"
 msgstr "a"
 
-#: ../../include/conversation.php:663
+#: ../../include/conversation.php:678
 #, php-format
 msgid ", and %d other people"
 msgstr ", a %d dalších lidí"
 
-#: ../../include/conversation.php:664
+#: ../../include/conversation.php:679
 #, php-format
 msgid "%s like this."
 msgstr "%s se to líbí."
 
-#: ../../include/conversation.php:664
+#: ../../include/conversation.php:679
 #, php-format
 msgid "%s don't like this."
 msgstr "%s se to nelíbí."
 
-#: ../../include/conversation.php:683
+#: ../../include/conversation.php:698
 msgid "Visible to <strong>everybody</strong>"
 msgstr "Viditelné pro <strong>všechny</strong>"
 
-#: ../../include/conversation.php:685
+#: ../../include/conversation.php:700
 msgid "Please enter a YouTube link:"
 msgstr "Prosím zadejte odkaz na YouTube:"
 
-#: ../../include/conversation.php:686
+#: ../../include/conversation.php:701
 msgid "Please enter a video(.ogg) link/URL:"
 msgstr "Prosím, zadejte odkaz na video (ogg.):"
 
-#: ../../include/conversation.php:687
+#: ../../include/conversation.php:702
 msgid "Please enter an audio(.ogg) link/URL:"
 msgstr "Prosím, zadejte odkaz na audio (ogg.):"
 
-#: ../../include/conversation.php:688
+#: ../../include/conversation.php:703
 msgid "Where are you right now?"
 msgstr "Kde právě jste?"
 
-#: ../../include/conversation.php:689
+#: ../../include/conversation.php:704
 msgid "Enter a title for this item"
 msgstr "Zadejte titulek pro tuto položku"
 
-#: ../../include/conversation.php:740
+#: ../../include/conversation.php:755
 msgid "Set title"
 msgstr "Nastavit titulek"
 
-#: ../../boot.php:385
+#: ../../boot.php:410
 msgid "Delete this item?"
 msgstr "Odstranit tuto položku?"
 
-#: ../../boot.php:834
+#: ../../boot.php:636
 msgid "Create a New Account"
 msgstr "Vytvořit nový účet"
 
-#: ../../boot.php:841
+#: ../../boot.php:643
 msgid "Nickname or Email address: "
 msgstr "Přezdívka nebo e-mailová adresa:"
 
-#: ../../boot.php:842
+#: ../../boot.php:644
 msgid "Password: "
 msgstr "Heslo: "
 
-#: ../../boot.php:847
+#: ../../boot.php:649
 msgid "Nickname/Email/OpenID: "
-msgstr "Přezdívka/Email/OpenID: "
+msgstr "Přezdívka/E-mail/OpenID: "
 
-#: ../../boot.php:848
+#: ../../boot.php:650
 msgid "Password (if not OpenID): "
 msgstr "Heslo (pokud se nepoužívá OpenID):"
 
-#: ../../boot.php:851
+#: ../../boot.php:653
 msgid "Forgot your password?"
 msgstr "Zapomněli jste své heslo?"
 
-#: ../../boot.php:1113
-msgid "prev"
-msgstr "předchozí"
-
-#: ../../boot.php:1115
-msgid "first"
-msgstr "první"
-
-#: ../../boot.php:1144
-msgid "last"
-msgstr "poslední"
-
-#: ../../boot.php:1147
-msgid "next"
-msgstr "další"
-
-#: ../../boot.php:2046
-msgid "No contacts"
-msgstr "Žádné kontakty"
-
-#: ../../boot.php:2054
-#, php-format
-msgid "%d Contact"
-msgid_plural "%d Contacts"
-msgstr[0] "%d kontakt"
-msgstr[1] "%d kontaktů"
-msgstr[2] "%d kontaktů"
-
-#: ../../boot.php:2329
+#: ../../boot.php:853
 msgid "Connect"
 msgstr "Spojit"
 
-#: ../../boot.php:2344
-msgid "Location:"
-msgstr "Místo:"
-
-#: ../../boot.php:2348
+#: ../../boot.php:872
 msgid ", "
 msgstr ", "
 
-#: ../../boot.php:2360
+#: ../../boot.php:884
 msgid "Status:"
 msgstr "Status:"
 
-#: ../../boot.php:2457
-msgid "Monday"
-msgstr "Pondělí"
-
-#: ../../boot.php:2457
-msgid "Tuesday"
-msgstr "Úterý"
-
-#: ../../boot.php:2457
-msgid "Wednesday"
-msgstr "Středa"
-
-#: ../../boot.php:2457
-msgid "Thursday"
-msgstr "Čtvrtek"
-
-#: ../../boot.php:2457
-msgid "Friday"
-msgstr "Pátek"
-
-#: ../../boot.php:2457
-msgid "Saturday"
-msgstr "Sobota"
-
-#: ../../boot.php:2457
-msgid "Sunday"
-msgstr "Neděle"
-
-#: ../../boot.php:2461
-msgid "January"
-msgstr "Ledna"
-
-#: ../../boot.php:2461
-msgid "February"
-msgstr "Února"
-
-#: ../../boot.php:2461
-msgid "March"
-msgstr "Března"
-
-#: ../../boot.php:2461
-msgid "April"
-msgstr "Dubna"
-
-#: ../../boot.php:2461
-msgid "May"
-msgstr "Května"
-
-#: ../../boot.php:2461
-msgid "June"
-msgstr "Června"
-
-#: ../../boot.php:2461
-msgid "July"
-msgstr "Července"
-
-#: ../../boot.php:2461
-msgid "August"
-msgstr "Srpna"
-
-#: ../../boot.php:2461
-msgid "September"
-msgstr "Září"
-
-#: ../../boot.php:2461
-msgid "October"
-msgstr "Října"
-
-#: ../../boot.php:2461
-msgid "November"
-msgstr "Listopadu"
-
-#: ../../boot.php:2461
-msgid "December"
-msgstr "Prosince"
-
-#: ../../boot.php:2476
+#: ../../boot.php:975
 msgid "g A l F d"
 msgstr "g A l F d"
 
-#: ../../boot.php:2494
+#: ../../boot.php:993
 msgid "Birthday Reminders"
 msgstr "Připomínka narozenin"
 
-#: ../../boot.php:2495
+#: ../../boot.php:994
 msgid "Birthdays this week:"
 msgstr "Narozeniny tento týden:"
 
-#: ../../boot.php:2496
+#: ../../boot.php:995
 msgid "(Adjusted for local time)"
 msgstr "(Upraveno pro místní čas)"
 
-#: ../../boot.php:2507
+#: ../../boot.php:1006
 msgid "[today]"
 msgstr "[Dnes]"
 
-#: ../../boot.php:2570
-msgid "bytes"
-msgstr "bytů"
-
-#: ../../boot.php:2744
-msgid "link to source"
-msgstr "odkaz na zdroj"
-
-#: ../../index.php:199
+#: ../../index.php:209
 msgid "Not Found"
 msgstr "Nenalezen"
 
-#: ../../index.php:200
+#: ../../index.php:210
 msgid "Page not found."
 msgstr "Stránka nenalezena"
 
index 7d144dbd8e6258b6e9037f9fa6543e294c5a937d..5447d2e804ca15a2a1832b92cb809a6b026a97fa 100644 (file)
@@ -4,9 +4,9 @@ Milý/Milá $username,
  
 Vaše přihlašovací údaje jsou tato:
 
-Adresa webu:           $siteurl
+Adresa webu:       $siteurl
 Přihlašovací jméno: $email
-Heslo:                         $new_password
+Heslo:             $new_password
 
 Toto heslo si můžete změnit z vašeho účtu na stránce Nastavení poté, co se přihlásíte.
 
index 96235e572ee6872a8e13d44d7dc8bacd06e10779..f8e42678b4815228bd6cc229f7b383b4174df8cc 100644 (file)
@@ -2,9 +2,9 @@ Milý/milá $username,
        Díky za registraci na $sitename. Váš účet byl vytvořen.
 Vaše přihlašovací údaje jsou tato:
 
-Adresa webu:           $siteurl
+Adresa webu:       $siteurl
 Přihlašovací jméno: $email
-Heslo:                         $password
+Heslo:             $password
 
 Toto heslo si můžete změnit z vašeho účtu na stránce "Nastavení" poté, co se přihlásíte.
 
index a843a857e32fc0e96d420212ed7f296f49f5130e..4b34c6b6dcd0d14dcdda44c76e4c1d89479bcb89 100644 (file)
@@ -3,9 +3,9 @@ Na webu $sitename byla vytvořena nová uživatelská registrace, která vyžadu
 
 Přihlašovací údaje jsou tato:
 
-Celé jméno:                  $username
-Adresa webu:           $siteurl
-Přihlašovací jméno:        $email
+Celé jméno:      $username
+Adresa webu:       $siteurl
+Přihlašovací jméno: $email
 
 Pro odsouhlasení tohoto požadavku prosím klikněte na následující odkaz:
 
index 32d06de99b96a7ed6a8975d98e6c22c2395d0277..0c7d0d7bd8943bc05ff6a902f22fb00799ccf80c 100644 (file)
@@ -1,29 +1,53 @@
 <?php
 
-function string_plural_select($n){
+function string_plural_select_cs($n){
        return ($n==1) ? 0 : ($n>=2 && $n<=4) ? 1 : 2;
 }
 ;
 $a->strings["Post successful."] = "Příspěvek úspěšně odeslán";
-$a->strings["Contact settings applied."] = "Opravit nastavení kontaktu";
+$a->strings["Contact settings applied."] = "Nastavení kontaktu změněno";
 $a->strings["Contact update failed."] = "Aktualizace kontaktu selhala.";
 $a->strings["Permission denied."] = "Přístup odmítnut.";
 $a->strings["Contact not found."] = "Kontakt nenalezen.";
 $a->strings["Repair Contact Settings"] = "Opravit nastavení kontaktu";
 $a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working."] = "<strong>VAROVÁNÍ: Toto je velmi pokročilé nastavení,</strong> pokud zadáte nesprávné informace, komunikace s tímto kontaktem přestane fungovat.";
-$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Aktualizace kontaktu selhala";
+$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Prosím použijte <strong>ihned</strong> v prohlížeči tlačítko \"zpět\" pokud si nejste jistí co dělat na této stránce.";
 $a->strings["Name"] = "Jméno";
 $a->strings["Account Nickname"] = "Přezdívka účtu";
 $a->strings["Account URL"] = "URL adresa účtu";
 $a->strings["Friend Request URL"] = "Žádost o přátelství URL";
 $a->strings["Friend Confirm URL"] = "URL adresa potvrzení přátelství";
 $a->strings["Notification Endpoint URL"] = "Notifikační URL adresa";
-$a->strings["Poll/Feed URL"] = "Sdílený obsah v síti Friendika je poskytována pod <a href=\"http://creativecommons.org/licenses/by/3.0/cz/\">licencí Creative Commons Attribution 3.0</a>";
+$a->strings["Poll/Feed URL"] = "Poll/Feed URL adresa";
 $a->strings["Submit"] = "Odeslat";
 $a->strings["Help:"] = "Nápověda:";
 $a->strings["Help"] = "Nápověda";
 $a->strings["File exceeds size limit of %d"] = "Velikost souboru přesáhla limit %d";
 $a->strings["File upload failed."] = "Nahrání souboru se nezdařilo.";
+$a->strings["Friend suggestion sent."] = "Návrhy přátelství odeslány ";
+$a->strings["Suggest Friends"] = "Navrhněte přátelé";
+$a->strings["Suggest a friend for %s"] = "Navrhněte přátelé pro uživatele %s";
+$a->strings["Status"] = "Stav";
+$a->strings["Profile"] = "Profil";
+$a->strings["Photos"] = "Fotografie";
+$a->strings["Events"] = "Události";
+$a->strings["Personal Notes"] = "Osobní poznámky";
+$a->strings["Create New Event"] = "Vytvořit novou událost";
+$a->strings["Previous"] = "Předchozí";
+$a->strings["Next"] = "Následující";
+$a->strings["l, F j"] = "l, F j";
+$a->strings["Edit event"] = "Editovat událost";
+$a->strings["link to source"] = "odkaz na zdroj";
+$a->strings["hour:minute"] = "hodina:minuta";
+$a->strings["Event details"] = "Detaily události";
+$a->strings["Format is %s %s. Starting date and Description are required."] = "Formát je %s %s. Datum zahájení a popis jsou povinné.";
+$a->strings["Event Starts:"] = "Událost začíná:";
+$a->strings["Finish date/time is not known or not relevant"] = "Datum/čas konce není zadán nebo není relevantní";
+$a->strings["Event Finishes:"] = "Akce končí:";
+$a->strings["Adjust for viewer timezone"] = "Nastavit časové pásmo pro uživatele s právem pro čtení";
+$a->strings["Description:"] = "Popis:";
+$a->strings["Location:"] = "Místo:";
+$a->strings["Share this event"] = "Sdílet tuto událost";
 $a->strings["Cancel"] = "Zrušit";
 $a->strings["Tag removed"] = "Štítek odstraněn";
 $a->strings["Remove Item Tag"] = "Odebrat štítek položky";
@@ -32,6 +56,7 @@ $a->strings["Remove"] = "Odstranit";
 $a->strings["%s welcomes %s"] = "%s vítá %s ";
 $a->strings["Photo Albums"] = "Fotoalba";
 $a->strings["Contact Photos"] = "Fotogalerie kontaktu";
+$a->strings["everybody"] = "Žádost o připojení selhala nebo byla zrušena.";
 $a->strings["Contact information unavailable"] = "Kontakt byl zablokován";
 $a->strings["Profile Photos"] = "Profilové fotografie";
 $a->strings["Album not found."] = "Album nenalezeno.";
@@ -41,10 +66,12 @@ $a->strings["was tagged in a"] = "štítek byl přidán v";
 $a->strings["photo"] = "fotografie";
 $a->strings["by"] = "od";
 $a->strings["Image exceeds size limit of "] = "Velikost obrázku překračuje limit velikosti";
-$a->strings["Unable to process image."] = "Kontakt byl odblokován";
+$a->strings["Image file is empty."] = "Soubor obrázku je prázdný.";
+$a->strings["Unable to process image."] = "Obrázek není možné zprocesovat";
 $a->strings["Image upload failed."] = "Nahrání obrázku selhalo.";
 $a->strings["Public access denied."] = "Veřejný přístup odepřen.";
 $a->strings["No photos selected"] = "Není vybrána žádná fotografie";
+$a->strings["Access to this item is restricted."] = "Přístup k této položce je omezen.";
 $a->strings["Upload Photos"] = "Nahrání fotografií ";
 $a->strings["New album name: "] = "Název nového alba:";
 $a->strings["or existing album name: "] = "nebo stávající název alba:";
@@ -55,15 +82,13 @@ $a->strings["Photo not available"] = "Fotografie není k dispozici";
 $a->strings["Edit photo"] = "Editovat fotografii";
 $a->strings["Use as profile photo"] = "Použít jako profilovou fotografii";
 $a->strings["Private Message"] = "Soukromá zpráva";
-$a->strings["<< Prev"] = "<< Předchozí";
 $a->strings["View Full Size"] = "Zobrazit v plné velikosti";
-$a->strings["Next >>"] = "Následující >>";
 $a->strings["Tags: "] = "Štítky:";
 $a->strings["[Remove any tag]"] = "[Odstranit všechny štítky]";
 $a->strings["New album name"] = "Nové jméno alba";
 $a->strings["Caption"] = "Titulek";
 $a->strings["Add a Tag"] = "Přidat štítek";
-$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Kontakt byl ignorován";
+$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Příklad: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping";
 $a->strings["I like this (toggle)"] = "Líbí se mi to (přepínač)";
 $a->strings["I don't like this (toggle)"] = "Nelíbí se mi to (přepínač)";
 $a->strings["Share"] = "Sdílet";
@@ -74,6 +99,10 @@ $a->strings["Delete"] = "Odstranit";
 $a->strings["Recent Photos"] = "Aktuální fotografie";
 $a->strings["Upload New Photos"] = "Nahrát nové fotografie";
 $a->strings["View Album"] = "Zobrazit album";
+$a->strings["Not available."] = "Není k dispozici.";
+$a->strings["Community"] = "Komunita";
+$a->strings["No results."] = "Žádné výsledky.";
+$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Sdílený obsah je v souladu s <a href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative 3.0</a> licencí.";
 $a->strings["Item not found"] = "Položka nenalezena";
 $a->strings["Edit post"] = "Upravit příspěvek";
 $a->strings["Post to Email"] = "Poslat příspěvek na e-mail";
@@ -84,14 +113,14 @@ $a->strings["Insert web link"] = "Vložit webový odkaz";
 $a->strings["Insert YouTube video"] = "Vložit YouTube video";
 $a->strings["Insert Vorbis [.ogg] video"] = "Vložit Vorbis [.ogg] video";
 $a->strings["Insert Vorbis [.ogg] audio"] = "Vložit Vorbis [.ogg] audio";
-$a->strings["Set your location"] = "Kontakt přestal být ignorován";
-$a->strings["Clear browser location"] = "Kontakt byl odstraněn";
+$a->strings["Set your location"] = "Nastavte vaši polohu";
+$a->strings["Clear browser location"] = "Odstranit adresu v prohlížeči";
 $a->strings["Permission settings"] = "Nastavení oprávnění";
 $a->strings["CC: email addresses"] = "skrytá kopie: e-mailové adresy";
 $a->strings["Public post"] = "Veřejný příspěvek";
-$a->strings["Example: bob@example.com, mary@example.com"] = "Editor kontaktu";
-$a->strings["This introduction has already been accepted."] = "Kontaktní informace / poznámky";
-$a->strings["Profile location is not valid or does not contain profile information."] = "Zablokovat/Odblokovat kontakt";
+$a->strings["Example: bob@example.com, mary@example.com"] = "Příklad: bob@example.com, mary@example.com";
+$a->strings["This introduction has already been accepted."] = "Toto pozvání již bylo přijato";
+$a->strings["Profile location is not valid or does not contain profile information."] = "Adresa profilu není platná nebo neobsahuje profilové informace";
 $a->strings["Warning: profile location has no identifiable owner name."] = "Varování: umístění profilu nemá žádné identifikovatelné jméno vlastníka";
 $a->strings["Warning: profile location has no profile photo."] = "Varování: umístění profilu nemá žádnou profilovou fotografii.";
 $a->strings["%d required parameter was not found at the given location"] = array(
@@ -100,10 +129,10 @@ $a->strings["%d required parameter was not found at the given location"] = array
        2 => "%d požadované parametry nebyly nalezeny na daném místě",
 );
 $a->strings["Introduction complete."] = "Představení dokončeno.";
-$a->strings["Unrecoverable protocol error."] = "Smazat kontakt";
+$a->strings["Unrecoverable protocol error."] = "Neopravitelná chyba protokolu";
 $a->strings["Profile unavailable."] = "Profil není k dispozici.";
 $a->strings["%s has received too many connection requests today."] = "%s dnes obdržel příliš mnoho požadavků na připojení.";
-$a->strings["Spam protection measures have been invoked."] = "Blokovat tento kontakt";
+$a->strings["Spam protection measures have been invoked."] = "Ochrana proti spamu byla aktivována";
 $a->strings["Friends are advised to please try again in 24 hours."] = "Přátelům se doporučuje to zkusit znovu za 24 hodin.";
 $a->strings["Invalid locator"] = "Neplatný odkaz";
 $a->strings["Unable to resolve your name at the provided location."] = "Nepodařilo se zjistit Vaše jméno na zadané adrese.";
@@ -120,11 +149,11 @@ $a->strings["Please confirm your introduction/connection request to %s."] = "Pro
 $a->strings["Confirm"] = "Potvrdit";
 $a->strings["[Name Withheld]"] = "[Jméno odepřeno]";
 $a->strings["Introduction received at "] = "Pozvánka přijata v";
-$a->strings["Administrator"] = "Správce";
+$a->strings["Administrator"] = "Administrátor";
 $a->strings["Friend/Connection Request"] = "Požadavek o přátelství / propojení";
 $a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Příklady: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca";
 $a->strings["Please answer the following:"] = "Odpovězte, prosím, následující:";
-$a->strings["Does \$name know you?"] = "Zná Vás \$name?";
+$a->strings["Does %s know you?"] = "Zná Vás uživatel %s ?";
 $a->strings["Yes"] = "Ano";
 $a->strings["No"] = "Ne";
 $a->strings["Add a personal note:"] = "Přidat osobní poznámku:";
@@ -147,14 +176,15 @@ $a->strings["You may need to import the file \"database.sql\" manually using php
 $a->strings["Welcome to Friendika."] = "Vítejte na Friendice.";
 $a->strings["Friendika Social Network"] = "Sociální síť Friendika ";
 $a->strings["Installation"] = "Instalace";
-$a->strings["In order to install Friendika we need to know how to contact your database."] = "Pro instalaci Friendiky musíme vědět, jak se připojit k Vaší databázi.";
-$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Obraťte se na svého poskytovatele hostingu nebo správce serveru, pokud máte dotazy týkající se těchto nastavení.";
-$a->strings["The database you specify below must already exist. If it does not, please create it before continuing."] = "Databáze zadáte níže již musí existovat. Pokud ještě neexistuje, vytvořte ji, prosím, aby bylo možné pokračovat.";
+$a->strings["In order to install Friendika we need to know how to connect to your database."] = "Pro instalaci Friendika musíme vědět, jak se připojit k databázi.";
+$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Obraťte se na svého poskytovatele hostingu nebo administrátora serveru , pokud máte dotazy týkající se těchto nastavení.";
+$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Databázi, kterou uvedete níže by již měla existovat. Pokud tak není, prosíme, vytvořte ji před pokračováním.";
 $a->strings["Database Server Name"] = "Jméno databázového serveru";
 $a->strings["Database Login Name"] = "Přihlašovací jméno k databázi";
 $a->strings["Database Login Password"] = "Heslo k databázovému účtu ";
 $a->strings["Database Name"] = "Jméno databáze";
 $a->strings["Please select a default timezone for your website"] = "Prosím, vyberte výchozí časové pásmo pro vaše webové stránky";
+$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "e-mailová adresa administrárota webu. E-mailová adresa vašeho účtu se musí shodovat, aby bylo možné využívat panel webové administrace.";
 $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Nelze najít verzi PHP pro příkazový řádek v PATH webového serveru.";
 $a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "Tento krok je nutný. Upravte příslušným způsobem konfigurační soubor .htconfig.php.";
 $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Verze PHP pro příkazový řádek na vašem systému nemá povolen \"register_argc_argv\".";
@@ -166,13 +196,16 @@ $a->strings["Error: libCURL PHP module required but not installed."] = "Chyba: p
 $a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Chyba: požadovaný GD graphics PHP modul není nainstalován.";
 $a->strings["Error: openssl PHP module required but not installed."] = "Chyba: požadovaný openssl PHP modul není nainstalován.";
 $a->strings["Error: mysqli PHP module required but not installed."] = "Chyba: požadovaný mysqli PHP modul není nainstalován.";
+$a->strings["Error: mb_string PHP module required but not installed."] = "Chyba: PHP modul mb_string  je vyžadován, ale není nainstalován.";
 $a->strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "Webový instalátor musí být schopen vytvořit soubor s názvem \".htconfig.php\" v hlavním adresáři vašeho webového serveru ale nyní mu to není umožněno.";
 $a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Toto je nejčastěji nastavením oprávnění, kdy webový server nemusí být schopen zapisovat soubory do vašeho adresáře - i když Vy můžete.";
 $a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Prosím, poraďte se s dokumentací k Vašemu hostingu nebo s technickou podporou, zda-li lze tuto situaci napravit.";
 $a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Pokud ne, může být vyžadováno provedení ruční instalace. Prosím, seznamte se s návodem popsaným v souboru \"INSTALL.txt\".";
 $a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Databázový konfigurační soubor \".htconfig.php\" nemohl být uložen. Prosím, použijte přiložený text k vytvoření konfiguračního souboru ve vašem kořenovém adresáři webového serveru.";
 $a->strings["Errors encountered creating database tables."] = "Při vytváření databázových tabulek došlo k chybám.";
+$a->strings["[Embedded content - reload page to view]"] = "[Vložený obsah - obnovení stránky pro zobrazení]";
 $a->strings["Profile Match"] = "Shoda profilu";
+$a->strings["No keywords to match. Please add keywords to your default profile."] = "Žádná klíčová slova k porovnání. Prosím, přidejte klíčová slova do Vašeho výchozího profilu.";
 $a->strings["No matches"] = "Žádné shody";
 $a->strings["Remote privacy information not available."] = "Vzdálené soukromé informace nejsou k dispozici.";
 $a->strings["Visible to:"] = "Viditelné pro:";
@@ -183,21 +216,25 @@ $a->strings["Ignore"] = "Ignorovat";
 $a->strings["Pending Friend/Connect Notifications"] = "Čekající požadavky na Přátelství / Připojení ";
 $a->strings["Show Ignored Requests"] = "Zobrazit ignorované žádosti";
 $a->strings["Hide Ignored Requests"] = "Skrýt ignorované žádosti";
+$a->strings["Notification type: "] = "Typ oznámení:";
+$a->strings["Friend Suggestion"] = "Návrh přátelství";
+$a->strings["suggested by %s"] = "navrhl %s";
+$a->strings["Approve"] = "Schválit";
 $a->strings["Claims to be known to you: "] = "Vaši údajní známí:";
 $a->strings["yes"] = "ano";
 $a->strings["no"] = "ne";
 $a->strings["Approve as: "] = "Schválit jako:";
 $a->strings["Friend"] = "Přítel";
 $a->strings["Fan/Admirer"] = "Fanoušek / obdivovatel";
-$a->strings["Notification type: "] = "Typ oznámení:";
 $a->strings["Friend/Connect Request"] = "Přítel / žádost o připojení";
 $a->strings["New Follower"] = "Nový následovník";
-$a->strings["Approve"] = "Schválit";
 $a->strings["No notifications."] = "Žádné oznámení.";
-$a->strings["User registrations waiting for confirm"] = "Registrace uživatele čeká na potvrzení";
-$a->strings["Deny"] = "Odmítnout";
-$a->strings["No registrations."] = "Žádné registrace.";
 $a->strings["Invite Friends"] = "Pozvat přátele";
+$a->strings["%d invitation available"] = array(
+       0 => "Pozvánka %d k dispozici",
+       1 => "Pozvánky %d k dispozici",
+       2 => "Pozvánky %d k dispozici",
+);
 $a->strings["Find People With Shared Interests"] = "Najít lidi se společnými zájmy";
 $a->strings["Connect/Follow"] = "Připojit / Následovat";
 $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Příklad: jan@příklad.cz, http://příklad.cz/jana";
@@ -219,6 +256,7 @@ $a->strings["Private communications are not available for this contact."] = "Sou
 $a->strings["Never"] = "Nikdy";
 $a->strings["(Update was successful)"] = "(Aktualizace byla úspěšná)";
 $a->strings["(Update was not successful)"] = "(Aktualizace nebyla úspěšná)";
+$a->strings["Suggest friends"] = "Navrhněte přátelé";
 $a->strings["Contact Editor"] = "Editor kontaktu";
 $a->strings["Profile Visibility"] = "Viditelnost profilu";
 $a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Vyberte prosím profil, který chcete zobrazit %s při zabezpečeném prohlížení vašeho profilu.";
@@ -227,7 +265,7 @@ $a->strings["Online Reputation"] = "Online pověst";
 $a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = "Občas mohou vaši přátelé chtít informovat o online legitimitě této osoby.";
 $a->strings["You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them."] = "Poskytnutím <em>pověsti</em> jim můžete pomoci se rozhodnout, zda-li s touto osobou komunikovat či nikoliv.";
 $a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = "Věnujte prosím chvilku vyplnění této volby, pokud máte pocit, že by mohlo být užitečné pro ostatní.";
-$a->strings["Visit \$name's profile"] = "Navštívit profil \$name";
+$a->strings["Visit %s's profile [%s]"] = "Navštivte profil uživatele %s [%s]";
 $a->strings["Block/Unblock contact"] = "Blokovat / Odblokovat kontakt";
 $a->strings["Ignore contact"] = "Ignorovat kontakt";
 $a->strings["Repair contact URL settings"] = "Opravit nastavení URL kontaktu";
@@ -248,13 +286,13 @@ $a->strings["Show Blocked Connections"] = "Zobrazit blokované spojení";
 $a->strings["Hide Blocked Connections"] = "Skrýt blokované spojení";
 $a->strings["Finding: "] = "Zjištění: ";
 $a->strings["Find"] = "Najít";
-$a->strings["Visit \$username's profile"] = "Navštívit profil uživatele \$username";
 $a->strings["Edit contact"] = "Editovat kontakt";
+$a->strings["No valid account found."] = "Nenalezen žádný platný účet.";
 $a->strings["Password reset request issued. Check your email."] = "Žádost o obnovení hesla vyřízena. Zkontrolujte Vaši e-mailovou schránku.";
-$a->strings["Password reset requested at %s"] = "Resetování hesla vyžádáno v %s";
+$a->strings["Password reset requested at %s"] = "Na %s bylo zažádáno o resetování hesla";
 $a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Žádost nemohla být ověřena. (Možná jste ji odeslali již dříve.) Obnovení hesla se nezdařilo.";
-$a->strings["Password Reset"] = "Obnovit heslo";
-$a->strings["Your password has been reset as requested."] = "Vaše heslo bylo resetováno jak bylo požadováno.";
+$a->strings["Password Reset"] = "Obnovení hesla";
+$a->strings["Your password has been reset as requested."] = "Vaše heslo bylo na Vaše přání resetováno.";
 $a->strings["Your new password is"] = "Vaše nové heslo je";
 $a->strings["Save or copy your new password - and then"] = "Uložte si nebo zkopírujte nové heslo - a pak";
 $a->strings["click here to login"] = "klikněte zde pro přihlášení";
@@ -267,73 +305,82 @@ $a->strings["Passwords do not match. Password unchanged."] = "Hesla se neshoduj
 $a->strings["Empty passwords are not allowed. Password unchanged."] = "Prázdné hesla nejsou povolena. Heslo nebylo změněno.";
 $a->strings["Password changed."] = "Heslo bylo změněno.";
 $a->strings["Password update failed. Please try again."] = "Aktualizace hesla se nezdařila. Zkuste to prosím znovu.";
+$a->strings["Failed to connect with email account using the settings provided."] = "Nepodařilo se připojit k e-mailovému účtu pomocí dodaného nastavení.";
 $a->strings[" Please use a shorter name."] = "Prosím použijte kratší jméno.";
 $a->strings[" Name too short."] = "Jméno je příliš krátké.";
 $a->strings[" Not valid email."] = "Neplatný e-mail.";
 $a->strings[" Cannot change to that email."] = "Nelze provést změnu na tento e-mail.";
 $a->strings["Settings updated."] = "Nastavení aktualizováno.";
-$a->strings["Plugin Settings"] = "Nastavení doplňku";
-$a->strings["Account Settings"] = "Nastavení účtu";
+$a->strings["Account settings"] = "Nastavení účtu";
+$a->strings["Plugin settings"] = "Nastavení pluginu";
 $a->strings["No Plugin settings configured"] = "Žádný doplněk není nastaven";
+$a->strings["Plugin Settings"] = "Nastavení doplňku";
 $a->strings["Normal Account"] = "Normální účet";
 $a->strings["This account is a normal personal profile"] = "Tento účet je běžný osobní profil";
 $a->strings["Soapbox Account"] = "Soapbox účet";
 $a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Automaticky schválit všechna spojení / přátelství jako fanoušky s právem pouze ke čtení";
 $a->strings["Community/Celebrity Account"] = "Komunitní účet / Účet celebrity";
 $a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Automaticky schvalovat všechny žádosti o spojení / přátelství, jako fanoušky s právem ke čtení.";
-$a->strings["Automatic Friend Account"] = "Automatický účet přítele";
+$a->strings["Automatic Friend Account"] = "Účet s automatickým schvalováním přátel";
 $a->strings["Automatically approve all connection/friend requests as friends"] = "Automaticky schvalovat všechny žádosti o spojení / přátelství jako přátele";
-$a->strings["OpenID: "] = "OpenID: ";
-$a->strings["&nbsp;(Optional) Allow this OpenID to login to this account."] = "&nbsp;(Volitelné) Povolit toto OpenID pro přihlášení k tomuto účtu.";
-$a->strings["Publish your default profile in site directory?"] = "Zveřejnit Váš výchozí profil v místním adresáři?";
-$a->strings["Publish your default profile in global social directory?"] = "Zveřejnit Váš výchozí profil v globálním sociální adresáři?";
+$a->strings["OpenID:"] = "OpenID:";
+$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Volitelné) Povolit OpenID pro přihlášení k tomuto účtu.";
+$a->strings["Publish your default profile in your local site directory?"] = "Publikovat Váš výchozí profil v místním adresáři webu?";
+$a->strings["Publish your default profile in the global social directory?"] = "Publikovat Váš výchozí profil v globální sociálním adresáři?";
+$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Skrýt Vaše kontaktní údaje a seznam přátel před návštěvníky ve Vašem výchozím profilu?";
+$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?";
 $a->strings["Profile is <strong>not published</strong>."] = "Profil <strong>není zveřejněn</strong>.";
 $a->strings["or"] = "nebo";
 $a->strings["Your Identity Address is"] = "Vaše adresa identity je";
+$a->strings["Account Settings"] = "Nastavení účtu";
 $a->strings["Export Personal Data"] = "Export osobních údajů";
+$a->strings["Password Settings"] = "Nastavení hesla";
+$a->strings["New Password:"] = "Nové heslo:";
+$a->strings["Confirm:"] = "Potvrďte:";
+$a->strings["Leave password fields blank unless changing"] = "Pokud nechcete změnit heslo, položku hesla nevyplňujte";
 $a->strings["Basic Settings"] = "Základní nastavení";
 $a->strings["Full Name:"] = "Celé jméno:";
 $a->strings["Email Address:"] = "E-mailová adresa:";
 $a->strings["Your Timezone:"] = "Vaše časové pásmo:";
 $a->strings["Default Post Location:"] = "Výchozí umístění příspěvků:";
-$a->strings["Use Browser Location:"] = "Použijte prohlížeč Místo:";
-$a->strings["Display Theme:"] = "Zobrazit téma:";
+$a->strings["Use Browser Location:"] = "Používat umístění dle prohlížeče:";
+$a->strings["Display Theme:"] = "Vybrat grafickou šablonu:";
 $a->strings["Security and Privacy Settings"] = "Nastavení zabezpečení a soukromí";
 $a->strings["Maximum Friend Requests/Day:"] = "Maximální počet žádostí o přátelství za den:";
 $a->strings["(to prevent spam abuse)"] = "(Aby se zabránilo spamu)";
+$a->strings["Default Post Permissions"] = "Výchozí oprávnění pro příspěvek";
+$a->strings["(click to open/close)"] = "(Klikněte pro otevření/zavření)";
 $a->strings["Allow friends to post to your profile page:"] = "Povolit přátelům příspěvky na Vaši profilovou stránku:";
-$a->strings["Automatically expire (delete) posts older than"] = "Automaticky smazat příspěvky starší než";
-$a->strings["days"] = "dnů";
+$a->strings["Automatically expire posts after days:"] = "Po kolika dnech automaticky expirovat příspěvky:";
+$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Pokud je prázdné, příspěvky nebudou nikdy expirovat. Expirované příspěvky budou vymazány";
 $a->strings["Notification Settings"] = "Nastavení notifikací";
-$a->strings["Send a notification email when:"] = "Posílat e-mailové upozornění když: ";
-$a->strings["You receive an introduction"] = "Obdržíte žádost o propojení";
+$a->strings["Send a notification email when:"] = "Poslat notifikaci e-mailem, když";
+$a->strings["You receive an introduction"] = "obdržíte žádost o propojení";
 $a->strings["Your introductions are confirmed"] = "Vaše žádosti jsou potvrzeny";
-$a->strings["Someone writes on your profile wall"] = "Někdo píše na Vaši profilovou stránku";
-$a->strings["Someone writes a followup comment"] = "Někdo píše následný komentář";
-$a->strings["You receive a private message"] = "Obdržel jste soukromou zprávu";
-$a->strings["Password Settings"] = "Nastavení hesla";
-$a->strings["Leave password fields blank unless changing"] = "Pokud nechcete změnit heslo, položku hesla nevyplňujte";
-$a->strings["New Password:"] = "Nové heslo:";
-$a->strings["Confirm:"] = "Potvrďte:";
-$a->strings["Advanced Page Settings"] = "Pokročilé nastavení stránky";
-$a->strings["Default Post Permissions"] = "Výchozí oprávnění pro příspěvek";
-$a->strings["(click to open/close)"] = "(Klikněte pro otevření/zavření)";
+$a->strings["Someone writes on your profile wall"] = "někdo Vám napíše na Vaši profilovou stránku";
+$a->strings["Someone writes a followup comment"] = "někdo Vám napíše následný komentář";
+$a->strings["You receive a private message"] = "obdržíte soukromou zprávu";
 $a->strings["Email/Mailbox Setup"] = "Nastavení e-mailu";
 $a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Pokud chcete komunikovat pomocí této služby s Vašimi kontakty z e-mailu (volitelné), uveďte, jak se připojit k Vaší e-mailové schránce.";
+$a->strings["Last successful email check:"] = "Poslední úspěšná kontrola e-mailu:";
+$a->strings["Email access is disabled on this site."] = "Přístup k elektronické poště je na tomto serveru zakázán.";
 $a->strings["IMAP server name:"] = "jméno IMAP serveru:";
 $a->strings["IMAP port:"] = "IMAP port:";
-$a->strings["Security (TLS or SSL):"] = "Zabezpečení (TLS nebo SSL):";
+$a->strings["Security:"] = "Zabezpečení:";
+$a->strings["None"] = "Žádný";
 $a->strings["Email login name:"] = "přihlašovací jméno k e-mailu:";
 $a->strings["Email password:"] = "heslo k Vašemu e-mailu:";
-$a->strings["Reply-to address (Optional):"] = "Odpovědět na adresu (nepovinné):";
+$a->strings["Reply-to address:"] = "Odpovědět na adresu:";
 $a->strings["Send public posts to all email contacts:"] = "Poslat veřejné příspěvky na všechny e-mailové kontakty:";
-$a->strings["Email access is disabled on this site."] = "Přístup k elektronické poště je na tomto serveru zakázán.";
+$a->strings["Advanced Page Settings"] = "Pokročilé nastavení stránky";
 $a->strings["Welcome back %s"] = "Vítejte zpět %s";
 $a->strings["Manage Identities and/or Pages"] = "Správa identit a / nebo stránek";
 $a->strings["(Toggle between different identities or community/group pages which share your account details.)"] = "(Přepínání mezi různými identitami nebo komunitními / skupinovými stránkami, které sdílejí Vaše detaily  účtu.)";
 $a->strings["Select an identity to manage: "] = "Vyberte identitu pro správu:";
-$a->strings["Normal View"] = "Normální zobrazení";
-$a->strings["New Item View"] = "Zobrazení nových položek";
+$a->strings["View Conversations"] = "Zobrazit konverzace";
+$a->strings["View New Items"] = "Zobrazit nové položky";
+$a->strings["View Any Items"] = "Zobrazit všechny položky";
+$a->strings["View Starred Items"] = "Zobrazit položky označené hvězdu";
 $a->strings["Warning: This group contains %s member from an insecure network."] = array(
        0 => "Upozornění: Tato skupina obsahuje %s člena z nezabezpečené sítě.",
        1 => "Upozornění: Tato skupina obsahuje %s členy z nezabezpečené sítě.",
@@ -346,9 +393,21 @@ $a->strings["Group: "] = "Skupina:";
 $a->strings["Contact: "] = "Kontakt:";
 $a->strings["Private messages to this person are at risk of public disclosure."] = "Soukromé zprávy této osobě jsou vystaveny riziku prozrazení.";
 $a->strings["Invalid contact."] = "Neplatný kontakt.";
-$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Sdílený obsah je v souladu s <a href=\"http://creativecommons.org/licenses/by/3.0/\">Commons Creative 3.0</a> licencí.";
-$a->strings["Private Notes"] = "Soukromé poznámky";
 $a->strings["Save"] = "Uložit";
+$a->strings["Welcome to Friendika"] = "Vítejte na Friendika";
+$a->strings["New Member Checklist"] = "Seznam doporučení pro nového člena";
+$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = "Dovolujeme si Vám nabídnout některé tipy a odkazy, abychom Vám zpříjemnili práci se systémem Friendika. Kliknutím na libovolnou položku navštívit příslušnou stránku.";
+$a->strings["On your <em>Settings</em> page -  change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = "Na stránce <em>Nastavení</em> - změnit výchozí heslo. Poznamenejte si také adresu své identity. To může být užitečné při navazování přátelství.";
+$a->strings["Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you."] = "Prohlédněte si další nastavení, a to zejména nastavení soukromí. Nezveřejnění svého účtu v adresáři je jako mít nezveřejněné telefonní číslo. Obecně platí, že je lepší mít svůj účet zveřejněný, leda by všichni vaši potenciální přátelé věděli, jak vás přesně najít.";
+$a->strings["Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not."] = "Nahrajte si svou profilovou fotku, pokud jste tak již neučinili. Studie ukázaly, že lidé se skutečnými fotografiemi mají desetkrát častěji přátele než lidé, kteří nemají.";
+$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "Jestliže máte účet na Facebooku, povolte konektor na Facebook a bude možné (na přání) importovat všechny Vaš přátele na Facebooku a všechny Vaše konverzace.";
+$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "na stránce Nastavení zadejte informace pro přístup k Vaší e-mailové stránce, pokud si přejete importovat a komunikovat s přáteli nebo distribučními skupinami z Vaší e-mailové schránky";
+$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "Upravit <strong>výchozí</strong> profil podle vašich představ. Prověřte nastavení pro skrytí Vašeho  seznamu přátel a skrytí profilu před neznámými návštěvníky.";
+$a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "Nastavte si nějaká veřejné klíčová slova pro výchozí profil, která popisují vaše zájmy. Friendika Vám může nalézt další lidi s podobnými zájmy a navrhnout přátelství.";
+$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Connect</em> dialog."] = "Stránka Kontakty je Vaším odrazovým můstkem k řízení přátelství a spojení s kamarády v jiných sítích. Obvykle zadáte jejich adresu nebo adresu URL do dialogu <em>Připojit</em>.";
+$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "Stránka Adresář Vám pomůže najít další lidi na tomto serveru nebo v jiných propojených serverech. Prostřednictvím odkazů <em>Připojení</em> nebo <em>Následovat</em> si prohlédněte jejich profilovou stránku. Uveďte svou vlastní adresu identity, je-li požadována.";
+$a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "Jakmile získáte nějaké přátele, uspořádejte si je do soukromých konverzačních skupin na postranním panelu vaší stránky Kontakty a pak můžete komunikovat s každou touto skupinu soukromě prostřednictvím stránky Síť.";
+$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "Na stránkách <strong>Nápověda</strong> naleznete nejen další podrobnosti o všech funkcích Friendika ale také další zdroje informací.";
 $a->strings["Item not available."] = "Položka není k dispozici.";
 $a->strings["Item was not found."] = "Položka nebyla nalezena.";
 $a->strings["Group created."] = "Skupina vytvořena.";
@@ -366,11 +425,12 @@ $a->strings["Members"] = "Členové";
 $a->strings["All Contacts"] = "Všechny kontakty";
 $a->strings["Invalid profile identifier."] = "Neplatný identifikátor profilu.";
 $a->strings["Profile Visibility Editor"] = "Editor viditelnosti profilu ";
-$a->strings["Profile"] = "Profil";
 $a->strings["Visible To"] = "Viditelný pro";
 $a->strings["All Contacts (with secure profile access)"] = "Všechny kontakty (se zabezpečeným přístupovým profilem )";
 $a->strings["View Contacts"] = "Zobrazit kontakty";
 $a->strings["No contacts."] = "Žádné kontakty.";
+$a->strings["An invitation is required."] = "Pozvánka je vyžadována.";
+$a->strings["Invitation could not be verified."] = "Pozvánka nemohla být ověřena.";
 $a->strings["Invalid OpenID url"] = "Neplatný odkaz OpenID";
 $a->strings["Please enter the required information."] = "Zadejte prosím požadované informace.";
 $a->strings["Please use a shorter name."] = "Použijte prosím kratší jméno.";
@@ -394,6 +454,8 @@ $a->strings["You may (optionally) fill in this form via OpenID by supplying your
 $a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Pokud nepoužíváte OpenID, nechte prosím toto pole prázdné a vyplňte zbylé položky.";
 $a->strings["Your OpenID (optional): "] = "Vaše OpenID (nepovinné):";
 $a->strings["Include your profile in member directory?"] = "Uvést Váš profil v adresáři členů?";
+$a->strings["Membership on this site is by invitation only."] = "Členství na tomto webu je pouze na pozvání.";
+$a->strings["Your invitation ID: "] = "Vaše pozvání ID:";
 $a->strings["Registration"] = "Registrace";
 $a->strings["Your Full Name (e.g. Joe Smith): "] = "Vaše celé jméno (např. Jan Novák):";
 $a->strings["Your Email Address: "] = "Vaše e-mailová adresa:";
@@ -411,15 +473,14 @@ $a->strings["Bug reports and issues: please visit"] = "Pro hlášení chyb a ná
 $a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = "Návrhy, chválu, dary, atd. - prosím pošlete na e-mail \"Info\" na Friendika tečka com";
 $a->strings["Installed plugins/addons/apps"] = "Nainstalované doplňky/aplikace";
 $a->strings["No installed plugins/addons/apps"] = "Nejsou žádné nainstalované doplňky/aplikace";
-$a->strings["Please login."] = "Přihlaste se, prosím.";
-$a->strings["Registration revoked for %s"] = "Registrace zrušena pro %s";
 $a->strings["Account approved."] = "Účet schválen.";
-$a->strings["[Embedded content - reload page to view]"] = "[Vložený obsah - obnovení stránky pro zobrazení]";
+$a->strings["Registration revoked for %s"] = "Registrace zrušena pro %s";
+$a->strings["Please login."] = "Přihlaste se, prosím.";
 $a->strings["Unable to locate original post."] = "Nelze nalézt původní příspěvek.";
 $a->strings["Empty post discarded."] = "Prázdný příspěvek odstraněn.";
 $a->strings["Wall Photos"] = "Fotografie na zdi";
 $a->strings["noreply"] = "bez odpovědi";
-$a->strings["Administrator@"] = "Správce@";
+$a->strings["Administrator@"] = "Administrator@";
 $a->strings["%s commented on an item at %s"] = "%s okomentoval položku v %s";
 $a->strings["%s posted to your profile wall at %s"] = "%s přidal příspěvek na vaší profilovou zeď v %s";
 $a->strings["System error. Post not saved."] = "Chyba systému. Příspěvek nebyl uložen.";
@@ -427,7 +488,6 @@ $a->strings["This message was sent to you by %s, a member of the Friendika socia
 $a->strings["You may visit them online at %s"] = "Můžete je navštívit online na adrese %s";
 $a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Pokud nechcete dostávat tyto zprávy, kontaktujte prosím odesilatele odpovědí na tento záznam.";
 $a->strings["%s posted an update."] = "%s poslal aktualizaci.";
-$a->strings["Item not found."] = "Položka nenalezena.";
 $a->strings["Image uploaded but image cropping failed."] = "Obrázek byl odeslán, ale jeho oříznutí se nesdařilo.";
 $a->strings["Image size reduction [%s] failed."] = "Nepodařilo se snížit velikost obrázku [%s].";
 $a->strings["Unable to process image"] = "Obrázek nelze zpracovat ";
@@ -441,6 +501,7 @@ $a->strings["Crop Image"] = "Oříznout obrázek";
 $a->strings["Please adjust the image cropping for optimum viewing."] = "Prosím, ořízněte tento obrázek pro optimální zobrazení.";
 $a->strings["Done Editing"] = "Editace dokončena";
 $a->strings["Image uploaded successfully."] = "Obrázek byl úspěšně nahrán.";
+$a->strings["No profile"] = "Žádný profil";
 $a->strings["Remove My Account"] = "Odstranit můj účet";
 $a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Tímto bude kompletně odstraněn váš účet. Jakmile bude účet odstraněn, nebude už možné ho obnovit.";
 $a->strings["Please enter your password for verification:"] = "Prosím, zadejte své heslo pro ověření:";
@@ -466,26 +527,114 @@ $a->strings["D, d M Y - g:i A"] = "D M R - g:i A";
 $a->strings["Message not available."] = "Zpráva není k dispozici.";
 $a->strings["Delete message"] = "Smazat zprávu";
 $a->strings["Send Reply"] = "Poslat odpověď";
-$a->strings["No profile"] = "Žádný profil";
+$a->strings["Site"] = "Web";
+$a->strings["Users"] = "Uživatelé";
+$a->strings["Plugins"] = "Pluginy";
+$a->strings["Update"] = "Aktualizace";
+$a->strings["Logs"] = "Logy";
+$a->strings["User registrations waiting for confirmation"] = "Registrace uživatele čeká na potvrzení";
+$a->strings["Item not found."] = "Položka nenalezena.";
+$a->strings["Administration"] = "Administrace";
+$a->strings["Summary"] = "Shrnutí";
+$a->strings["Registered users"] = "Registrovaní uživatelé";
+$a->strings["Pending registrations"] = "Čekající registrace";
+$a->strings["Version"] = "Verze";
+$a->strings["Active plugins"] = "Aktivní pluginy";
+$a->strings["Site settings updated."] = "Nastavení webu aktualizováno.";
+$a->strings["Closed"] = "Uzavřít";
+$a->strings["Requires approval"] = "Vyžaduje schválení";
+$a->strings["Open"] = "Otevřená";
+$a->strings["File upload"] = "Nahrání souborů";
+$a->strings["Policies"] = "Politiky";
+$a->strings["Advanced"] = "Pokročilé";
+$a->strings["Site name"] = "Název webu";
+$a->strings["Banner/Logo"] = "Banner/logo";
+$a->strings["System language"] = "Systémový jazyk";
+$a->strings["System theme"] = "Grafická šablona systému ";
+$a->strings["Maximum image size"] = "Maximální velikost obrazu";
+$a->strings["Register policy"] = "Politika registrace";
+$a->strings["Register text"] = "Registrace textu";
+$a->strings["Allowed friend domains"] = "Povolené domény přátel";
+$a->strings["Allowed email domains"] = "Povolené e-mailové domény";
+$a->strings["Block public"] = "Blokovat veřejnost";
+$a->strings["Force publish"] = "Publikovat";
+$a->strings["Global directory update URL"] = "aktualizace URL adresy Globálního adresáře ";
+$a->strings["Block multiple registrations"] = "Blokovat více registrací";
+$a->strings["OpenID support"] = "podpora OpenID";
+$a->strings["Gravatar support"] = "podpora Gravatar";
+$a->strings["Fullname check"] = "kontrola úplného jména";
+$a->strings["UTF-8 Regular expressions"] = "UTF-8 Regulární výrazy";
+$a->strings["Show Community Page"] = "Zobrazit stránku komunity";
+$a->strings["Enable OStatus support"] = "Zapnout podporu OStatus";
+$a->strings["Only allow Friendika contacts"] = "Povolit pouze Friendika kontakty  ";
+$a->strings["Verify SSL"] = "Ověřit SSL";
+$a->strings["Proxy user"] = "Proxy uživatel";
+$a->strings["Proxy URL"] = "Proxy URL adresa";
+$a->strings["Network timeout"] = "čas síťového spojení vypršelo (timeout)";
+$a->strings["%s user blocked"] = array(
+       0 => "%s uživatel zablokován",
+       1 => "%s uživatelů zablokováno / odblokováno",
+       2 => "%s uživatelů zablokováno / odblokováno",
+);
+$a->strings["%s user deleted"] = array(
+       0 => "%s uživatel smazán",
+       1 => "%s uživatelů smazáno",
+       2 => "%s uživatelů smazáno",
+);
+$a->strings["User '%s' deleted"] = "Uživatel '%s' smazán";
+$a->strings["User '%s' unblocked"] = "Uživatel '%s' odblokován";
+$a->strings["User '%s' blocked"] = "Uživatel '%s' blokován";
+$a->strings["select all"] = "Vybrat vše";
+$a->strings["User registrations waiting for confirm"] = "Registrace uživatele čeká na potvrzení";
+$a->strings["Request date"] = "Datum žádosti";
+$a->strings["Email"] = "E-mail";
+$a->strings["No registrations."] = "Žádné registrace.";
+$a->strings["Deny"] = "Odmítnout";
+$a->strings["Block"] = "Blokovat";
+$a->strings["Unblock"] = "Odblokovat";
+$a->strings["Register date"] = "Datum registrace";
+$a->strings["Last login"] = "Datum posledního přihlášení";
+$a->strings["Last item"] = "Poslední položka";
+$a->strings["Account"] = "Účet";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Vybraní uživatelé budou smazáni!\\n\\n Vše, co tito uživatelé na těchto stránkách vytvořili, bude trvale odstraněno!\\n\\n Opravdu pokračovat?";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Uživatel {0} bude smazán!\\n\\n Vše, co tento uživatel na těchto stránkách vytvořil, bude trvale odstraněno!\\n\\n Opravdu pokračovat?";
+$a->strings["Plugin %s disabled."] = "Plugin %s zakázán.";
+$a->strings["Plugin %s enabled."] = "Plugin %s povolen.";
+$a->strings["Disable"] = "Zakázat";
+$a->strings["Enable"] = "Povolit";
+$a->strings["Toggle"] = "Přepnout";
+$a->strings["Settings"] = "Nastavení";
+$a->strings["Log settings updated."] = "Nastavení protokolu aktualizováno.";
+$a->strings["Clear"] = "Vyčistit";
+$a->strings["Debugging"] = "Ladění";
+$a->strings["Log file"] = "Soubor s logem";
+$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = "Webový server musí mít práva zápisu . Relativní k index.php Friendika.";
+$a->strings["Log level"] = "Úroveň auditu";
+$a->strings["Close"] = "Uzavřená";
+$a->strings["FTP Host"] = "Hostitel FTP";
+$a->strings["FTP Path"] = "Cesta FTP";
+$a->strings["FTP User"] = "FTP uživatel";
+$a->strings["FTP Password"] = "FTP heslo";
 $a->strings["Access to this profile has been restricted."] = "Přístup na tento profil byl omezen.";
-$a->strings["Status"] = "Stav";
-$a->strings["Photos"] = "Fotografie";
+$a->strings["Tips for New Members"] = "Tipy pro nové členy";
 $a->strings["Login failed."] = "Přihlášení se nezdařilo.";
-$a->strings["Welcome "] = "Vítejte";
+$a->strings["Welcome "] = "Vítejte ";
 $a->strings["Please upload a profile photo."] = "Prosím nahrejte profilovou fotografii";
-$a->strings["Welcome back "] = "Vítejte zpět";
-$a->strings["The profile address specified does not provide adequate information."] = "Uvedená adresa profilu neposkytuje dostatečné informace.";
+$a->strings["Welcome back "] = "Vítejte zpět ";
+$a->strings["This site is not configured to allow communications with other networks."] = "Tento web není nakonfigurován tak, aby umožňoval komunikaci s ostatními sítěmi.";
 $a->strings["No compatible communication protocols or feeds were discovered."] = "Nenalezen žádný kompatibilní komunikační protokol nebo kanál.";
+$a->strings["The profile address specified does not provide adequate information."] = "Uvedená adresa profilu neposkytuje dostatečné informace.";
 $a->strings["An author or name was not found."] = "Autor nebo jméno nenalezeno";
 $a->strings["No browser URL could be matched to this address."] = "Této adrese neodpovídá žádné URL prohlížeče.";
+$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Zadaná adresa profilu patří do sítě, která  byla na tomto serveru zakázána.";
 $a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Omezený profil. Tato osoba nebude schopna od Vás přijímat přímé / osobní sdělení.";
 $a->strings["Unable to retrieve contact information."] = "Nepodařilo se získat kontaktní informace.";
 $a->strings["following"] = "následující";
 $a->strings["Item has been removed."] = "Položka byla odstraněna.";
 $a->strings["New mail received at "] = "Přišel nový e-mail v";
 $a->strings["Applications"] = "Aplikace";
+$a->strings["No installed applications."] = "Žádné nainstalované aplikace.";
 $a->strings["Search"] = "Vyhledávání";
-$a->strings["No results."] = "Žádné výsledky.";
 $a->strings["Profile not found."] = "Profil nenalezen";
 $a->strings["Profile Name is required."] = "Jméno profilu je povinné.";
 $a->strings["Profile updated."] = "Profil aktualizován.";
@@ -494,7 +643,6 @@ $a->strings["Profile-"] = "Profil-";
 $a->strings["New profile created."] = "Nový profil vytvořen.";
 $a->strings["Profile unavailable to clone."] = "Profil není možné naklonovat.";
 $a->strings["Hide your contact/friend list from viewers of this profile?"] = "Skrýt u tohoto profilu vaše kontakty / seznam přátel před před dalšími uživateli zobrazující si tento profil?";
-$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Skrýt detaily profilu a všechny zprávy před neznámými uživateli?";
 $a->strings["Edit Profile Details"] = "Upravit podrobnosti profilu ";
 $a->strings["View this profile"] = "Zobrazit tento profil";
 $a->strings["Create a new profile using these settings"] = "Vytvořit nový profil pomocí tohoto nastavení";
@@ -504,7 +652,7 @@ $a->strings["Profile Name:"] = "Jméno profilu:";
 $a->strings["Your Full Name:"] = "Vaše celé jméno:";
 $a->strings["Title/Description:"] = "Název / Popis:";
 $a->strings["Your Gender:"] = "Vaše pohlaví:";
-$a->strings["Birthday (y/m/d):"] = "Narozeniny (rok/měsíc/den):";
+$a->strings["Birthday (%s):"] = "Narozeniny uživatele (%s):";
 $a->strings["Street Address:"] = "Ulice:";
 $a->strings["Locality/City:"] = "Město:";
 $a->strings["Postal/Zip Code:"] = "PSČ:";
@@ -538,7 +686,7 @@ $a->strings["Profiles"] = "Profily";
 $a->strings["Change profile photo"] = "Změnit profilovou fotografii";
 $a->strings["Create New Profile"] = "Vytvořit nový profil";
 $a->strings["Profile Image"] = "Profilový obrázek";
-$a->strings["Visible to everybody"] = "Viditelné pro všechny";
+$a->strings["visible to everybody"] = "viditelné pro všechny";
 $a->strings["Edit visibility"] = "Upravit viditelnost";
 $a->strings["Global Directory"] = "Globální adresář";
 $a->strings["Normal site view"] = "Normální zobrazení stránky";
@@ -554,10 +702,12 @@ $a->strings["%d message sent."] = array(
        1 => "%d zprávy odeslány.",
        2 => "%d zprávy odeslány.",
 );
+$a->strings["You have no more invitations available"] = "Nemáte k dispozici žádné další pozvánky";
 $a->strings["Send invitations"] = "Poslat pozvánky";
 $a->strings["Enter email addresses, one per line:"] = "Zadejte e-mailové adresy, jednu na řádek:";
 $a->strings["Please join my social network on %s"] = "Prosím, připojte se do mé sociální sítě na %s";
 $a->strings["To accept this invitation, please visit:"] = "Chcete-li toto pozvání přijmout, navštivte prosím:";
+$a->strings["You will need to supply this invitation code: \$invite_code"] = "Budete muset zadat kód této pozvánky: \$invite_code";
 $a->strings["Once you have registered, please connect with me via my profile page at:"] = "Jakmile se zaregistrujete, prosím spojte se se mnou přes mou profilovu stránku na:";
 $a->strings["Response from remote site was not understood."] = "Odpověď ze vzdáleného serveru nebyla srozumitelná.";
 $a->strings["Unexpected response from remote site: "] = "Neočekávaná odpověď od vzdáleného serveru:";
@@ -582,14 +732,19 @@ $a->strings["Facebook Connect"] = "Facebook připojen";
 $a->strings["Install Facebook connector for this account."] = "Nainstalovat pro tento účet Facebook konektor.";
 $a->strings["Remove Facebook connector"] = "Odstranit konektor na Facebook";
 $a->strings["Post to Facebook by default"] = "Standardně posílat příspěvky na Facebook";
+$a->strings["Link all your Facebook friends and conversations"] = "Připojit všechny své přátele na Facebooku a konverzace";
+$a->strings["Warning: Your Facebook privacy settings can not be imported."] = "Upozornění: nastavení ochrany osobních údajů na Facebooku nelze importovat.";
+$a->strings["Linked Facebook items <strong>may</strong> be publicly visible, depending on your privacy settings for this website/account."] = "Propojené položky z Facebook <strong>mohou</strong> být veřejně viditelné, v závislosti na nastavení ochrany osobních údajů pro tuto webovou stránku/účet.";
 $a->strings["Facebook"] = "Facebook";
 $a->strings["Facebook Connector Settings"] = "Nastavení Facebook konektoru ";
 $a->strings["Post to Facebook"] = "Přidat příspěvek na Facebook";
 $a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = "Příspěvek na Facebook zrušen kvůli konfliktu přístupových práv mezi sítěmi.";
 $a->strings["Image: "] = "Obrázek: ";
 $a->strings["View on Friendika"] = "Pohled na Friendiku";
-$a->strings["Widgets key: "] = "Widgets klíč:";
+$a->strings["Facebook post failed. Queued for retry."] = "Zaslání příspěvku na Facebook selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání.";
 $a->strings["Generate new key"] = "Generovat nové klíče";
+$a->strings["Widgets key"] = "Widgety klíč";
+$a->strings["Widgets available"] = "Widgety k dispozici";
 $a->strings["Connect on Friendika!"] = "Spojit se na Friendice!";
 $a->strings["Three Dimensional Tic-Tac-Toe"] = "Trojrozměrné Tic-Tac-Toe";
 $a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe";
@@ -605,28 +760,32 @@ $a->strings["\"Cat\" game!"] = "\"Kočičí\" hra!";
 $a->strings["I won!"] = "Vyhrál jsem!";
 $a->strings["Randplace Settings"] = "Randplace Nastavení";
 $a->strings["Enable Randplace Plugin"] = "Povolit Randplace Plugin";
-$a->strings["Select files to upload: "] = "Vyberte soubory k nahrání:";
-$a->strings["Use the following controls only if the Java uploader [above] fails to launch."] = "Následující ovládací prvky použijte pouze v případě, že se nezdaří hru spustit s pomocí Java uploaderu [výše].";
 $a->strings["Upload a file"] = "Nahrát soubor";
 $a->strings["Drop files here to upload"] = "Přeneste sem soubory k nahrání";
 $a->strings["Failed"] = "Neúspěch";
 $a->strings["No files were uploaded."] = "Žádné soubory nebyly nahrány.";
 $a->strings["Uploaded file is empty"] = "Nahraný soubor je prázdný";
-$a->strings["Uploaded file is too large"] = "Nahraný soubor je příliš velký";
 $a->strings["File has an invalid extension, it should be one of "] = "Soubor má neplatnou příponu, ta by měla být jednou z";
 $a->strings["Upload was cancelled, or server error encountered"] = "Nahrávání bylo zrušeno nebo došlo k chybě na serveru";
+$a->strings["Impressum"] = "Impressum";
+$a->strings["Site Owner"] = "Vlastník webu";
+$a->strings["Email Address"] = "E-mailová adresa";
+$a->strings["Postal Address"] = "Poštovní adresa";
+$a->strings["The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon."] = "Doplněk Impressum musí být nakonfigurován!<br/>Prosím, přidejte alespoň proměnnou <tt>owner</tt> do konfiguračního souboru. Pro nastavení ostatních proměnných se seznamte s nápovědou v souboru README tohoto doplňku.";
+$a->strings["Site Owners Profile"] = "Profil majitele webu";
+$a->strings["Notes"] = "Poznámky";
 $a->strings["OEmbed settings updated"] = "OEmbed nastavení aktualizováno";
-$a->strings["Use OEmbed for YouTube videos: "] = "Použít OEmbed pro videa YouTube:";
+$a->strings["Use OEmbed for YouTube videos"] = "Použití OEmbed pro videa na YouTube";
 $a->strings["URL to embed:"] = "URL adresa k vložení:";
 $a->strings["Post to StatusNet"] = "Poslat příspěvek na StatusNet";
-$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Obraťte se na správce webu.<br />Poskytnutý odkaz na API není platný.";
+$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Obraťte se na administratora webu.<br />Poskytnutý odkaz na API není platný.";
 $a->strings["We could not contact the StatusNet API with the Path you entered."] = "S cestou, kterou jste zadali, se nebylo možné spojit s API StatusNetu.";
 $a->strings["StatusNet settings updated."] = "Nastavení StatusNetu aktualizováno.";
 $a->strings["StatusNet Posting Settings"] = "Nastavení zasílání příspěvků na StatusNet ";
 $a->strings["Globally Available StatusNet OAuthKeys"] = "Globálně dostupné StatusNet OAuth klíče";
 $a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance (see below)."] = "Jsou dostupné přednastavené OAuth páry klíčů pro některé servery StatusNetu. Pokud používáte některý z nich, použijte toto přihlášení. Pokud ne, neváhejte se připojit k jiné instanci StatusNet (viz níže).";
 $a->strings["Provide your own OAuth Credentials"] = "Uveďte své vlastní OAuth přihlašovací údaje";
-$a->strings["No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation."] = "Nenalezen žádný consumer pár klíčů pro StatusNet. Zaregistrujte svůj Friendika účet jako desktopový klient na svém účtu StatusNetu, zkopírujte níže consumer pár klíčů a zadejte API base root.<br />Než si zaregistrujete svůj vlastní pár klíčů OAuth, zjistěte si od správce, zda-li už náhodou na tento Friendika server nepřidal pár klíčů pro vámi požadovanou instalaci StatusNetu.";
+$a->strings["No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation."] = "Nenalezen žádný consumer pár klíčů pro StatusNet. Zaregistrujte svůj Friendika účet jako desktopový klient na svém účtu StatusNetu, zkopírujte níže consumer pár klíčů a zadejte API base root.<br />Než si zaregistrujete svůj vlastní pár klíčů OAuth, zjistěte si od administrátora, zda-li už náhodou na tento Friendika server nepřidal pár klíčů pro vámi požadovanou instalaci StatusNetu.";
 $a->strings["OAuth Consumer Key"] = "OAuth Consumer Key";
 $a->strings["OAuth Consumer Secret"] = "OAuth Consumer Secret";
 $a->strings["Base API Path (remember the trailing /)"] = "Cesta k Base API  (nezapomeňte na koncový /)";
@@ -637,18 +796,28 @@ $a->strings["Cancel Connection Process"] = "Zrušit připojování";
 $a->strings["Current StatusNet API is"] = "Aktuální StatusNet API je";
 $a->strings["Cancel StatusNet Connection"] = "Zrušit StatusNet připojení";
 $a->strings["Currently connected to: "] = "V současné době připojen k:";
-$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account."] = "Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky budou zveřejněny na příslušném účtu StatusNetu.";
+$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být zaslány na související StatusNet účet. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku.";
 $a->strings["Allow posting to StatusNet"] = "Povolit zasílání příspěvků na StatusNet";
 $a->strings["Send public postings to StatusNet by default"] = "Standardně poslílat veřejné příspěvky na StatusNet";
 $a->strings["Clear OAuth configuration"] = "Vymazat konfiguraci OAuth";
+$a->strings["API URL"] = "API URL";
+$a->strings["Consumer Secret"] = "Consumer Secret";
+$a->strings["Consumer Key"] = "Consumer Key";
+$a->strings["Piwik Base URL"] = "Piwik Base adresa URL";
+$a->strings["Site ID"] = "ID webu";
+$a->strings["Show opt-out cookie link?"] = "Zobrazit odkaz opt-out cookie?";
 $a->strings["Post to Twitter"] = "Poslat příspěvek na Twitter";
+$a->strings["Twitter settings updated."] = "Nastavení Twitteru aktualizováno.";
 $a->strings["Twitter Posting Settings"] = "Nastavení zasílání příspěvků na Twitter ";
-$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na správce webu.";
+$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na administrátora webu.";
 $a->strings["At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "Na tomto Friendika serveru je Twitter plugin povolen, ale ještě nemáte svůj účet připojen ke svému Twitter účtu. Chcete-li tak učinit, klepnutím na tlačítko níže získejte PIN z Twitteru, který musíte zkopírovat do vstupního pole níže a odešlete formulář. Pouze Vaše <strong>veřejné</strong> příspěvky budou zveřejněny na Twitteru.";
 $a->strings["Log in with Twitter"] = "Přihlásit se s Twitter";
 $a->strings["Copy the PIN from Twitter here"] = "Zkopírujte sem PIN z Twitteru";
-$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well."] = "Je-li povoleno, všechny <strong>veřejné</strong> příspěvky budou zároveň zveřejněny na příslušný  Twitter účet.";
-$a->strings["Send public postings to Twitter"] = "Poslat veřejné příspěvky na Twitter";
+$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Je-li povoleno, všechny Vaše <strong>veřejné</strong> příspěvky mohou být zaslány na související Twitter účet. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku.";
+$a->strings["Allow posting to Twitter"] = "Povolit odesílání na Twitter";
+$a->strings["Send public postings to Twitter by default"] = "Defaultně zasílat veřejné komentáře na Twitter";
+$a->strings["Consumer key"] = "Consumer key";
+$a->strings["Consumer secret"] = "Consumer secret";
 $a->strings["Gender:"] = "Pohlaví:";
 $a->strings["Birthday:"] = "Narozeniny:";
 $a->strings["j F, Y"] = "j F, Y";
@@ -732,56 +901,114 @@ $a->strings["Uncertain"] = "Nejistý";
 $a->strings["Complicated"] = "Komplikovaný";
 $a->strings["Don't care"] = "Nezajímá";
 $a->strings["Ask me"] = "Zeptej se mě";
+$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A";
+$a->strings["Starts:"] = "Začíná:";
+$a->strings["Finishes:"] = "Končí:";
+$a->strings["prev"] = "předchozí";
+$a->strings["first"] = "první";
+$a->strings["last"] = "poslední";
+$a->strings["next"] = "další";
+$a->strings["No contacts"] = "Žádné kontakty";
+$a->strings["%d Contact"] = array(
+       0 => "%d kontakt",
+       1 => "%d kontaktů",
+       2 => "%d kontaktů",
+);
+$a->strings["Monday"] = "Pondělí";
+$a->strings["Tuesday"] = "Úterý";
+$a->strings["Wednesday"] = "Středa";
+$a->strings["Thursday"] = "Čtvrtek";
+$a->strings["Friday"] = "Pátek";
+$a->strings["Saturday"] = "Sobota";
+$a->strings["Sunday"] = "Neděle";
+$a->strings["January"] = "Ledna";
+$a->strings["February"] = "Února";
+$a->strings["March"] = "Března";
+$a->strings["April"] = "Dubna";
+$a->strings["May"] = "Května";
+$a->strings["June"] = "Června";
+$a->strings["July"] = "Července";
+$a->strings["August"] = "Srpna";
+$a->strings["September"] = "Září";
+$a->strings["October"] = "Října";
+$a->strings["November"] = "Listopadu";
+$a->strings["December"] = "Prosince";
+$a->strings["bytes"] = "bytů";
+$a->strings["Select an alternate language"] = "Vyběr alternativního jazyka";
+$a->strings["Sharing notification from Diaspora network"] = "Sdílení oznámení ze sítě Diaspora";
 $a->strings["Embedding disabled"] = "Vkládání zakázáno";
 $a->strings["Create a new group"] = "Vytvořit novou skupinu";
 $a->strings["Everybody"] = "Všichni";
 $a->strings["Logout"] = "Odhlásit se";
+$a->strings["End this session"] = "Konec této relace";
 $a->strings["Login"] = "Přihlásit se";
+$a->strings["Sign in"] = "Přihlásit se";
 $a->strings["Home"] = "Domů";
+$a->strings["Home Page"] = "Domácí stránka";
+$a->strings["Create an account"] = "Vytvořit účet";
+$a->strings["Help and documentation"] = "Nápověda a dokumentace";
 $a->strings["Apps"] = "Aplikace";
+$a->strings["Addon applications, utilities, games"] = "Doplňkové aplikace, nástroje, hry";
+$a->strings["Search site content"] = "Hledání na stránkách tohoto webu";
+$a->strings["Conversations on this site"] = "Konverzace na tomto webu";
 $a->strings["Directory"] = "Adresář";
+$a->strings["People directory"] = "Adresář";
 $a->strings["Network"] = "Síť";
+$a->strings["Conversations from your friends"] = "Konverzace od Vašich přátel";
+$a->strings["Your posts and conversations"] = "Vaše příspěvky a konverzace";
 $a->strings["Notifications"] = "Upozornění";
+$a->strings["Friend requests"] = "Požadavky přátelství";
+$a->strings["Private mail"] = "Soukromá pošta";
 $a->strings["Manage"] = "Spravovat";
-$a->strings["Settings"] = "Nastavení";
+$a->strings["Manage other pages"] = "Spravovat jiné stránky";
+$a->strings["Manage/edit profiles"] = "Spravovat/upravit profily";
+$a->strings["Manage/edit friends and contacts"] = "Spravovat/upravit přátelé a kontakty";
+$a->strings["Admin"] = "Administrace";
+$a->strings["Site setup and configuration"] = "Nastavení webu a konfigurace";
 $a->strings["Logged out."] = "Odhlášen.";
 $a->strings["Miscellaneous"] = "Různé";
-$a->strings["less than a second ago"] = "méně než před sekundou";
 $a->strings["year"] = "rok";
-$a->strings["years"] = "let";
 $a->strings["month"] = "měsíc";
+$a->strings["day"] = "den";
+$a->strings["never"] = "nikdy";
+$a->strings["less than a second ago"] = "méně než před sekundou";
+$a->strings["years"] = "let";
 $a->strings["months"] = "měsíců";
 $a->strings["week"] = "týden";
 $a->strings["weeks"] = "týdny";
-$a->strings["day"] = "den";
+$a->strings["days"] = "dnů";
 $a->strings["hour"] = "hodina";
 $a->strings["hours"] = "hodin";
 $a->strings["minute"] = "minuta";
 $a->strings["minutes"] = "minut";
 $a->strings["second"] = "sekunda";
 $a->strings["seconds"] = "sekund";
-$a->strings[" ago"] = "před";
+$a->strings[" ago"] = " nazpět";
 $a->strings["From: "] = "Od:";
 $a->strings["Image/photo"] = "Obrázek/fotografie";
 $a->strings["Cannot locate DNS info for database server '%s'"] = "Nelze nalézt záznam v DNS pro databázový server '%s'";
-$a->strings["Visible To:"] = "Viditelné pro:";
-$a->strings["everybody"] = "Žádost o připojení selhala nebo byla zrušena.";
-$a->strings["Groups"] = "Skupiny";
-$a->strings["Except For:"] = "S výjimkou:";
+$a->strings["Visible to everybody"] = "Viditelné pro všechny";
+$a->strings["show"] = "zobrazit";
+$a->strings["don't show"] = "nikdy nezobrazit";
 $a->strings["(no subject)"] = "(Bez předmětu)";
 $a->strings["You have a new follower at "] = "Máte nového následovníka na";
+$a->strings["event"] = "událost";
 $a->strings["View %s's profile"] = "Zobrazit %s profilu";
+$a->strings["%s from %s"] = "%s od %s";
 $a->strings["View in context"] = "Pohled v kontextu";
 $a->strings["See more posts like this"] = "Zobrazit více podobných příspěvků";
 $a->strings["See all %d comments"] = "Zobrazit všechny komentáře %d";
+$a->strings["Select"] = "Vybrat";
+$a->strings["toggle star status"] = "přepnout hvězdu";
 $a->strings["to"] = "pro";
 $a->strings["Wall-to-Wall"] = "Zeď-na-Zeď";
 $a->strings["via Wall-To-Wall:"] = "přes Zeď-na-Zeď ";
+$a->strings["Delete Selected Items"] = "Smazat vybrané položky";
 $a->strings["View status"] = "Zobrazit stav";
 $a->strings["View profile"] = "Zobrazit profil";
 $a->strings["View photos"] = "Zobrazit fotografie";
 $a->strings["View recent"] = "Zobrazit poslední";
-$a->strings["Send PM"] = "Poslat PM";
+$a->strings["Send PM"] = "Poslat soukromou zprávu";
 $a->strings["%s likes this."] = "%s se to líbí.";
 $a->strings["%s doesn't like this."] = "%s se to nelíbí.";
 $a->strings["<span  %1\$s>%2\$d people</span> like this."] = "<span  %1\$s>%2\$d lidem</span> se to líbí.";
@@ -801,48 +1028,16 @@ $a->strings["Delete this item?"] = "Odstranit tuto položku?";
 $a->strings["Create a New Account"] = "Vytvořit nový účet";
 $a->strings["Nickname or Email address: "] = "Přezdívka nebo e-mailová adresa:";
 $a->strings["Password: "] = "Heslo: ";
-$a->strings["Nickname/Email/OpenID: "] = "Přezdívka/Email/OpenID: ";
+$a->strings["Nickname/Email/OpenID: "] = "Přezdívka/E-mail/OpenID: ";
 $a->strings["Password (if not OpenID): "] = "Heslo (pokud se nepoužívá OpenID):";
 $a->strings["Forgot your password?"] = "Zapomněli jste své heslo?";
-$a->strings["prev"] = "předchozí";
-$a->strings["first"] = "první";
-$a->strings["last"] = "poslední";
-$a->strings["next"] = "další";
-$a->strings["No contacts"] = "Žádné kontakty";
-$a->strings["%d Contact"] = array(
-       0 => "%d kontakt",
-       1 => "%d kontaktů",
-       2 => "%d kontaktů",
-);
 $a->strings["Connect"] = "Spojit";
-$a->strings["Location:"] = "Místo:";
 $a->strings[", "] = ", ";
 $a->strings["Status:"] = "Status:";
-$a->strings["Monday"] = "Pondělí";
-$a->strings["Tuesday"] = "Úterý";
-$a->strings["Wednesday"] = "Středa";
-$a->strings["Thursday"] = "Čtvrtek";
-$a->strings["Friday"] = "Pátek";
-$a->strings["Saturday"] = "Sobota";
-$a->strings["Sunday"] = "Neděle";
-$a->strings["January"] = "Ledna";
-$a->strings["February"] = "Února";
-$a->strings["March"] = "Března";
-$a->strings["April"] = "Dubna";
-$a->strings["May"] = "Května";
-$a->strings["June"] = "Června";
-$a->strings["July"] = "Července";
-$a->strings["August"] = "Srpna";
-$a->strings["September"] = "Září";
-$a->strings["October"] = "Října";
-$a->strings["November"] = "Listopadu";
-$a->strings["December"] = "Prosince";
 $a->strings["g A l F d"] = "g A l F d";
 $a->strings["Birthday Reminders"] = "Připomínka narozenin";
 $a->strings["Birthdays this week:"] = "Narozeniny tento týden:";
 $a->strings["(Adjusted for local time)"] = "(Upraveno pro místní čas)";
 $a->strings["[today]"] = "[Dnes]";
-$a->strings["bytes"] = "bytů";
-$a->strings["link to source"] = "odkaz na zdroj";
 $a->strings["Not Found"] = "Nenalezen";
 $a->strings["Page not found."] = "Stránka nenalezena";
index aac565b217264735f4cea685c4838510f027458d..3ff63cbb3931e30ee6f13f2ecaa77781ae3ee4ea 100644 (file)
@@ -2,15 +2,18 @@
 # Copyright (C) 2010, 2011 Mike Macgirvin
 # This file is distributed under the same license as the Friendika package.
 # 
-#   <tobias.diekershoff@gmx.net>, 2011.
+# Translators:
 # bavatar <tobias.diekershoff@gmx.net>, 2011.
+# Erkan Yilmaz <erkan77@gmail.com>, 2011.
+#   <hzuehl@phone-talk.de>, 2011.
+#   <tobias.diekershoff@gmx.net>, 2011.
 msgid ""
 msgstr ""
 "Project-Id-Version: friendika\n"
 "Report-Msgid-Bugs-To: http://bugs.friendika.com/\n"
 "POT-Creation-Date: 2011-08-14 21:17-0700\n"
-"PO-Revision-Date: 2011-08-18 08:02+0000\n"
-"Last-Translator: bavatar <tobias.diekershoff@gmx.net>\n"
+"PO-Revision-Date: 2011-09-26 17:08+0000\n"
+"Last-Translator: hauke <hzuehl@phone-talk.de>\n"
 "Language-Team: German (http://www.transifex.net/projects/p/friendika/team/de/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -142,7 +145,7 @@ msgstr "Die Datei ist größer als das erlaubte Limit von %d"
 
 #: ../../mod/wall_attach.php:87 ../../mod/wall_attach.php:98
 msgid "File upload failed."
-msgstr "Upload der Datei fehlgeschlagen."
+msgstr "Hochladen der Datei fehlgeschlagen."
 
 #: ../../mod/fsuggest.php:63
 msgid "Friend suggestion sent."
@@ -290,7 +293,7 @@ msgstr "jeder"
 
 #: ../../mod/photos.php:132
 msgid "Contact information unavailable"
-msgstr "Kontakt Informationen nicht verfügbar"
+msgstr "Kontaktinformationen nicht verfügbar"
 
 #: ../../mod/photos.php:143 ../../mod/photos.php:577 ../../mod/photos.php:926
 #: ../../mod/photos.php:941 ../../mod/register.php:316
@@ -356,7 +359,7 @@ msgstr "Keine Bilder ausgewählt"
 
 #: ../../mod/photos.php:820
 msgid "Access to this item is restricted."
-msgstr "Zugriff zu diesem Eintrag wurde eingeschrängt."
+msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt."
 
 #: ../../mod/photos.php:884
 msgid "Upload Photos"
@@ -465,7 +468,7 @@ msgstr "Löschen"
 
 #: ../../mod/photos.php:1349
 msgid "Recent Photos"
-msgstr "Neuste Fotos"
+msgstr "Neueste Fotos"
 
 #: ../../mod/photos.php:1353
 msgid "Upload New Photos"
@@ -573,7 +576,7 @@ msgstr "Diese Vorstellung wurde bereits abgeschlossen."
 #: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351
 msgid "Profile location is not valid or does not contain profile information."
 msgstr ""
-"Profil Adresse ist ungültig oder stellt einige Profildaten nicht zur "
+"Profiladresse ist ungültig oder stellt einige Profildaten nicht zur "
 "Verfügung."
 
 #: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356
@@ -620,7 +623,7 @@ msgstr "Maßnahmen zum Spamschutz wurden ergriffen."
 
 #: ../../mod/dfrn_request.php:247
 msgid "Friends are advised to please try again in 24 hours."
-msgstr "Freunde sind angehalten es in 24 Stunden erneut zu versuchen."
+msgstr "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen."
 
 #: ../../mod/dfrn_request.php:277
 msgid "Invalid locator"
@@ -628,7 +631,7 @@ msgstr "Ungültiger Locator"
 
 #: ../../mod/dfrn_request.php:296
 msgid "Unable to resolve your name at the provided location."
-msgstr "Unable to resolve your name at the provided location."
+msgstr "Konnte deinen Namen an der angegebenen Stelle nicht finden."
 
 #: ../../mod/dfrn_request.php:309
 msgid "You have already introduced yourself here."
@@ -657,7 +660,7 @@ msgstr "Deine Vorstellung wurde abgeschickt."
 
 #: ../../mod/dfrn_request.php:481
 msgid "Please login to confirm introduction."
-msgstr "Bitte melde dich an um die Vorstellung zu bestätigen."
+msgstr "Bitte melde dich an, um die Vorstellung zu bestätigen."
 
 #: ../../mod/dfrn_request.php:495
 msgid ""
@@ -675,7 +678,7 @@ msgstr "Willkommen zurück %s."
 #: ../../mod/dfrn_request.php:508
 #, php-format
 msgid "Please confirm your introduction/connection request to %s."
-msgstr "Bitte bestätige deine Vorstellung/Verbindungs Anfrage bei %s."
+msgstr "Bitte bestätige deine Vorstellung/Verbindungsanfrage bei %s."
 
 #: ../../mod/dfrn_request.php:509
 msgid "Confirm"
@@ -699,7 +702,7 @@ msgstr "Administrator"
 
 #: ../../mod/dfrn_request.php:630
 msgid "Friend/Connection Request"
-msgstr "Freundschafts/Kontakt Anfrage"
+msgstr "Freundschafts-/Kontaktanfrage"
 
 #: ../../mod/dfrn_request.php:631
 msgid ""
@@ -771,7 +774,7 @@ msgstr "Anfrage abschicken"
 #: ../../mod/install.php:34
 msgid "Could not create/connect to database."
 msgstr ""
-"Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank "
+"Konnte die Verbindung zur Datenbank nicht aufbauen, bzw. die Datenbank "
 "anlegen."
 
 #: ../../mod/install.php:39
@@ -784,7 +787,7 @@ msgstr "Mit der Installation fortfahren"
 
 #: ../../mod/install.php:77
 msgid "Your Friendika site database has been installed."
-msgstr "Die Datenbank deiner Friendika Seite wurde erfolgreich installiert."
+msgstr "Die Datenbank deiner Friendikaseite wurde erfolgreich installiert."
 
 #: ../../mod/install.php:78
 msgid ""
@@ -799,7 +802,7 @@ msgstr "Lies bitte die \"INSTALL.txt\"."
 
 #: ../../mod/install.php:81
 msgid "Proceed to registration"
-msgstr "Mit der Registration fortfahren"
+msgstr "Mit der Registrierung fortfahren"
 
 #: ../../mod/install.php:87
 msgid "Database import failed."
@@ -846,8 +849,9 @@ msgid ""
 "The database you specify below should already exist. If it does not, please "
 "create it before continuing."
 msgstr ""
-"Die Datenbank die du unten angibst sollte bereits existieren. Ist dies noch "
-"nicht der Fall erzeuge sie bitte bevor du mit der Installation vorfährst."
+"Die Datenbank, die du unten angibst, sollte bereits existieren. Ist dies "
+"noch nicht der Fall, erzeuge sie bitte bevor du mit der Installation "
+"vorfährst."
 
 #: ../../mod/install.php:129
 msgid "Database Server Name"
@@ -867,16 +871,15 @@ msgstr "Datenbank Name"
 
 #: ../../mod/install.php:133
 msgid "Please select a default timezone for your website"
-msgstr "Bitte wähle die standard Zeitzone deiner Webseite"
+msgstr "Bitte wähle die Standardzeitzone deiner Webseite"
 
 #: ../../mod/install.php:134
 msgid ""
 "Site administrator email address. Your account email address must match this"
 " in order to use the web admin panel."
 msgstr ""
-"Email Adresse des Seiten Administrators. Die Email Adresse deines Accounts "
-"muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen "
-"kannst."
+"Emailadresse des Seitenadministrators. Die Emailadresse deines Accounts muss"
+" mit dieser übereinstimmen, damit du das Administrationspanel nutzen kannst."
 
 #: ../../mod/install.php:153
 msgid "Could not find a command line version of PHP in the web server PATH."
@@ -956,8 +959,8 @@ msgid ""
 "The web installer needs to be able to create a file called \".htconfig.php\""
 " in the top folder of your web server and it is unable to do so."
 msgstr ""
-"Der Installationswizzard muss in der Lage sein eine Datei im "
-"Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht "
+"Der Installationswizzard muss in der Lage sein, eine Datei im "
+"Stammverzeichnis deines Webservers anzulegen, ist allerdings derzeit nicht "
 "in der Lage dies zu tun."
 
 #: ../../mod/install.php:217
@@ -996,7 +999,7 @@ msgstr ""
 
 #: ../../mod/install.php:243
 msgid "Errors encountered creating database tables."
-msgstr "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen."
+msgstr "Fehler aufgetreten während der Erzeugung der Datenbank Tabellen."
 
 #: ../../mod/update_community.php:18 ../../mod/update_network.php:22
 #: ../../mod/update_profile.php:41
@@ -1005,7 +1008,7 @@ msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"
 
 #: ../../mod/match.php:10
 msgid "Profile Match"
-msgstr "Profil Übereinstimmungen"
+msgstr "Profilübereinstimmungen"
 
 #: ../../mod/match.php:18
 msgid "No keywords to match. Please add keywords to your default profile."
@@ -1046,7 +1049,7 @@ msgstr "Ignorieren"
 
 #: ../../mod/notifications.php:74
 msgid "Pending Friend/Connect Notifications"
-msgstr "Anstehende Freundschafts/Kontakt Benachrichtigungen"
+msgstr "Anstehende Freundschafts-/Kontaktbenachrichtigungen"
 
 #: ../../mod/notifications.php:78
 msgid "Show Ignored Requests"
@@ -1058,11 +1061,11 @@ msgstr "Verberge ignorierte Anfragen"
 
 #: ../../mod/notifications.php:105 ../../mod/notifications.php:148
 msgid "Notification type: "
-msgstr "Benachrichtigungs Typ: "
+msgstr "Benachrichtigungstyp: "
 
 #: ../../mod/notifications.php:106
 msgid "Friend Suggestion"
-msgstr "Kontakt Vorschlag"
+msgstr "Kontaktvorschlag"
 
 #: ../../mod/notifications.php:108
 #, php-format
@@ -1143,7 +1146,7 @@ msgstr "Konnte nicht auf die Kontaktdaten zugreifen."
 
 #: ../../mod/contacts.php:83
 msgid "Could not locate selected profile."
-msgstr "Konnte das ausgewählte Profiel nicht finden."
+msgstr "Konnte das ausgewählte Profil nicht finden."
 
 #: ../../mod/contacts.php:114
 msgid "Contact updated."
@@ -1155,7 +1158,7 @@ msgstr "Kontakt wurde blockiert"
 
 #: ../../mod/contacts.php:172
 msgid "Contact has been unblocked"
-msgstr "Kontakt wurde wieder frei gegeben"
+msgstr "Kontakt wurde wieder freigegeben"
 
 #: ../../mod/contacts.php:186
 msgid "Contact has been ignored"
@@ -1376,7 +1379,7 @@ msgstr "Passwort zurücksetzen"
 
 #: ../../mod/lostpass.php:83
 msgid "Your password has been reset as requested."
-msgstr "Dein Passwort wurde wie gewünscht zurück gesetzt."
+msgstr "Dein Passwort wurde wie gewünscht zurückgesetzt."
 
 #: ../../mod/lostpass.php:84
 msgid "Your new password is"
@@ -1508,7 +1511,7 @@ msgstr ""
 
 #: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:446
 msgid "Automatic Friend Account"
-msgstr "Automatischer Freundes Account"
+msgstr "Automatischer Freundesaccount"
 
 #: ../../mod/settings.php:395
 msgid "Automatically approve all connection/friend requests as friends"
@@ -1575,7 +1578,7 @@ msgstr "Bestätigen:"
 
 #: ../../mod/settings.php:492
 msgid "Leave password fields blank unless changing"
-msgstr "Lass die Passwort-Felder leer außer du willst das Passwort ändern"
+msgstr "Lass die Passwort-Felder leer, außer du willst das Passwort ändern"
 
 #: ../../mod/settings.php:496
 msgid "Basic Settings"
@@ -1587,7 +1590,7 @@ msgstr "Kompletter Name:"
 
 #: ../../mod/settings.php:498
 msgid "Email Address:"
-msgstr "Email Adresse:"
+msgstr "Emailadresse:"
 
 #: ../../mod/settings.php:499
 msgid "Your Timezone:"
@@ -1964,7 +1967,7 @@ msgstr "Eine Gruppe von Kontakten/Freunden anlegen."
 
 #: ../../mod/group.php:83 ../../mod/group.php:166
 msgid "Group Name: "
-msgstr "Gruppen Name:"
+msgstr "Gruppenname:"
 
 #: ../../mod/group.php:98
 msgid "Group removed."
@@ -1980,7 +1983,7 @@ msgstr "Klicke einen Kontakt an um ihn hinzuzufügen oder zu entfernen"
 
 #: ../../mod/group.php:165
 msgid "Group Editor"
-msgstr "Gruppen Editor"
+msgstr "Gruppeneditor"
 
 #: ../../mod/group.php:180
 msgid "Members"
@@ -2048,11 +2051,11 @@ msgstr "Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite."
 
 #: ../../mod/register.php:120
 msgid "Not a valid email address."
-msgstr "Keine gültige EMail Adresse."
+msgstr "Keine gültige EMailadresse."
 
 #: ../../mod/register.php:130
 msgid "Cannot use that email."
-msgstr "Konnte diese EMail Adresse nicht verwenden."
+msgstr "Konnte diese EMailadresse nicht verwenden."
 
 #: ../../mod/register.php:136
 msgid ""
@@ -2258,7 +2261,7 @@ msgstr "Bitte melde dich an."
 
 #: ../../mod/item.php:81
 msgid "Unable to locate original post."
-msgstr "Konnte das original Posting nicht finden."
+msgstr "Konnte das Originalposting nicht finden."
 
 #: ../../mod/item.php:196
 msgid "Empty post discarded."
@@ -2369,8 +2372,8 @@ msgstr "Bild Zurechtschneiden"
 #: ../../mod/profile_photo.php:210
 msgid "Please adjust the image cropping for optimum viewing."
 msgstr ""
-"Passe bitte den Bildausschnitt an damit das Bild optimal dargestellt werden "
-"kann."
+"Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden"
+" kann."
 
 #: ../../mod/profile_photo.php:211
 msgid "Done Editing"
@@ -2573,7 +2576,7 @@ msgstr "Erweitert"
 
 #: ../../mod/admin.php:306 ../../addon/statusnet/statusnet.php:459
 msgid "Site name"
-msgstr "Seiten Name"
+msgstr "Seitenname"
 
 #: ../../mod/admin.php:307
 msgid "Banner/Logo"
@@ -2581,7 +2584,7 @@ msgstr "Banner/Logo"
 
 #: ../../mod/admin.php:308
 msgid "System language"
-msgstr "System Sprache"
+msgstr "Systemsprache"
 
 #: ../../mod/admin.php:309
 msgid "System theme"
@@ -3022,7 +3025,7 @@ msgstr "Region/Bundesstaat:"
 
 #: ../../mod/profiles.php:387
 msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
-msgstr "<span class=\"heart\">&hearts;</span> Beziehungs Status:"
+msgstr "<span class=\"heart\">&hearts;</span> Beziehungsstatus:"
 
 #: ../../mod/profiles.php:388
 msgid "Who: (if applicable)"
@@ -3212,7 +3215,7 @@ msgstr "Bitte trete meinem Sozialen Netzwerk auf %s bei"
 
 #: ../../mod/invite.php:103
 msgid "To accept this invitation, please visit:"
-msgstr "Um diese Einladung anzunehmen beuche bitte:"
+msgstr "Um diese Einladung anzunehmen besuche bitte:"
 
 #: ../../mod/invite.php:104
 msgid "You will need to supply this invitation code: $invite_code"
@@ -3222,7 +3225,7 @@ msgstr "Du benötigst den folgenden Einladungs Code: $invite_code"
 msgid ""
 "Once you have registered, please connect with me via my profile page at:"
 msgstr ""
-"Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:"
+"Sobald du registriert bist, kontaktiere mich bitte auf meiner Profilseite:"
 
 #: ../../mod/dfrn_confirm.php:233
 msgid "Response from remote site was not understood."
@@ -3267,7 +3270,7 @@ msgstr "Für '%s' wurde kein Nutzer gefunden"
 
 #: ../../mod/dfrn_confirm.php:517
 msgid "Our site encryption key is apparently messed up."
-msgstr "Der Verschlüsslungsschlüssel unserer Seite ist anscheinend im Arsch."
+msgstr "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend im Arsch."
 
 #: ../../mod/dfrn_confirm.php:528
 msgid "Empty site URL was provided or URL could not be decrypted by us."
@@ -3290,7 +3293,7 @@ msgstr ""
 #: ../../mod/dfrn_confirm.php:589
 msgid "Unable to set your contact credentials on our system."
 msgstr ""
-"Deine Kontaktreferenzen konnten nicht in unserm System gespeichert werden."
+"Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."
 
 #: ../../mod/dfrn_confirm.php:642
 msgid "Unable to update your contact profile details on our system"
@@ -3417,8 +3420,8 @@ msgid ""
 "Three dimensional tic-tac-toe is just like the traditional game except that "
 "it is played on multiple levels simultaneously. "
 msgstr ""
-"Drei dimensionales Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur "
-"das man es auf mehreren Ebenen gleichzeitig spielt."
+"3D-Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur das man es auf "
+"mehreren Ebenen gleichzeitig spielt."
 
 #: ../../addon/tictac/tictac.php:61
 msgid ""
@@ -3632,7 +3635,7 @@ msgstr "Bei StatusNet anmelden"
 
 #: ../../addon/statusnet/statusnet.php:309
 msgid "Copy the security code from StatusNet here"
-msgstr "Kopiere den Sicherheitscode von StatusNet hier her"
+msgstr "Kopiere den Sicherheitscode von StatusNet hier hin"
 
 #: ../../addon/statusnet/statusnet.php:315
 msgid "Cancel Connection Process"
@@ -3788,7 +3791,7 @@ msgstr "Alter:"
 
 #: ../../include/profile_advanced.php:70
 msgid "<span class=\"heart\">&hearts;</span> Status:"
-msgstr "<span class=\"heart\">&hearts;</span> Bezieungsstatus:"
+msgstr "<span class=\"heart\">&hearts;</span> Beziehungsstatus:"
 
 #: ../../include/profile_advanced.php:103 ../../boot.php:886
 msgid "Homepage:"
@@ -3880,7 +3883,7 @@ msgstr "Täglich"
 
 #: ../../include/contact_selectors.php:59
 msgid "Weekly"
-msgstr "Wöchendlich"
+msgstr "Wöchentlich"
 
 #: ../../include/contact_selectors.php:60
 msgid "Monthly"
@@ -3896,19 +3899,19 @@ msgstr "Weiblich"
 
 #: ../../include/profile_selectors.php:6
 msgid "Currently Male"
-msgstr "Momentan Männlich"
+msgstr "Momentan männlich"
 
 #: ../../include/profile_selectors.php:6
 msgid "Currently Female"
-msgstr "Momentan Weiblich"
+msgstr "Momentan weiblich"
 
 #: ../../include/profile_selectors.php:6
 msgid "Mostly Male"
-msgstr "Hauptsächlich Männlich"
+msgstr "Hauptsächlich männlich"
 
 #: ../../include/profile_selectors.php:6
 msgid "Mostly Female"
-msgstr "Hauptsächlich Weiblich"
+msgstr "Hauptsächlich weiblich"
 
 #: ../../include/profile_selectors.php:6
 msgid "Transgender"
@@ -3920,7 +3923,7 @@ msgstr "Intersex"
 
 #: ../../include/profile_selectors.php:6
 msgid "Transsexual"
-msgstr "Transsexuel"
+msgstr "Transsexuell"
 
 #: ../../include/profile_selectors.php:6
 msgid "Hermaphrodite"
@@ -3964,7 +3967,7 @@ msgstr "Keine Vorlieben"
 
 #: ../../include/profile_selectors.php:19
 msgid "Bisexual"
-msgstr "Bisexuel"
+msgstr "Bisexuell"
 
 #: ../../include/profile_selectors.php:19
 msgid "Autosexual"
@@ -4020,7 +4023,7 @@ msgstr "Untreu"
 
 #: ../../include/profile_selectors.php:33
 msgid "Sex Addict"
-msgstr "Sex Besessen"
+msgstr "Sexbesessen"
 
 #: ../../include/profile_selectors.php:33
 msgid "Friends"
@@ -4028,7 +4031,7 @@ msgstr "Freunde"
 
 #: ../../include/profile_selectors.php:33
 msgid "Friends/Benefits"
-msgstr "Friends/Benefits"
+msgstr "Freunde/Zuwendungen"
 
 #: ../../include/profile_selectors.php:33
 msgid "Casual"
@@ -4259,7 +4262,7 @@ msgstr "Persönlich"
 
 #: ../../include/nav.php:55
 msgid "Home Page"
-msgstr "Home Page"
+msgstr "Homepage"
 
 #: ../../include/nav.php:59
 msgid "Create an account"
index 56d54a6d397ff565c79be093fd372e7bbc665a51..2acc13beffe950b9e98933b8c11f7b2929c54661 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-function string_plural_select($n){
+function string_plural_select_de($n){
        return ($n != 1);
 }
 ;
@@ -23,7 +23,7 @@ $a->strings["Submit"] = "Senden";
 $a->strings["Help:"] = "Hilfe:";
 $a->strings["Help"] = "Hilfe";
 $a->strings["File exceeds size limit of %d"] = "Die Datei ist größer als das erlaubte Limit von %d";
-$a->strings["File upload failed."] = "Upload der Datei fehlgeschlagen.";
+$a->strings["File upload failed."] = "Hochladen der Datei fehlgeschlagen.";
 $a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet.";
 $a->strings["Suggest Friends"] = "Kontakte vorschlagen";
 $a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor";
@@ -57,7 +57,7 @@ $a->strings["%s welcomes %s"] = "%s heißt %s herzlich willkommen";
 $a->strings["Photo Albums"] = "Fotoalben";
 $a->strings["Contact Photos"] = "Kontaktbilder";
 $a->strings["everybody"] = "jeder";
-$a->strings["Contact information unavailable"] = "Kontakt Informationen nicht verfügbar";
+$a->strings["Contact information unavailable"] = "Kontaktinformationen nicht verfügbar";
 $a->strings["Profile Photos"] = "Profilbilder";
 $a->strings["Album not found."] = "Album nicht gefunden.";
 $a->strings["Delete Album"] = "Album löschen";
@@ -71,7 +71,7 @@ $a->strings["Unable to process image."] = "Konnte das Bild nicht bearbeiten.";
 $a->strings["Image upload failed."] = "Hochladen des Bildes gescheitert.";
 $a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert.";
 $a->strings["No photos selected"] = "Keine Bilder ausgewählt";
-$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschrängt.";
+$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt.";
 $a->strings["Upload Photos"] = "Bilder hochladen";
 $a->strings["New album name: "] = "Name des neuen Albums: ";
 $a->strings["or existing album name: "] = "oder existierender Albumname: ";
@@ -96,7 +96,7 @@ $a->strings["Please wait"] = "Bitte warten";
 $a->strings["This is you"] = "Das bist du";
 $a->strings["Comment"] = "Kommentar";
 $a->strings["Delete"] = "Löschen";
-$a->strings["Recent Photos"] = "Neuste Fotos";
+$a->strings["Recent Photos"] = "Neueste Fotos";
 $a->strings["Upload New Photos"] = "Weitere Fotos hochladen";
 $a->strings["View Album"] = "Album betrachten";
 $a->strings["Not available."] = "Nicht verfügbar.";
@@ -120,7 +120,7 @@ $a->strings["CC: email addresses"] = "CC: EMail Addresse";
 $a->strings["Public post"] = "Öffentlicher Beitrag";
 $a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com";
 $a->strings["This introduction has already been accepted."] = "Diese Vorstellung wurde bereits abgeschlossen.";
-$a->strings["Profile location is not valid or does not contain profile information."] = "Profil Adresse ist ungültig oder stellt einige Profildaten nicht zur Verfügung.";
+$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt einige Profildaten nicht zur Verfügung.";
 $a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden.";
 $a->strings["Warning: profile location has no profile photo."] = "Warnung: Es konnte kein Profilbild bei der angegebenen Profiladresse gefunden werden.";
 $a->strings["%d required parameter was not found at the given location"] = array(
@@ -132,24 +132,24 @@ $a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler
 $a->strings["Profile unavailable."] = "Profil nicht verfügbar.";
 $a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Freundschaftsanfragen erhalten.";
 $a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen.";
-$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten es in 24 Stunden erneut zu versuchen.";
+$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen.";
 $a->strings["Invalid locator"] = "Ungültiger Locator";
-$a->strings["Unable to resolve your name at the provided location."] = "Unable to resolve your name at the provided location.";
+$a->strings["Unable to resolve your name at the provided location."] = "Konnte deinen Namen an der angegebenen Stelle nicht finden.";
 $a->strings["You have already introduced yourself here."] = "Du hast dich hier bereits vorgestellt.";
 $a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob du bereits ein Freund von %s bist.";
 $a->strings["Invalid profile URL."] = "Ungültige Profil URL.";
 $a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil URL.";
 $a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdaten fehlgeschlagen.";
 $a->strings["Your introduction has been sent."] = "Deine Vorstellung wurde abgeschickt.";
-$a->strings["Please login to confirm introduction."] = "Bitte melde dich an um die Vorstellung zu bestätigen.";
+$a->strings["Please login to confirm introduction."] = "Bitte melde dich an, um die Vorstellung zu bestätigen.";
 $a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Incorrect identity currently logged in. Please login to <strong>this</strong> profile.";
 $a->strings["Welcome home %s."] = "Willkommen zurück %s.";
-$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige deine Vorstellung/Verbindungs Anfrage bei %s.";
+$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige deine Vorstellung/Verbindungsanfrage bei %s.";
 $a->strings["Confirm"] = "Bestätigen";
 $a->strings["[Name Withheld]"] = "[Name Zurückgehalten]";
 $a->strings["Introduction received at "] = "Vorstellung erhalten auf";
 $a->strings["Administrator"] = "Administrator";
-$a->strings["Friend/Connection Request"] = "Freundschafts/Kontakt Anfrage";
+$a->strings["Friend/Connection Request"] = "Freundschafts-/Kontaktanfrage";
 $a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca";
 $a->strings["Please answer the following:"] = "Bitte beantworte folgende Fragen:";
 $a->strings["Does %s know you?"] = "Kennt %s dich?";
@@ -163,13 +163,13 @@ $a->strings["Private (secure) network"] = "Privates (sicheres) Netzwerk";
 $a->strings["Public (insecure) network"] = "Öffentliches (unsicheres) Netzwerk";
 $a->strings["Your Identity Address:"] = "Adresse deines Profils:";
 $a->strings["Submit Request"] = "Anfrage abschicken";
-$a->strings["Could not create/connect to database."] = "Konnte die Verbindung zur Datenbank nicht aufbauen bzw. die Datenbank anlegen.";
+$a->strings["Could not create/connect to database."] = "Konnte die Verbindung zur Datenbank nicht aufbauen, bzw. die Datenbank anlegen.";
 $a->strings["Connected to database."] = "Mit der Datenbank verbunden.";
 $a->strings["Proceed with Installation"] = "Mit der Installation fortfahren";
-$a->strings["Your Friendika site database has been installed."] = "Die Datenbank deiner Friendika Seite wurde erfolgreich installiert.";
+$a->strings["Your Friendika site database has been installed."] = "Die Datenbank deiner Friendikaseite wurde erfolgreich installiert.";
 $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen cron Job (o.ä.) für den Poller einrichten.";
 $a->strings["Please see the file \"INSTALL.txt\"."] = "Lies bitte die \"INSTALL.txt\".";
-$a->strings["Proceed to registration"] = "Mit der Registration fortfahren";
+$a->strings["Proceed to registration"] = "Mit der Registrierung fortfahren";
 $a->strings["Database import failed."] = "Import der Datenbank schlug fehl.";
 $a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Möglicherweise musst du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren.";
 $a->strings["Welcome to Friendika."] = "Willkommen bei Friendika.";
@@ -177,13 +177,13 @@ $a->strings["Friendika Social Network"] = "Friendika Soziales Netzwerk";
 $a->strings["Installation"] = "Installation";
 $a->strings["In order to install Friendika we need to know how to connect to your database."] = "Um Friendika installieren zu können, müssen wir wissen wie wir deine MySQL Datenbank erreichen.";
 $a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite falls du Fragen zu diesen Einstellungen haben solltest.";
-$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank die du unten angibst sollte bereits existieren. Ist dies noch nicht der Fall erzeuge sie bitte bevor du mit der Installation vorfährst.";
+$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank, die du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor du mit der Installation vorfährst.";
 $a->strings["Database Server Name"] = "Datenbank Server";
 $a->strings["Database Login Name"] = "Datenbank Nutzer";
 $a->strings["Database Login Password"] = "Datenbank Passwort";
 $a->strings["Database Name"] = "Datenbank Name";
-$a->strings["Please select a default timezone for your website"] = "Bitte wähle die standard Zeitzone deiner Webseite";
-$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "Email Adresse des Seiten Administrators. Die Email Adresse deines Accounts muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen kannst.";
+$a->strings["Please select a default timezone for your website"] = "Bitte wähle die Standardzeitzone deiner Webseite";
+$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "Emailadresse des Seitenadministrators. Die Emailadresse deines Accounts muss mit dieser übereinstimmen, damit du das Administrationspanel nutzen kannst.";
 $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden.";
 $a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "Diese wird von Friendika benötigt. Bitte passe die Konfigurationsdatei .htconfig.php entsprechend an.";
 $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Die Kommandozeilenversion von PHP auf deinem System hat \"register_argc_argv\" nicht aktiviert.";
@@ -196,14 +196,14 @@ $a->strings["Error: GD graphics PHP module with JPEG support required but not in
 $a->strings["Error: openssl PHP module required but not installed."] = "Fehler: Das openssl Modul von PHP ist nict installiert.";
 $a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli Modul von PHP ist nicht installiert.";
 $a->strings["Error: mb_string PHP module required but not installed."] = "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert.";
-$a->strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "Der Installationswizzard muss in der Lage sein eine Datei im Stammverzeichnis deines Webservers anzuliegen ist allerdings derzeit nicht in der Lage dies zu tun.";
+$a->strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "Der Installationswizzard muss in der Lage sein, eine Datei im Stammverzeichnis deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage dies zu tun.";
 $a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten, der Webserver könnte keine Schreiberlaubnis haben, selbst wenn du sie hast.";
 $a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team um diese Situations zu beheben.";
 $a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Sollte dies nicht möglich sein musst du die Installation manuell durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\".";
 $a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner Friendika Installation zu erzeugen.";
-$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten wärend der Erzeugung der Datenbank Tabellen.";
+$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten während der Erzeugung der Datenbank Tabellen.";
 $a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]";
-$a->strings["Profile Match"] = "Profil Übereinstimmungen";
+$a->strings["Profile Match"] = "Profilübereinstimmungen";
 $a->strings["No keywords to match. Please add keywords to your default profile."] = "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu deinem Standardprofil hinzu.";
 $a->strings["No matches"] = "Keine Übereinstimmungen";
 $a->strings["Remote privacy information not available."] = "Entfernte Privatsphäreneinstellungen nicht verfügbar.";
@@ -212,11 +212,11 @@ $a->strings["Welcome to %s"] = "Willkommen zu %s";
 $a->strings["Invalid request identifier."] = "Invalid request identifier.";
 $a->strings["Discard"] = "Verwerfen";
 $a->strings["Ignore"] = "Ignorieren";
-$a->strings["Pending Friend/Connect Notifications"] = "Anstehende Freundschafts/Kontakt Benachrichtigungen";
+$a->strings["Pending Friend/Connect Notifications"] = "Anstehende Freundschafts-/Kontaktbenachrichtigungen";
 $a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
 $a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
-$a->strings["Notification type: "] = "Benachrichtigungs Typ: ";
-$a->strings["Friend Suggestion"] = "Kontakt Vorschlag";
+$a->strings["Notification type: "] = "Benachrichtigungstyp: ";
+$a->strings["Friend Suggestion"] = "Kontaktvorschlag";
 $a->strings["suggested by %s"] = "vorgeschlagen von %s";
 $a->strings["Approve"] = "Genehmigen";
 $a->strings["Claims to be known to you: "] = "Behauptet dich zu kennen: ";
@@ -238,10 +238,10 @@ $a->strings["Connect/Follow"] = "Verbinden/Folgen";
 $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara";
 $a->strings["Follow"] = "Folge";
 $a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen.";
-$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profiel nicht finden.";
+$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden.";
 $a->strings["Contact updated."] = "Kontakt aktualisiert.";
 $a->strings["Contact has been blocked"] = "Kontakt wurde blockiert";
-$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder frei gegeben";
+$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben";
 $a->strings["Contact has been ignored"] = "Der Kontakt wurde ignoriert";
 $a->strings["Contact has been unignored"] = "Kontakt wurde ignoriert";
 $a->strings["stopped following"] = "wird nicht mehr gefolgt";
@@ -290,7 +290,7 @@ $a->strings["Password reset request issued. Check your email."] = "Zurücksetzen
 $a->strings["Password reset requested at %s"] = "Anfrage zum Zurücksetzen des Passworts auf %s erhalten";
 $a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Anfrage konnte nicht verifiziert werden. (Eventuell hast du bereits ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert.";
 $a->strings["Password Reset"] = "Passwort zurücksetzen";
-$a->strings["Your password has been reset as requested."] = "Dein Passwort wurde wie gewünscht zurück gesetzt.";
+$a->strings["Your password has been reset as requested."] = "Dein Passwort wurde wie gewünscht zurückgesetzt.";
 $a->strings["Your new password is"] = "Dein neues Passwort lautet";
 $a->strings["Save or copy your new password - and then"] = "Speichere oder kopiere dein neues Passwort - und dann";
 $a->strings["click here to login"] = "hier klicken um dich anzumelden";
@@ -319,7 +319,7 @@ $a->strings["Soapbox Account"] = "Sandkasten Account";
 $a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Freundschaftsanfragen werden automatisch als Nurlese-Fans akzeptiert";
 $a->strings["Community/Celebrity Account"] = "Gemeinschafts/Berühmtheiten Account";
 $a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Freundschaftsanfragen werden automatisch als Lese-und-Schreib-Fans akzeptiert";
-$a->strings["Automatic Friend Account"] = "Automatischer Freundes Account";
+$a->strings["Automatic Friend Account"] = "Automatischer Freundesaccount";
 $a->strings["Automatically approve all connection/friend requests as friends"] = "Freundschaftsanfragen werden automatisch als Freund akzeptiert";
 $a->strings["OpenID:"] = "OpenID:";
 $a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für diesen Account mit dieser OpenID.";
@@ -335,10 +335,10 @@ $a->strings["Export Personal Data"] = "Perönliche Daten exportieren";
 $a->strings["Password Settings"] = "Passwort Einstellungen";
 $a->strings["New Password:"] = "Neues Passwort:";
 $a->strings["Confirm:"] = "Bestätigen:";
-$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer außer du willst das Passwort ändern";
+$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer, außer du willst das Passwort ändern";
 $a->strings["Basic Settings"] = "Grundeinstellungen";
 $a->strings["Full Name:"] = "Kompletter Name:";
-$a->strings["Email Address:"] = "Email Adresse:";
+$a->strings["Email Address:"] = "Emailadresse:";
 $a->strings["Your Timezone:"] = "Deine Zeitzone:";
 $a->strings["Default Post Location:"] = "Standardstandort:";
 $a->strings["Use Browser Location:"] = "Verwende den Standort des Browsers:";
@@ -380,8 +380,8 @@ $a->strings["View New Items"] = "Neue Einträge anzeigen";
 $a->strings["View Any Items"] = "Alle Einträge anzeigen";
 $a->strings["View Starred Items"] = "Gesternte Einträge anzeigen";
 $a->strings["Warning: This group contains %s member from an insecure network."] = array(
-       0 => "Warnung: Diese Gruppe beinhaltet %s Mitglied aus unsicheren Netzwerken.",
-       1 => "Warnung: Diese Gruppe beinhaltet %s Mitglieder aus unsicheren Netzwerken.",
+       0 => "",
+       1 => "",
 );
 $a->strings["Private messages to this group are at risk of public disclosure."] = "Private Nachrichten an diese Gruppe könnten an die Öffentlichkeit geraten.";
 $a->strings["No such group"] = "Es gibt keine solche Gruppe";
@@ -413,11 +413,11 @@ $a->strings["Group not found."] = "Gruppe nicht gefunden.";
 $a->strings["Group name changed."] = "Gruppenname geändert.";
 $a->strings["Permission denied"] = "Zugriff verweigert";
 $a->strings["Create a group of contacts/friends."] = "Eine Gruppe von Kontakten/Freunden anlegen.";
-$a->strings["Group Name: "] = "Gruppen Name:";
+$a->strings["Group Name: "] = "Gruppenname:";
 $a->strings["Group removed."] = "Gruppe entfernt.";
 $a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen.";
 $a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an um ihn hinzuzufügen oder zu entfernen";
-$a->strings["Group Editor"] = "Gruppen Editor";
+$a->strings["Group Editor"] = "Gruppeneditor";
 $a->strings["Members"] = "Mitglieder";
 $a->strings["All Contacts"] = "Alle Kontakte";
 $a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner";
@@ -434,8 +434,8 @@ $a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Name
 $a->strings["Name too short."] = "Der Name ist zu kurz.";
 $a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein.";
 $a->strings["Your email domain is not among those allowed on this site."] = "Die Domain deiner EMail Adresse ist nicht erlaubt auf dieser Seite.";
-$a->strings["Not a valid email address."] = "Keine gültige EMail Adresse.";
-$a->strings["Cannot use that email."] = "Konnte diese EMail Adresse nicht verwenden.";
+$a->strings["Not a valid email address."] = "Keine gültige EMailadresse.";
+$a->strings["Cannot use that email."] = "Konnte diese EMailadresse nicht verwenden.";
 $a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen.";
 $a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
 $a->strings["SERIOUS ERROR: Generation of security keys failed."] = "SERIOUS ERROR: Generation of security keys failed.";
@@ -473,7 +473,7 @@ $a->strings["No installed plugins/addons/apps"] = "Keine Plugins/Erweiterungen/A
 $a->strings["Account approved."] = "Account freigegeben.";
 $a->strings["Registration revoked for %s"] = "Registration für %s wurde zurück gezogen";
 $a->strings["Please login."] = "Bitte melde dich an.";
-$a->strings["Unable to locate original post."] = "Konnte das original Posting nicht finden.";
+$a->strings["Unable to locate original post."] = "Konnte das Originalposting nicht finden.";
 $a->strings["Empty post discarded."] = "Leere Nachricht wurde verworfen.";
 $a->strings["Wall Photos"] = "Pinnwand Bilder";
 $a->strings["noreply"] = "noreply";
@@ -495,7 +495,7 @@ $a->strings["Upload"] = "Hochladen";
 $a->strings["skip this step"] = "diesen Schritt überspringen";
 $a->strings["select a photo from your photo albums"] = "wähle ein Foto von deinen Fotoalben";
 $a->strings["Crop Image"] = "Bild Zurechtschneiden";
-$a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bitte den Bildausschnitt an damit das Bild optimal dargestellt werden kann.";
+$a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden kann.";
 $a->strings["Done Editing"] = "Bearbeitung abgeschlossen";
 $a->strings["Image uploaded successfully."] = "Bild erfolgreich auf den Server geladen.";
 $a->strings["No profile"] = "Kein Profil";
@@ -544,9 +544,9 @@ $a->strings["Open"] = "Offen";
 $a->strings["File upload"] = "Datei hochladen";
 $a->strings["Policies"] = "Regeln";
 $a->strings["Advanced"] = "Erweitert";
-$a->strings["Site name"] = "Seiten Name";
+$a->strings["Site name"] = "Seitenname";
 $a->strings["Banner/Logo"] = "Banner/Logo";
-$a->strings["System language"] = "System Sprache";
+$a->strings["System language"] = "Systemsprache";
 $a->strings["System theme"] = "Systemweites Thema";
 $a->strings["Maximum image size"] = "Maximale Größe von Bildern";
 $a->strings["Register policy"] = "Registrationsmethode";
@@ -653,7 +653,7 @@ $a->strings["Locality/City:"] = "Wohnort/Stadt:";
 $a->strings["Postal/Zip Code:"] = "Postleitzahl:";
 $a->strings["Country:"] = "Land:";
 $a->strings["Region/State:"] = "Region/Bundesstaat:";
-$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungs Status:";
+$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungsstatus:";
 $a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)";
 $a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiel: cathy123, Cathy Williams, cathy@example.com";
 $a->strings["Sexual Preference:"] = "Sexuelle Vorlieben:";
@@ -700,9 +700,9 @@ $a->strings["You have no more invitations available"] = "Du hast keine weiteren
 $a->strings["Send invitations"] = "Einladungen senden";
 $a->strings["Enter email addresses, one per line:"] = "Email Adressen eingeben, eine pro Zeile:";
 $a->strings["Please join my social network on %s"] = "Bitte trete meinem Sozialen Netzwerk auf %s bei";
-$a->strings["To accept this invitation, please visit:"] = "Um diese Einladung anzunehmen beuche bitte:";
+$a->strings["To accept this invitation, please visit:"] = "Um diese Einladung anzunehmen besuche bitte:";
 $a->strings["You will need to supply this invitation code: \$invite_code"] = "Du benötigst den folgenden Einladungs Code: \$invite_code";
-$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald du registriert bist kontaktiere mich bitte auf meiner Profilseite:";
+$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald du registriert bist, kontaktiere mich bitte auf meiner Profilseite:";
 $a->strings["Response from remote site was not understood."] = "Antwort der entfernten Gegenstelle unverständlich.";
 $a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: ";
 $a->strings["Confirmation completed successfully."] = "Bestätigung erfolgreich abgeschlossen.";
@@ -712,11 +712,11 @@ $a->strings["Introduction failed or was revoked."] = "Vorstellung schlug fehl od
 $a->strings["Unable to set contact photo."] = "Konnte das Bild des Kontakts nicht speichern.";
 $a->strings["%1\$s is now friends with %2\$s"] = "%1\$s ist nun mit %2\$s befreundet";
 $a->strings["No user record found for '%s' "] = "Für '%s' wurde kein Nutzer gefunden";
-$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsslungsschlüssel unserer Seite ist anscheinend im Arsch.";
+$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend im Arsch.";
 $a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden.";
 $a->strings["Contact record was not found for you on our site."] = "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden.";
 $a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Die ID die uns dein System angeboten hat ist hier bereits vergeben. Bitte versuche es noch einmal.";
-$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserm System gespeichert werden.";
+$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden.";
 $a->strings["Unable to update your contact profile details on our system"] = "Die Updates für dein Profil konnten nicht gespeichert werden";
 $a->strings["Connection accepted at %s"] = "Auf %s wurde die Verbindung akzeptiert";
 $a->strings["Facebook disabled"] = "Facebook deaktiviert";
@@ -744,7 +744,7 @@ $a->strings["Three Dimensional Tic-Tac-Toe"] = "Dreidimensionales Tic-Tac-Toe";
 $a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe";
 $a->strings["New game"] = "Neues Spiel";
 $a->strings["New game with handicap"] = "Neues Handicap Spiel";
-$a->strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "Drei dimensionales Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur das man es auf mehreren Ebenen gleichzeitig spielt.";
+$a->strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "3D-Tic-Tac-Toe ist genauso wie das herkömmliche Spiel, nur das man es auf mehreren Ebenen gleichzeitig spielt.";
 $a->strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "In diesem Fall sind es drei Ebenen. Man gewinnt indem man drei in einer Reihe auf einer beliebigen Reihe schafft, oder drei übereinander oder diagonal auf verschiedenen Ebenen.";
 $a->strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "Beim Handicap-Spiel wird die zentrale Position der mittleren Ebene gesperrt da der Spieler der diese Ebene besitzt oft einen unfairen Vorteil genießt.";
 $a->strings["You go first..."] = "Du fängst an...";
@@ -785,7 +785,7 @@ $a->strings["OAuth Consumer Secret"] = "OAuth Consumer Geheimnis";
 $a->strings["Base API Path (remember the trailing /)"] = "Basis-URL der StatusNet API (vergiss den abschließenden / nicht)";
 $a->strings["To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to StatusNet."] = "Um deinen Account mit einem StatusNet Account zu verknüpfen klicke den Button an um einen Sicherheitscode von StatusNet zu erhalten und kopiere diesen in die Eingabebox weiter unten. Es werden ausschließlich deine <strong>öffentlichen</strong> Nachrichten bei StatusNet veröffentllicht.";
 $a->strings["Log in with StatusNet"] = "Bei StatusNet anmelden";
-$a->strings["Copy the security code from StatusNet here"] = "Kopiere den Sicherheitscode von StatusNet hier her";
+$a->strings["Copy the security code from StatusNet here"] = "Kopiere den Sicherheitscode von StatusNet hier hin";
 $a->strings["Cancel Connection Process"] = "Verbindungsprozess abbrechen";
 $a->strings["Current StatusNet API is"] = "Derzeitige StatusNet API URL lautet";
 $a->strings["Cancel StatusNet Connection"] = "Verbindung zum StatusNet Server abbrechen";
@@ -817,7 +817,7 @@ $a->strings["Birthday:"] = "Geburtstag:";
 $a->strings["j F, Y"] = "j F, Y";
 $a->strings["j F"] = "j F";
 $a->strings["Age:"] = "Alter:";
-$a->strings["<span class=\"heart\">&hearts;</span> Status:"] = "<span class=\"heart\">&hearts;</span> Bezieungsstatus:";
+$a->strings["<span class=\"heart\">&hearts;</span> Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungsstatus:";
 $a->strings["Homepage:"] = "Homepage:";
 $a->strings["Religion:"] = "Religion:";
 $a->strings["About:"] = "Über:";
@@ -840,17 +840,17 @@ $a->strings["Frequently"] = "Häufig";
 $a->strings["Hourly"] = "Stündlich";
 $a->strings["Twice daily"] = "Zweimal Täglich";
 $a->strings["Daily"] = "Täglich";
-$a->strings["Weekly"] = "Wöchendlich";
+$a->strings["Weekly"] = "Wöchentlich";
 $a->strings["Monthly"] = "Monatlich";
 $a->strings["Male"] = "Männlich";
 $a->strings["Female"] = "Weiblich";
-$a->strings["Currently Male"] = "Momentan Männlich";
-$a->strings["Currently Female"] = "Momentan Weiblich";
-$a->strings["Mostly Male"] = "Hauptsächlich Männlich";
-$a->strings["Mostly Female"] = "Hauptsächlich Weiblich";
+$a->strings["Currently Male"] = "Momentan männlich";
+$a->strings["Currently Female"] = "Momentan weiblich";
+$a->strings["Mostly Male"] = "Hauptsächlich männlich";
+$a->strings["Mostly Female"] = "Hauptsächlich weiblich";
 $a->strings["Transgender"] = "Transgender";
 $a->strings["Intersex"] = "Intersex";
-$a->strings["Transsexual"] = "Transsexuel";
+$a->strings["Transsexual"] = "Transsexuell";
 $a->strings["Hermaphrodite"] = "Hermaphrodit";
 $a->strings["Neuter"] = "Neuter";
 $a->strings["Non-specific"] = "Nicht spezifiziert";
@@ -861,7 +861,7 @@ $a->strings["Females"] = "Frauen";
 $a->strings["Gay"] = "Schwul";
 $a->strings["Lesbian"] = "Lesbisch";
 $a->strings["No Preference"] = "Keine Vorlieben";
-$a->strings["Bisexual"] = "Bisexuel";
+$a->strings["Bisexual"] = "Bisexuell";
 $a->strings["Autosexual"] = "Autosexual";
 $a->strings["Abstinent"] = "Abstinent";
 $a->strings["Virgin"] = "Jungfrau";
@@ -875,9 +875,9 @@ $a->strings["Available"] = "Verfügbar";
 $a->strings["Unavailable"] = "Nicht verfügbar";
 $a->strings["Dating"] = "Dating";
 $a->strings["Unfaithful"] = "Untreu";
-$a->strings["Sex Addict"] = "Sex Besessen";
+$a->strings["Sex Addict"] = "Sexbesessen";
 $a->strings["Friends"] = "Freunde";
-$a->strings["Friends/Benefits"] = "Friends/Benefits";
+$a->strings["Friends/Benefits"] = "Freunde/Zuwendungen";
 $a->strings["Casual"] = "Casual";
 $a->strings["Engaged"] = "Verlobt";
 $a->strings["Married"] = "Verheiratet";
@@ -937,7 +937,7 @@ $a->strings["End this session"] = "Diese Sitzung beenden";
 $a->strings["Login"] = "Anmeldung";
 $a->strings["Sign in"] = "Anmelden";
 $a->strings["Home"] = "Persönlich";
-$a->strings["Home Page"] = "Home Page";
+$a->strings["Home Page"] = "Homepage";
 $a->strings["Create an account"] = "Account erstellen";
 $a->strings["Help and documentation"] = "Hilfe und Dokumentation";
 $a->strings["Apps"] = "Apps";
index 0d4a690541c09b406789a736de82c751d12e6fd7..ab1cb0f092ae4094c2f3dcc9d60b3fd520eed118 100644 (file)
@@ -6,8 +6,7 @@
   <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>\r
 </head>\r
 <body>\r
-       <header><?php if(x($page,'header')) echo $page['header']; ?></header>\r
-       <nav><div id="top-margin"></div><?php if(x($page,'nav')) echo $page['nav']; ?></nav>\r
+       <?php if(x($page,'nav')) echo $page['nav']; ?>\r
        <aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside>\r
        <section><?php if(x($page,'content')) echo $page['content']; ?>\r
                <div id="page-footer"></div>\r
index 034da332daeadcd35406e274d21065f964ed2099..3f4300da6b827b2bed5a106ccabdc5969d812f73 100644 (file)
@@ -4,8 +4,9 @@
 <p id="dfrn-request-intro">
 $page_desc<br />
 <ul id="dfrn-request-networks">
-<li><a href="http://friendika.com" title="$private_net">$friendika</a> <img src="images/lock_icon.gif" alt="$private_net" title="$private_net" /></li>
-<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a> <img src="images/unlock_icon.gif" alt="$public_net" title="$public_net"/></li>
+<li><a href="http://friendika.com" title="$friendika">$friendika</a></li>
+<li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li>
+<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li>
 </ul>
 $desc
 </p>
diff --git a/view/diaspora_vcard.tpl b/view/diaspora_vcard.tpl
new file mode 100644 (file)
index 0000000..aa2c9ed
--- /dev/null
@@ -0,0 +1,44 @@
+<div style="display:none;">
+       <dl class='entity_nickname'>
+               <dt>Nickname</dt>
+               <dd>            
+                       <a class="nickname url uid" href="$podloc/" rel="me">$diaspora.nickname</a>
+               </dd>
+       </dl>
+       <dl class='entity_fn'>
+               <dt>Full name</dt>
+               <dd>
+                       <span class='fn'>$diaspora.fullname</span>
+               </dd>
+       </dl>
+       <dl class="entity_url">
+               <dt>URL</dt>
+               <dd>
+                       <a class="url" href="$diaspora.podloc/" id="pod_location" rel="me">$diaspora.podloc/</a>
+               </dd>
+       </dl>
+       <dl class="entity_photo">
+               <dt>Photo</dt>
+               <dd>
+                       <img class="photo avatar" height="300px" width="300px" src="$diaspora.photo300">
+               </dd>
+       </dl>
+       <dl class="entity_photo_medium">
+               <dt>Photo</dt>
+               <dd> 
+                       <img class="photo avatar" height="100px" width="100px" src="$diaspora.photo100">
+               </dd>
+       </dl>
+       <dl class="entity_photo_small">
+               <dt>Photo</dt>
+               <dd>
+                       <img class="photo avatar" height="50px" width="50px" src="$diaspora.photo50">
+               </dd>
+       </dl>
+       <dl class="entity_searchable">
+               <dt>Searchable</dt>
+               <dd>
+                       <span class="searchable">$diaspora.searchable</span>
+               </dd>
+       </dl>
+</div>
index c5463778b69e937399bb2c6d1f153e24504a5eee..ba90b94f82932b81abcb4d0c24bb509dadefeaa0 100644 (file)
@@ -8,7 +8,7 @@ $finding
 <div id="directory-search-wrapper">
 <form id="directory-search-form" action="directory" method="get" >
 <input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="$search" />
-<input type="submit" name="submit" id="directory-search-submit" value="$submit" />
+<input type="submit" name="submit" id="directory-search-submit" value="$submit" class="button" />
 </form>
 </div>
 <div id="directory-search-end"></div>
index 2494bc4b78c79e7927141a8cde9ead1e8b78831e..031f4ff22967a871c848176d58c58531ff9be613 100644 (file)
@@ -1,5 +1,5 @@
 
-<div class="directory-item" id="directory-item-$id" >
+<div class="directory-item lframe" id="directory-item-$id" >
 <div class="directory-photo-wrapper" id="directory-photo-wrapper-$id" > 
 <div class="directory-photo" id="directory-photo-$id" ><a href="$profile-link" class="directory-profile-link" id="directory-profile-link-$id" ><img class="directory-photo-img" src="$photo" alt="$alt-text" title="$alt-text" /></a>
 </div>
index e978ddf9306c744657d5d821e43b3cd051c70cc8..0db49e5aa11cd1fddf4f8214b289dd7eb715d47a 100644 (file)
@@ -1,34 +1,34 @@
-# FRIENDIKA Distribuited Social Network
+# FRIENDIKA Distributed Social Network
 # Copyright (C) 2010, 2011 Mike Macgirvin
 # This file is distributed under the same license as the Friendika package.
 # Mike Macgirvin, 2010
-# David Martín Miranda, 2011.
 #
+#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: 2.1.921\n"
+"Project-Id-Version: 2.2.1097\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-03-23 13:48+0100\n"
-"PO-Revision-Date: 2011-04-14 11:18+0200\n"
-"Last-Translator: David Martín Miranda\n"
-"Language-Team: Español\n"
-"Language: Es\n"
+"POT-Creation-Date: 2011-09-08 19:48-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Language: es_ES\n"
-"X-Source-Language: C\n"
+#"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: ../../index.php:187 ../../index.php:194
+#: ../../index.php:187 ../../index.php:194 ../../mod/help.php:37
+#: ../../index.php:209
 msgid "Not Found"
 msgstr "No se ha encontrado"
 
-#: ../../index.php:188 ../../index.php:195
+#: ../../index.php:188 ../../index.php:195 ../../mod/help.php:38
+#: ../../index.php:210
 msgid "Page not found."
 msgstr "Página no encontrada."
 
 #: ../../index.php:243 ../../mod/group.php:88 ../../index.php:250
+#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:265
 msgid "Permission denied"
 msgstr "Permiso denegado"
 
@@ -48,241 +48,264 @@ msgstr "Permiso denegado"
 #: ../../addon/facebook/facebook.php:110 ../../index.php:251
 #: ../../mod/profiles.php:227 ../../mod/settings.php:208
 #: ../../mod/photos.php:773 ../../mod/display.php:308
-#: ../../mod/editpost.php:10 ../../mod/item.php:668
+#: ../../mod/editpost.php:10 ../../mod/item.php:668 ../../mod/crepair.php:56
+#: ../../mod/wall_attach.php:43 ../../mod/fsuggest.php:78
+#: ../../mod/events.php:102 ../../mod/photos.php:122 ../../mod/photos.php:850
+#: ../../mod/install.php:96 ../../mod/notifications.php:62
+#: ../../mod/contacts.php:122 ../../mod/settings.php:41
+#: ../../mod/settings.php:46 ../../mod/settings.php:305 ../../mod/notes.php:20
+#: ../../mod/attach.php:33 ../../mod/viewcontacts.php:21
+#: ../../mod/register.php:27 ../../mod/regmod.php:111 ../../mod/item.php:112
+#: ../../mod/profile_photo.php:144 ../../mod/profile_photo.php:155
+#: ../../mod/message.php:9 ../../mod/message.php:42 ../../mod/admin.php:10
+#: ../../mod/display.php:108 ../../mod/profiles.php:226
+#: ../../mod/invite.php:81 ../../addon/facebook/facebook.php:314
+#: ../../include/items.php:1999 ../../index.php:266
 msgid "Permission denied."
 msgstr "Permiso denegado."
 
-#: ../../boot.php:808
+#: ../../boot.php:808 ../../boot.php:636
 msgid "Create a New Account"
 msgstr "Crear una nueva cuenta"
 
 #: ../../boot.php:809 ../../mod/register.php:443 ../../include/nav.php:61
-#: ../../mod/register.php:445
+#: ../../mod/register.php:445 ../../mod/register.php:529
+#: ../../include/nav.php:59 ../../boot.php:637
 msgid "Register"
 msgstr "Registrarse"
 
-#: ../../boot.php:815
+#: ../../boot.php:815 ../../boot.php:643
 msgid "Nickname or Email address: "
 msgstr "Apodo o dirección de email: "
 
-#: ../../boot.php:816
+#: ../../boot.php:816 ../../boot.php:644
 msgid "Password: "
 msgstr "Contraseña: "
 
 #: ../../boot.php:817 ../../boot.php:823 ../../include/nav.php:44
+#: ../../boot.php:645 ../../boot.php:651
 msgid "Login"
 msgstr "Acceder"
 
-#: ../../boot.php:821
+#: ../../boot.php:821 ../../boot.php:649
 msgid "Nickname/Email/OpenID: "
 msgstr "Apodo/Email/OpenID: "
 
-#: ../../boot.php:822
+#: ../../boot.php:822 ../../boot.php:650
 msgid "Password (if not OpenID): "
 msgstr "Contraseña (si no OpenID): "
 
-#: ../../boot.php:825
+#: ../../boot.php:825 ../../boot.php:653
 msgid "Forgot your password?"
 msgstr "¿Olvidó la contraseña?"
 
-#: ../../boot.php:826
+#: ../../boot.php:826 ../../mod/lostpass.php:82 ../../boot.php:654
 msgid "Password Reset"
 msgstr "Resetear la contraseña"
 
-#: ../../boot.php:837 ../../include/nav.php:38
+#: ../../boot.php:837 ../../include/nav.php:38 ../../include/nav.php:41
+#: ../../boot.php:667
 msgid "Logout"
 msgstr "Salir"
 
-#: ../../boot.php:1077
+#: ../../boot.php:1077 ../../include/text.php:229
 msgid "prev"
 msgstr "ant"
 
-#: ../../boot.php:1079
+#: ../../boot.php:1079 ../../include/text.php:231
 msgid "first"
 msgstr "primera"
 
-#: ../../boot.php:1108
+#: ../../boot.php:1108 ../../include/text.php:260
 msgid "last"
 msgstr "última"
 
-#: ../../boot.php:1111
+#: ../../boot.php:1111 ../../include/text.php:263
 msgid "next"
 msgstr "sig"
 
-#: ../../boot.php:1831
+#: ../../boot.php:1831 ../../include/conversation.php:664
 #, php-format
 msgid "%s likes this."
 msgstr "A %s le gusta esto."
 
-#: ../../boot.php:1831
+#: ../../boot.php:1831 ../../include/conversation.php:664
 #, php-format
 msgid "%s doesn't like this."
 msgstr "A %s no le gusta esto."
 
-#: ../../boot.php:1835 ../../test.php:8
+#: ../../boot.php:1835 ../../test.php:8 ../../include/conversation.php:668
 #, php-format
 msgid "<span  %1$s>%2$d people</span> like this."
 msgstr "Le gusta a <span %1$s>%2$d personas</span>."
 
-#: ../../boot.php:1837
+#: ../../boot.php:1837 ../../include/conversation.php:670
 #, php-format
 msgid "<span  %1$s>%2$d people</span> don't like this."
 msgstr "No le gusta a <span %1$s>%2$d personas</span>."
 
-#: ../../boot.php:1843
+#: ../../boot.php:1843 ../../include/conversation.php:676
 msgid "and"
 msgstr "y"
 
-#: ../../boot.php:1846
+#: ../../boot.php:1846 ../../include/conversation.php:679
 #, php-format
 msgid ", and %d other people"
 msgstr ", y otras %d personas"
 
-#: ../../boot.php:1847
+#: ../../boot.php:1847 ../../include/conversation.php:680
 #, php-format
 msgid "%s like this."
 msgstr "Le gusta a %s."
 
-#: ../../boot.php:1847
+#: ../../boot.php:1847 ../../include/conversation.php:680
 #, php-format
 msgid "%s don't like this."
 msgstr "No le gusta a %s."
 
-#: ../../boot.php:2008
+#: ../../boot.php:2008 ../../include/text.php:542
 msgid "No contacts"
 msgstr "Nigún contacto"
 
 #: ../../boot.php:2016 ../../mod/contacts.php:303
 #: ../../include/acl_selectors.php:140 ../../include/acl_selectors.php:155
-#: ../../include/nav.php:111
+#: ../../include/nav.php:111 ../../mod/contacts.php:347
+#: ../../include/nav.php:110
 msgid "Contacts"
 msgstr "Contactos"
 
 #: ../../boot.php:2032 ../../mod/viewcontacts.php:17
+#: ../../mod/viewcontacts.php:25 ../../include/text.php:555
 msgid "View Contacts"
 msgstr "Ver contactos"
 
 #: ../../boot.php:2049 ../../mod/search.php:17 ../../include/nav.php:67
+#: ../../mod/search.php:26 ../../include/text.php:610 ../../include/nav.php:69
 msgid "Search"
 msgstr "Busca"
 
-#: ../../boot.php:2204 ../../mod/profile.php:8
+#: ../../boot.php:2204 ../../mod/profile.php:8 ../../mod/hcard.php:10
+#: ../../mod/profile.php:10 ../../boot.php:794
 msgid "No profile"
 msgstr "Nigún perfil"
 
-#: ../../boot.php:2261
+#: ../../boot.php:2261 ../../boot.php:858
 msgid "Connect"
 msgstr "Conecta"
 
-#: ../../boot.php:2271
+#: ../../boot.php:2271 ../../mod/events.php:328 ../../include/event.php:37
+#: ../../include/bb2diaspora.php:222 ../../boot.php:873
 msgid "Location:"
 msgstr "Ubicación:"
 
-#: ../../boot.php:2275
+#: ../../boot.php:2275 ../../boot.php:877
 msgid ", "
 msgstr ", "
 
-#: ../../boot.php:2283
+#: ../../boot.php:2283 ../../include/profile_advanced.php:23
+#: ../../boot.php:886
 msgid "Gender:"
 msgstr "Género:"
 
-#: ../../boot.php:2287
+#: ../../boot.php:2287 ../../boot.php:890
 msgid "Status:"
 msgstr "Estado:"
 
-#: ../../boot.php:2289
+#: ../../boot.php:2289 ../../include/profile_advanced.php:103
+#: ../../boot.php:892
 msgid "Homepage:"
 msgstr "Página web:"
 
-#: ../../boot.php:2380
+#: ../../boot.php:2380 ../../include/text.php:687
 msgid "Monday"
 msgstr "Lunes"
 
-#: ../../boot.php:2380
+#: ../../boot.php:2380 ../../include/text.php:687
 msgid "Tuesday"
 msgstr "Martes"
 
-#: ../../boot.php:2380
+#: ../../boot.php:2380 ../../include/text.php:687
 msgid "Wednesday"
 msgstr "Miércoles"
 
-#: ../../boot.php:2380
+#: ../../boot.php:2380 ../../include/text.php:687
 msgid "Thursday"
 msgstr "Jueves"
 
-#: ../../boot.php:2380
+#: ../../boot.php:2380 ../../include/text.php:687
 msgid "Friday"
 msgstr "Viernes"
 
-#: ../../boot.php:2380
+#: ../../boot.php:2380 ../../include/text.php:687
 msgid "Saturday"
 msgstr "Sábado"
 
-#: ../../boot.php:2380
+#: ../../boot.php:2380 ../../include/text.php:687
 msgid "Sunday"
 msgstr "Domingo"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "January"
 msgstr "Enero"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "February"
 msgstr "Febrero"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "March"
 msgstr "Marzo"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "April"
 msgstr "Abril"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "May"
 msgstr "Mayo"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "June"
 msgstr "Junio"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "July"
 msgstr "Julio"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "August"
 msgstr "Agosto"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "September"
 msgstr "Septiembre"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "October"
 msgstr "Octubre"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "November"
 msgstr "Noviembre"
 
-#: ../../boot.php:2384
+#: ../../boot.php:2384 ../../include/text.php:691
 msgid "December"
 msgstr "Diciembre"
 
-#: ../../boot.php:2413 ../../boot.php:2419
+#: ../../boot.php:2413 ../../boot.php:2419 ../../boot.php:1006
 msgid "Birthdays this week:"
 msgstr "Cumpleaños esta semana:"
 
-#: ../../boot.php:2414 ../../boot.php:2420
+#: ../../boot.php:2414 ../../boot.php:2420 ../../boot.php:1007
 msgid "(Adjusted for local time)"
 msgstr "(Convertido a la hora local)"
 
-#: ../../boot.php:2423 ../../boot.php:2431
+#: ../../boot.php:2423 ../../boot.php:2431 ../../boot.php:1018
 msgid "[today]"
 msgstr "[hoy]"
 
-#: ../../boot.php:2620 ../../boot.php:2628
+#: ../../boot.php:2620 ../../boot.php:2628 ../../mod/events.php:237
+#: ../../include/text.php:822
 msgid "link to source"
 msgstr "Enlace al original"
 
@@ -316,6 +339,27 @@ msgstr "Seleccione una identidad a gestionar:"
 #: ../../addon/facebook/facebook.php:151
 #: ../../addon/randplace/randplace.php:179 ../../mod/photos.php:801
 #: ../../mod/photos.php:858 ../../mod/photos.php:1066
+#: ../../mod/crepair.php:104 ../../mod/fsuggest.php:107
+#: ../../mod/events.php:333 ../../mod/photos.php:878 ../../mod/photos.php:935
+#: ../../mod/photos.php:1145 ../../mod/photos.php:1185
+#: ../../mod/photos.php:1224 ../../mod/photos.php:1255
+#: ../../mod/install.php:137 ../../mod/localtime.php:40
+#: ../../mod/contacts.php:289 ../../mod/settings.php:482
+#: ../../mod/group.php:84 ../../mod/group.php:167 ../../mod/admin.php:300
+#: ../../mod/admin.php:464 ../../mod/admin.php:590 ../../mod/admin.php:655
+#: ../../mod/profiles.php:372 ../../mod/invite.php:106
+#: ../../addon/facebook/facebook.php:371
+#: ../../addon/randplace/randplace.php:178
+#: ../../addon/impressum/impressum.php:69 ../../addon/oembed/oembed.php:41
+#: ../../addon/statusnet/statusnet.php:274
+#: ../../addon/statusnet/statusnet.php:288
+#: ../../addon/statusnet/statusnet.php:314
+#: ../../addon/statusnet/statusnet.php:321
+#: ../../addon/statusnet/statusnet.php:343
+#: ../../addon/statusnet/statusnet.php:471 ../../addon/wppost/wppost.php:93
+#: ../../addon/piwik/piwik.php:81 ../../addon/twitter/twitter.php:171
+#: ../../addon/twitter/twitter.php:194 ../../addon/twitter/twitter.php:280
+#: ../../include/conversation.php:410
 msgid "Submit"
 msgstr "Envia"
 
@@ -325,18 +369,21 @@ msgid "Image exceeds size limit of %d"
 msgstr "El tamaño de la imagen supera el límite de %d"
 
 #: ../../mod/wall_upload.php:65 ../../mod/profile_photo.php:118
-#: ../../mod/photos.php:570 ../../mod/photos.php:571
+#: ../../mod/photos.php:570 ../../mod/photos.php:571 ../../mod/photos.php:631
 msgid "Unable to process image."
 msgstr "Imposible procesar la imagen."
 
 #: ../../mod/wall_upload.php:79 ../../mod/wall_upload.php:88
 #: ../../mod/wall_upload.php:95 ../../mod/item.php:184
-#: ../../mod/message.php:93 ../../mod/item.php:212
+#: ../../mod/message.php:93 ../../mod/item.php:212 ../../mod/item.php:298
+#: ../../mod/wall_upload.php:81 ../../mod/wall_upload.php:90
+#: ../../mod/wall_upload.php:97 ../../include/message.php:82
 msgid "Wall Photos"
 msgstr "Foto del Muro"
 
 #: ../../mod/wall_upload.php:82 ../../mod/profile_photo.php:230
-#: ../../mod/photos.php:588 ../../mod/photos.php:589
+#: ../../mod/photos.php:588 ../../mod/photos.php:589 ../../mod/photos.php:651
+#: ../../mod/profile_photo.php:241 ../../mod/wall_upload.php:84
 msgid "Image upload failed."
 msgstr "Subida de imagen fallida."
 
@@ -346,19 +393,29 @@ msgstr "Subida de imagen fallida."
 #: ../../mod/lostpass.php:39 ../../mod/item.php:423
 #: ../../mod/dfrn_confirm.php:649 ../../include/items.php:1350
 #: ../../mod/dfrn_notify.php:475 ../../mod/item.php:475 ../../mod/item.php:498
-#: ../../include/items.php:1373
+#: ../../include/items.php:1373 ../../mod/dfrn_request.php:549
+#: ../../mod/lostpass.php:44 ../../mod/lostpass.php:106
+#: ../../mod/register.php:369 ../../mod/register.php:423
+#: ../../mod/regmod.php:54 ../../mod/dfrn_notify.php:294
+#: ../../mod/dfrn_notify.php:552 ../../mod/dfrn_confirm.php:702
+#: ../../include/items.php:1586
 msgid "Administrator"
 msgstr "Administrador"
 
-#: ../../mod/dfrn_notify.php:179
+#: ../../mod/dfrn_notify.php:179 ../../mod/item.php:637 ../../mod/item.php:682
+#: ../../mod/item.php:726 ../../mod/item.php:769 ../../mod/dfrn_notify.php:296
+#: ../../mod/dfrn_notify.php:506 ../../mod/dfrn_notify.php:553
+#: ../../mod/dfrn_notify.php:639 ../../mod/dfrn_notify.php:685
 msgid "noreply"
 msgstr "no-responder"
 
-#: ../../mod/dfrn_notify.php:237
+#: ../../mod/dfrn_notify.php:237 ../../mod/dfrn_notify.php:356
 msgid "New mail received at "
 msgstr "Nuevo correo recibido en "
 
 #: ../../mod/dfrn_notify.php:388 ../../mod/dfrn_notify.php:474
+#: ../../mod/item.php:684 ../../mod/dfrn_notify.php:555
+#: ../../mod/dfrn_notify.php:687
 #, php-format
 msgid "%s commented on an item at %s"
 msgstr "%s ha commentato un elemento en %s"
@@ -366,36 +423,44 @@ msgstr "%s ha commentato un elemento en %s"
 #: ../../mod/profile.php:151 ../../mod/network.php:91
 #: ../../mod/profile.php:156 ../../mod/profile.php:317
 #: ../../mod/photos.php:1086 ../../mod/display.php:158
-#: ../../mod/network.php:370
+#: ../../mod/network.php:370 ../../mod/photos.php:1165
+#: ../../include/conversation.php:393 ../../include/conversation.php:747
 msgid "Share"
 msgstr "Compartir"
 
 #: ../../mod/profile.php:152 ../../mod/network.php:92
 #: ../../mod/message.php:185 ../../mod/message.php:319
 #: ../../mod/profile.php:157 ../../mod/editpost.php:63
+#: ../../mod/editpost.php:91 ../../mod/message.php:114
+#: ../../mod/message.php:248 ../../include/conversation.php:748
 msgid "Upload photo"
 msgstr "Subir foto"
 
 #: ../../mod/profile.php:153 ../../mod/network.php:93
 #: ../../mod/message.php:186 ../../mod/message.php:320
 #: ../../mod/profile.php:158 ../../mod/editpost.php:64
+#: ../../mod/editpost.php:93 ../../mod/message.php:115
+#: ../../mod/message.php:249 ../../include/conversation.php:750
 msgid "Insert web link"
 msgstr "Insertar enlace web"
 
 #: ../../mod/profile.php:154 ../../mod/network.php:94
 #: ../../mod/profile.php:159 ../../mod/editpost.php:65
+#: ../../mod/editpost.php:94 ../../include/conversation.php:751
 msgid "Insert YouTube video"
 msgstr "Insertar video de YouTube"
 
 #: ../../mod/profile.php:155 ../../mod/network.php:95
 #: ../../mod/profile.php:162 ../../mod/editpost.php:68
-#: ../../mod/network.php:97
+#: ../../mod/network.php:97 ../../mod/editpost.php:97
+#: ../../include/conversation.php:754
 msgid "Set your location"
 msgstr "Configura la tu ubicación"
 
 #: ../../mod/profile.php:156 ../../mod/network.php:96
 #: ../../mod/profile.php:163 ../../mod/editpost.php:69
-#: ../../mod/network.php:98
+#: ../../mod/network.php:98 ../../mod/editpost.php:98
+#: ../../include/conversation.php:755
 msgid "Clear browser location"
 msgstr "Borrar la ubicación del navegador"
 
@@ -406,46 +471,55 @@ msgstr "Borrar la ubicación del navegador"
 #: ../../mod/profile.php:164 ../../mod/profile.php:318
 #: ../../mod/photos.php:1087 ../../mod/display.php:159
 #: ../../mod/editpost.php:70 ../../mod/network.php:99
-#: ../../mod/network.php:371
+#: ../../mod/network.php:371 ../../mod/photos.php:1166
+#: ../../mod/editpost.php:99 ../../mod/message.php:116
+#: ../../mod/message.php:250 ../../include/conversation.php:394
+#: ../../include/conversation.php:757
 msgid "Please wait"
 msgstr "Por favor, espere"
 
 #: ../../mod/profile.php:158 ../../mod/network.php:98
 #: ../../mod/profile.php:165 ../../mod/editpost.php:71
-#: ../../mod/network.php:100
+#: ../../mod/network.php:100 ../../mod/editpost.php:100
+#: ../../include/conversation.php:758
 msgid "Permission settings"
 msgstr "Configuración de permisos"
 
 #: ../../mod/profile.php:165 ../../mod/network.php:104
 #: ../../mod/profile.php:172 ../../mod/editpost.php:77
-#: ../../mod/network.php:106
+#: ../../mod/network.php:106 ../../mod/editpost.php:108
+#: ../../include/conversation.php:766
 msgid "CC: email addresses"
 msgstr "CC: dirección email"
 
 #: ../../mod/profile.php:167 ../../mod/network.php:106
 #: ../../mod/profile.php:174 ../../mod/editpost.php:79
-#: ../../mod/network.php:108
+#: ../../mod/network.php:108 ../../mod/editpost.php:111
+#: ../../include/conversation.php:769
 msgid "Example: bob@example.com, mary@example.com"
 msgstr "Ejemplo: juan@ejemplo.com, sofia@ejemplo.com"
 
 #: ../../mod/profile.php:300 ../../mod/photos.php:935
 #: ../../mod/display.php:149 ../../mod/network.php:321
 #: ../../mod/profile.php:308 ../../mod/photos.php:962
-#: ../../mod/network.php:324
+#: ../../mod/network.php:324 ../../mod/photos.php:1041
+#: ../../include/conversation.php:343
 msgid "Private Message"
 msgstr "Mensaje privado"
 
 #: ../../mod/profile.php:307 ../../mod/photos.php:1050
 #: ../../mod/display.php:156 ../../mod/network.php:365
 #: ../../mod/profile.php:315 ../../mod/photos.php:1084
-#: ../../mod/network.php:368
+#: ../../mod/network.php:368 ../../mod/photos.php:1163
+#: ../../include/conversation.php:391
 msgid "I like this (toggle)"
 msgstr "Me gusta esto (cambiar)"
 
 #: ../../mod/profile.php:308 ../../mod/photos.php:1051
 #: ../../mod/display.php:157 ../../mod/network.php:366
 #: ../../mod/profile.php:316 ../../mod/photos.php:1085
-#: ../../mod/network.php:369
+#: ../../mod/network.php:369 ../../mod/photos.php:1164
+#: ../../include/conversation.php:392
 msgid "I don't like this (toggle)"
 msgstr "No me gusta questo (cambiar)"
 
@@ -455,6 +529,8 @@ msgstr "No me gusta questo (cambiar)"
 #: ../../mod/profile.php:330 ../../mod/photos.php:1106
 #: ../../mod/photos.php:1146 ../../mod/photos.php:1175
 #: ../../mod/display.php:171 ../../mod/network.php:384
+#: ../../mod/photos.php:1182 ../../mod/photos.php:1221
+#: ../../mod/photos.php:1252 ../../include/conversation.php:407
 msgid "This is you"
 msgstr "Éste/a eres tú"
 
@@ -462,6 +538,8 @@ msgstr "Éste/a eres tú"
 #: ../../mod/display.php:234 ../../mod/network.php:386 ../../mod/group.php:137
 #: ../../mod/profile.php:376 ../../mod/photos.php:1203
 #: ../../mod/display.php:238 ../../mod/network.php:393
+#: ../../mod/photos.php:1282 ../../mod/group.php:154 ../../mod/admin.php:471
+#: ../../include/conversation.php:428
 msgid "Delete"
 msgstr "Eliminar"
 
@@ -477,6 +555,7 @@ msgstr "Ver el perfil de $name"
 #: ../../mod/register.php:422 ../../mod/network.php:471
 #: ../../mod/profile.php:430 ../../mod/display.php:317
 #: ../../mod/register.php:424 ../../mod/network.php:479
+#: ../../mod/community.php:83 ../../include/text.php:915
 msgid ""
 "Shared content is covered by the <a href=\"http://creativecommons.org/"
 "licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."
@@ -485,12 +564,12 @@ msgstr ""
 "creativecommons.org/licenses/by/3.0/deed.it\">Creative Commons Atribución "
 "3.0</a>."
 
-#: ../../mod/follow.php:167
+#: ../../mod/follow.php:167 ../../mod/follow.php:48
 msgid "The profile address specified does not provide adequate information."
 msgstr ""
 "La dirección del perfil especificado no proporciona información adecuada."
 
-#: ../../mod/follow.php:173
+#: ../../mod/follow.php:173 ../../mod/follow.php:66
 msgid ""
 "Limited profile. This person will be unable to receive direct/personal "
 "notifications from you."
@@ -498,11 +577,11 @@ msgstr ""
 "Perfil limitado. Esta persona no podrá recibir notificaciones directas/"
 "personales de usted."
 
-#: ../../mod/follow.php:224
+#: ../../mod/follow.php:224 ../../mod/follow.php:130
 msgid "Unable to retrieve contact information."
 msgstr "No ha sido posible recibir la información del contacto."
 
-#: ../../mod/follow.php:270
+#: ../../mod/follow.php:270 ../../mod/follow.php:176
 msgid "following"
 msgstr "siguiendo"
 
@@ -517,11 +596,17 @@ msgstr "Imagen recibida, pero ha fallado al recortarla."
 #: ../../mod/photos.php:864 ../../mod/register.php:267
 #: ../../mod/register.php:274 ../../mod/register.php:281
 #: ../../mod/photos.php:531 ../../mod/photos.php:850 ../../mod/photos.php:865
+#: ../../mod/photos.php:143 ../../mod/photos.php:578 ../../mod/photos.php:927
+#: ../../mod/photos.php:942 ../../mod/register.php:316
+#: ../../mod/register.php:323 ../../mod/register.php:330
+#: ../../mod/profile_photo.php:160 ../../mod/profile_photo.php:236
+#: ../../mod/profile_photo.php:245
 msgid "Profile Photos"
 msgstr "Foto del perfil"
 
 #: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68
 #: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:237
+#: ../../mod/profile_photo.php:248
 #, php-format
 msgid "Image size reduction [%s] failed."
 msgstr "Ha fallado la reducción de las dimensiones de la imagen [%s]."
@@ -530,7 +615,7 @@ msgstr "Ha fallado la reducción de las dimensiones de la imagen [%s]."
 msgid "Unable to process image"
 msgstr "Imposible procesar la imagen"
 
-#: ../../mod/profile_photo.php:228
+#: ../../mod/profile_photo.php:228 ../../mod/profile_photo.php:239
 msgid "Image uploaded successfully."
 msgstr "Imagen subida con éxito."
 
@@ -539,27 +624,29 @@ msgstr "Imagen subida con éxito."
 msgid "Welcome to %s"
 msgstr "Bienvenido a %s"
 
-#: ../../mod/regmod.php:10
+#: ../../mod/regmod.php:10 ../../mod/regmod.php:105
 msgid "Please login."
 msgstr "Accede."
 
-#: ../../mod/regmod.php:54
+#: ../../mod/regmod.php:54 ../../mod/regmod.php:93
 #, php-format
 msgid "Registration revoked for %s"
 msgstr "Registro anulado para %s"
 
 #: ../../mod/regmod.php:92 ../../mod/register.php:310
+#: ../../mod/register.php:367 ../../mod/regmod.php:52
 #, php-format
 msgid "Registration details for %s"
 msgstr "Detalles de registro para %s"
 
-#: ../../mod/regmod.php:96
+#: ../../mod/regmod.php:96 ../../mod/regmod.php:61
 msgid "Account approved."
 msgstr "Cuenta aprobada."
 
 #: ../../mod/profiles.php:21 ../../mod/profiles.php:234
 #: ../../mod/profiles.php:339 ../../mod/dfrn_confirm.php:62
 #: ../../mod/profiles.php:237 ../../mod/profiles.php:342
+#: ../../mod/profiles.php:236 ../../mod/profiles.php:341
 msgid "Profile not found."
 msgstr "Perfil no encontrado."
 
@@ -568,28 +655,34 @@ msgid "Profile Name is required."
 msgstr "El nombre de perfil es requerido."
 
 #: ../../mod/profiles.php:196 ../../mod/profiles.php:199
+#: ../../mod/profiles.php:198
 msgid "Profile updated."
 msgstr "Perfil actualizado."
 
 #: ../../mod/profiles.php:251 ../../mod/profiles.php:254
+#: ../../mod/profiles.php:253
 msgid "Profile deleted."
 msgstr "Perfil eliminado."
 
 #: ../../mod/profiles.php:267 ../../mod/profiles.php:298
 #: ../../mod/profiles.php:270 ../../mod/profiles.php:301
+#: ../../mod/profiles.php:269 ../../mod/profiles.php:300
 msgid "Profile-"
 msgstr "Perfil-"
 
 #: ../../mod/profiles.php:286 ../../mod/profiles.php:325
 #: ../../mod/profiles.php:289 ../../mod/profiles.php:328
+#: ../../mod/profiles.php:288 ../../mod/profiles.php:327
 msgid "New profile created."
 msgstr "Nuevo perfil creado."
 
 #: ../../mod/profiles.php:304 ../../mod/profiles.php:307
+#: ../../mod/profiles.php:306
 msgid "Profile unavailable to clone."
 msgstr "Imposible duplicar el perfil."
 
 #: ../../mod/profiles.php:367 ../../mod/profiles.php:370
+#: ../../mod/profiles.php:413
 msgid ""
 "This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
 "be visible to anybody using the internet."
@@ -598,60 +691,72 @@ msgstr ""
 "visto por cualquiera usando internet."
 
 #: ../../mod/profiles.php:377 ../../mod/profiles.php:380
+#: ../../mod/profiles.php:423 ../../mod/directory.php:112
 msgid "Age: "
 msgstr "Edad : "
 
 #: ../../mod/profiles.php:418 ../../mod/profiles.php:422
+#: ../../mod/profiles.php:470
 msgid "Profile Image"
 msgstr "Imagen del Perfil"
 
-#: ../../mod/settings.php:37
+#: ../../mod/settings.php:37 ../../mod/settings.php:64
 msgid "Passwords do not match. Password unchanged."
 msgstr "Las contraseñas no coinciden. La contraseña no ha sido modificada."
 
-#: ../../mod/settings.php:42
+#: ../../mod/settings.php:42 ../../mod/settings.php:69
 msgid "Empty passwords are not allowed. Password unchanged."
 msgstr ""
 "No se permiten contraseñas vacías. La contraseña no ha sido modificada."
 
-#: ../../mod/settings.php:53
+#: ../../mod/settings.php:53 ../../mod/settings.php:80
 msgid "Password changed."
 msgstr "Contraseña modificada."
 
-#: ../../mod/settings.php:55
+#: ../../mod/settings.php:55 ../../mod/settings.php:82
 msgid "Password update failed. Please try again."
 msgstr ""
 "La actualización de la contraseña ha fallado. Por favor, pruebe otra vez."
 
 #: ../../mod/settings.php:95 ../../mod/settings.php:96
+#: ../../mod/settings.php:188
 msgid " Please use a shorter name."
 msgstr " Usa un nombre más corto."
 
 #: ../../mod/settings.php:97 ../../mod/settings.php:98
+#: ../../mod/settings.php:190
 msgid " Name too short."
 msgstr " Nombre demasiado corto."
 
 #: ../../mod/settings.php:103 ../../mod/settings.php:104
+#: ../../mod/settings.php:196
 msgid " Not valid email."
 msgstr " Email no válido."
 
 #: ../../mod/settings.php:105 ../../mod/settings.php:106
+#: ../../mod/settings.php:198
 msgid " Cannot change to that email."
 msgstr " No se puede usar ese email."
 
 #: ../../mod/settings.php:161 ../../mod/settings.php:163
+#: ../../mod/settings.php:257 ../../addon/facebook/facebook.php:303
+#: ../../addon/impressum/impressum.php:64 ../../addon/piwik/piwik.php:94
+#: ../../addon/twitter/twitter.php:275
 msgid "Settings updated."
 msgstr "Configuración actualizada."
 
 #: ../../mod/settings.php:211 ../../mod/settings.php:213
+#: ../../mod/settings.php:329 ../../addon/widgets/widgets.php:122
 msgid "Plugin Settings"
 msgstr "Configuración de los Plugin"
 
 #: ../../mod/settings.php:212 ../../mod/settings.php:214
+#: ../../mod/settings.php:480
 msgid "Account Settings"
 msgstr "Configuración de la cuenta"
 
 #: ../../mod/settings.php:218 ../../mod/settings.php:220
+#: ../../mod/settings.php:322
 msgid "No Plugin settings configured"
 msgstr "Ningún Plugin ha sido configurado"
 
@@ -664,19 +769,21 @@ msgid "&nbsp;(Optional) Allow this OpenID to login to this account."
 msgstr "&nbsp;(Opcional) Permitir a este OpenID acceder a esta cuenta."
 
 #: ../../mod/settings.php:295 ../../mod/settings.php:298
+#: ../../mod/settings.php:442
 msgid "Profile is <strong>not published</strong>."
 msgstr "El perfil <strong>no está publicado</strong>."
 
 #: ../../mod/settings.php:352 ../../mod/settings.php:355
+#: ../../mod/settings.php:509
 msgid "Default Post Permissions"
 msgstr "Permisos por defecto para los mensajes"
 
 #: ../../mod/search.php:131 ../../mod/network.php:287
-#: ../../mod/network.php:290
+#: ../../mod/network.php:290 ../../include/conversation.php:231
 msgid "View in context"
 msgstr "Ver en el contexto"
 
-#: ../../mod/photos.php:30
+#: ../../mod/photos.php:30 ../../mod/photos.php:37
 msgid "Photo Albums"
 msgstr "Álbum de Fotos"
 
@@ -689,129 +796,150 @@ msgstr "Álbum de Fotos"
 #: ../../mod/photos.php:850 ../../mod/photos.php:865 ../../mod/photos.php:1233
 #: ../../mod/photos.php:1244 ../../include/items.php:982
 #: ../../include/items.php:985 ../../include/items.php:988
+#: ../../mod/photos.php:45 ../../mod/photos.php:143 ../../mod/photos.php:858
+#: ../../mod/photos.php:927 ../../mod/photos.php:942 ../../mod/photos.php:1333
+#: ../../mod/photos.php:1345
 msgid "Contact Photos"
 msgstr "Foto del contacto"
 
-#: ../../mod/photos.php:95
+#: ../../mod/photos.php:95 ../../mod/photos.php:132
 msgid "Contact information unavailable"
 msgstr "Información del contacto no disponible"
 
-#: ../../mod/photos.php:116
+#: ../../mod/photos.php:116 ../../mod/photos.php:153
 msgid "Album not found."
 msgstr "Album no encontrado."
 
 #: ../../mod/photos.php:134 ../../mod/photos.php:858 ../../mod/photos.php:859
+#: ../../mod/photos.php:171 ../../mod/photos.php:936
 msgid "Delete Album"
 msgstr "Eliminar album"
 
 #: ../../mod/photos.php:197 ../../mod/photos.php:1033
-#: ../../mod/photos.php:1067
+#: ../../mod/photos.php:1067 ../../mod/photos.php:234
+#: ../../mod/photos.php:1146
 msgid "Delete Photo"
 msgstr "Eliminar foto"
 
-#: ../../mod/photos.php:468 ../../mod/photos.php:469
+#: ../../mod/photos.php:468 ../../mod/photos.php:469 ../../mod/photos.php:509
 msgid "was tagged in a"
 msgstr "ha sido etiquetado en"
 
 #: ../../mod/photos.php:468 ../../mod/like.php:110 ../../mod/photos.php:469
+#: ../../mod/photos.php:509 ../../mod/like.php:106
+#: ../../include/diaspora.php:770 ../../include/conversation.php:31
 msgid "photo"
 msgstr "foto"
 
-#: ../../mod/photos.php:468 ../../mod/photos.php:469
+#: ../../mod/photos.php:468 ../../mod/photos.php:469 ../../mod/photos.php:509
 msgid "by"
 msgstr "por"
 
 #: ../../mod/photos.php:558 ../../addon/js_upload/js_upload.php:306
-#: ../../mod/photos.php:559
+#: ../../mod/photos.php:559 ../../mod/photos.php:609
+#: ../../addon/js_upload/js_upload.php:310
 msgid "Image exceeds size limit of "
 msgstr "La imagen supera el limite de tamaño de "
 
-#: ../../mod/photos.php:660 ../../mod/photos.php:661
+#: ../../mod/photos.php:660 ../../mod/photos.php:661 ../../mod/photos.php:744
 msgid "No photos selected"
 msgstr "Ninguna foto seleccionada"
 
-#: ../../mod/photos.php:807 ../../mod/photos.php:808
+#: ../../mod/photos.php:807 ../../mod/photos.php:808 ../../mod/photos.php:885
 msgid "Upload Photos"
 msgstr "Subir fotos"
 
 #: ../../mod/photos.php:810 ../../mod/photos.php:853 ../../mod/photos.php:811
-#: ../../mod/photos.php:854
+#: ../../mod/photos.php:854 ../../mod/photos.php:888 ../../mod/photos.php:931
 msgid "New album name: "
 msgstr "Nombre del nuevo álbum: "
 
-#: ../../mod/photos.php:811 ../../mod/photos.php:812
+#: ../../mod/photos.php:811 ../../mod/photos.php:812 ../../mod/photos.php:889
 msgid "or existing album name: "
 msgstr "o nombre de un álbum existente: "
 
 #: ../../mod/photos.php:813 ../../mod/photos.php:1028 ../../mod/photos.php:814
-#: ../../mod/photos.php:1062
+#: ../../mod/photos.php:1062 ../../mod/photos.php:891
+#: ../../mod/photos.php:1141
 msgid "Permissions"
 msgstr "Permisos"
 
-#: ../../mod/photos.php:868 ../../mod/photos.php:869
+#: ../../mod/photos.php:868 ../../mod/photos.php:869 ../../mod/photos.php:946
 msgid "Edit Album"
 msgstr "Modifica álbum"
 
 #: ../../mod/photos.php:878 ../../mod/photos.php:1228 ../../mod/photos.php:879
-#: ../../mod/photos.php:1263
+#: ../../mod/photos.php:1263 ../../mod/photos.php:956
+#: ../../mod/photos.php:1363
 msgid "View Photo"
 msgstr "Ver foto"
 
-#: ../../mod/photos.php:908 ../../mod/photos.php:909
+#: ../../mod/photos.php:908 ../../mod/photos.php:909 ../../mod/photos.php:985
 msgid "Photo not available"
 msgstr "Foto no disponible"
 
-#: ../../mod/photos.php:929 ../../mod/photos.php:956
+#: ../../mod/photos.php:929 ../../mod/photos.php:956 ../../mod/photos.php:1034
 msgid "Edit photo"
 msgstr "Modificar foto"
 
-#: ../../mod/photos.php:931 ../../mod/photos.php:958
+#: ../../mod/photos.php:931 ../../mod/photos.php:958 ../../mod/photos.php:1035
 msgid "Use as profile photo"
 msgstr "Usar como foto del perfil"
 
-#: ../../mod/photos.php:944 ../../mod/photos.php:973
+#: ../../mod/photos.php:944 ../../mod/photos.php:973 ../../mod/photos.php:1052
 msgid "View Full Size"
 msgstr "Ver a tamaño completo"
 
 #: ../../mod/photos.php:1002 ../../mod/photos.php:1036
+#: ../../mod/photos.php:1120
 msgid "Tags: "
 msgstr "Etiquetas: "
 
 #: ../../mod/photos.php:1012 ../../mod/photos.php:1046
+#: ../../mod/photos.php:1123
 msgid "[Remove any tag]"
 msgstr "[Borrar todas las etiquetas]"
 
 #: ../../mod/photos.php:1021 ../../mod/photos.php:1055
+#: ../../mod/photos.php:1134
 msgid "New album name"
 msgstr "Nuevo nombre de álbum"
 
 #: ../../mod/photos.php:1024 ../../mod/photos.php:1058
+#: ../../mod/photos.php:1137
 msgid "Caption"
 msgstr "Título"
 
 #: ../../mod/photos.php:1026 ../../mod/photos.php:1060
+#: ../../mod/photos.php:1139
 msgid "Add a Tag"
 msgstr "Añadir una etiqueta"
 
 #: ../../mod/photos.php:1030 ../../mod/photos.php:1064
+#: ../../mod/photos.php:1143
 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
 msgstr ""
 "Ejemplo: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
 
 #: ../../mod/photos.php:1214 ../../mod/photos.php:1249
+#: ../../mod/photos.php:1350
 msgid "Recent Photos"
 msgstr "Fotos recientes"
 
 #: ../../mod/photos.php:1218 ../../mod/photos.php:1253
+#: ../../mod/photos.php:1354
 msgid "Upload New Photos"
 msgstr "Subir nuevas fotos"
 
 #: ../../mod/photos.php:1234 ../../mod/photos.php:1269
+#: ../../mod/photos.php:1367
 msgid "View Album"
 msgstr "Ver álbum"
 
 #: ../../mod/display.php:15 ../../mod/display.php:307 ../../mod/item.php:546
-#: ../../mod/display.php:312 ../../mod/item.php:598
+#: ../../mod/display.php:312 ../../mod/item.php:598 ../../mod/admin.php:118
+#: ../../mod/admin.php:505 ../../mod/display.php:25 ../../mod/display.php:112
+#: ../../include/items.php:1911
 msgid "Item not found."
 msgstr "Elemento no encontrado."
 
@@ -822,158 +950,171 @@ msgstr "Ver el perfil de $owner_name"
 
 #: ../../mod/display.php:260 ../../mod/network.php:436
 #: ../../mod/display.php:264 ../../mod/network.php:443
+#: ../../include/conversation.php:491
 msgid "to"
 msgstr "a"
 
 #: ../../mod/display.php:261 ../../mod/network.php:437
 #: ../../mod/display.php:265 ../../mod/network.php:444
+#: ../../include/conversation.php:492
 msgid "Wall-to-Wall"
 msgstr "Muro-A-Muro"
 
 #: ../../mod/display.php:262 ../../mod/network.php:438
 #: ../../mod/display.php:266 ../../mod/network.php:445
+#: ../../include/conversation.php:493
 msgid "via Wall-To-Wall:"
 msgstr "via Muro-A-Muro:"
 
 #: ../../mod/display.php:300 ../../mod/display.php:305
+#: ../../mod/display.php:105
 msgid "Item has been removed."
 msgstr "El elemento ha sido eliminado."
 
-#: ../../mod/invite.php:28
+#: ../../mod/invite.php:28 ../../mod/invite.php:35
 #, php-format
 msgid "%s : Not a valid email address."
 msgstr "%s: No es una dirección válida de email."
 
-#: ../../mod/invite.php:32
+#: ../../mod/invite.php:32 ../../mod/invite.php:59
 #, php-format
 msgid "Please join my network on %s"
 msgstr "Por favor únete a mi red social en %s"
 
-#: ../../mod/invite.php:38
+#: ../../mod/invite.php:38 ../../mod/invite.php:69
 #, php-format
 msgid "%s : Message delivery failed."
 msgstr "%s: Ha fallado la entrega del mensaje."
 
-#: ../../mod/invite.php:42
+#: ../../mod/invite.php:42 ../../mod/invite.php:73
 #, php-format
 msgid "%d message sent."
 msgid_plural "%d messages sent."
 msgstr[0] "%d mensaje enviado."
 msgstr[1] "%d mensajes enviados."
 
-#: ../../mod/invite.php:57
+#: ../../mod/invite.php:57 ../../mod/invite.php:99
 msgid "Send invitations"
 msgstr "Enviar invitaciones"
 
-#: ../../mod/invite.php:58
+#: ../../mod/invite.php:58 ../../mod/invite.php:100
 msgid "Enter email addresses, one per line:"
 msgstr "Introduce las direcciones de email, una por línea:"
 
 #: ../../mod/invite.php:59 ../../mod/message.php:182 ../../mod/message.php:316
+#: ../../mod/message.php:111 ../../mod/message.php:245
+#: ../../mod/invite.php:101
 msgid "Your message:"
 msgstr "Tu mensaje:"
 
-#: ../../mod/invite.php:60
+#: ../../mod/invite.php:60 ../../mod/invite.php:102
 #, php-format
 msgid "Please join my social network on %s"
 msgstr "Únete a mi red social en % s"
 
-#: ../../mod/invite.php:61
+#: ../../mod/invite.php:61 ../../mod/invite.php:103
 msgid "To accept this invitation, please visit:"
 msgstr "Para aceptar esta invitación, por favor visita:"
 
-#: ../../mod/invite.php:62
+#: ../../mod/invite.php:62 ../../mod/invite.php:104
 msgid ""
 "Once you have registered, please connect with me via my profile page at:"
 msgstr ""
 "Una vez registrado, por favor contacta conmigo a través de mi página de "
 "perfil en:"
 
-#: ../../mod/contacts.php:12
+#: ../../mod/contacts.php:12 ../../mod/contacts.php:26
 msgid "Invite Friends"
 msgstr "Invitar amigos"
 
-#: ../../mod/contacts.php:16
+#: ../../mod/contacts.php:16 ../../mod/contacts.php:45
 msgid "Connect/Follow"
 msgstr "Conectar/Seguir"
 
-#: ../../mod/contacts.php:17
+#: ../../mod/contacts.php:17 ../../mod/contacts.php:46
 msgid "Example: bob@example.com, http://example.com/barbara"
 msgstr "Ejemplo: bob@ejemplo.com, http://ejemplo.com/barbara"
 
-#: ../../mod/contacts.php:18
+#: ../../mod/contacts.php:18 ../../mod/contacts.php:47
 msgid "Follow"
 msgstr "Seguir"
 
 #: ../../mod/contacts.php:38 ../../mod/contacts.php:119
+#: ../../mod/contacts.php:69 ../../mod/contacts.php:140
 msgid "Could not access contact record."
 msgstr "No se pudo acceder a los datos del contacto."
 
-#: ../../mod/contacts.php:52
+#: ../../mod/contacts.php:52 ../../mod/contacts.php:83
 msgid "Could not locate selected profile."
 msgstr "No se pudo encontrar el perfil seleccionado."
 
-#: ../../mod/contacts.php:83
+#: ../../mod/contacts.php:83 ../../mod/contacts.php:104
 msgid "Contact updated."
 msgstr "Contacto actualizado."
 
 #: ../../mod/contacts.php:85 ../../mod/dfrn_request.php:402
+#: ../../mod/dfrn_request.php:405 ../../mod/contacts.php:106
 msgid "Failed to update contact record."
 msgstr "Error al actualizar el contacto."
 
-#: ../../mod/contacts.php:141
+#: ../../mod/contacts.php:141 ../../mod/contacts.php:162
 msgid "Contact has been blocked"
 msgstr "El contacto ha sido bloqueado"
 
-#: ../../mod/contacts.php:141
+#: ../../mod/contacts.php:141 ../../mod/contacts.php:162
 msgid "Contact has been unblocked"
 msgstr "El contacto ha sido desbloqueado"
 
-#: ../../mod/contacts.php:155
+#: ../../mod/contacts.php:155 ../../mod/contacts.php:176
 msgid "Contact has been ignored"
 msgstr "El contacto ha sido ignorado"
 
-#: ../../mod/contacts.php:155
+#: ../../mod/contacts.php:155 ../../mod/contacts.php:176
 msgid "Contact has been unignored"
 msgstr "El contacto es no ignorado"
 
-#: ../../mod/contacts.php:176
+#: ../../mod/contacts.php:176 ../../mod/contacts.php:197
 msgid "stopped following"
 msgstr "dejó de seguir"
 
-#: ../../mod/contacts.php:195
+#: ../../mod/contacts.php:195 ../../mod/contacts.php:218
 msgid "Contact has been removed."
 msgstr "El contacto ha sido eliminado"
 
 #: ../../mod/contacts.php:209 ../../mod/dfrn_confirm.php:114
+#: ../../mod/crepair.php:70 ../../mod/fsuggest.php:20
+#: ../../mod/fsuggest.php:92 ../../mod/contacts.php:232
 msgid "Contact not found."
 msgstr "Contacto no encontrado."
 
 #: ../../mod/contacts.php:223 ../../mod/contacts.php:344
+#: ../../mod/contacts.php:246 ../../mod/contacts.php:388
 msgid "Mutual Friendship"
 msgstr "Amistad recíproca"
 
 #: ../../mod/contacts.php:227 ../../mod/contacts.php:348
+#: ../../mod/contacts.php:250 ../../mod/contacts.php:392
 msgid "is a fan of yours"
 msgstr "es tu fan"
 
 #: ../../mod/contacts.php:232 ../../mod/contacts.php:352
+#: ../../mod/contacts.php:255 ../../mod/contacts.php:396
 msgid "you are a fan of"
 msgstr "eres fan de"
 
-#: ../../mod/contacts.php:248
+#: ../../mod/contacts.php:248 ../../mod/contacts.php:274
 msgid "Never"
 msgstr "Nunca"
 
-#: ../../mod/contacts.php:252
+#: ../../mod/contacts.php:252 ../../mod/contacts.php:278
 msgid "(Update was successful)"
 msgstr "(La actualización se ha completado)"
 
-#: ../../mod/contacts.php:252
+#: ../../mod/contacts.php:252 ../../mod/contacts.php:278
 msgid "(Update was not successful)"
 msgstr "(La actualización no se ha completado)"
 
-#: ../../mod/contacts.php:255
+#: ../../mod/contacts.php:255 ../../mod/contacts.php:288
 msgid "Contact Editor"
 msgstr "Editor de contactos"
 
@@ -981,67 +1122,70 @@ msgstr "Editor de contactos"
 msgid "Visit $name's profile"
 msgstr "Visita el perfil de $name"
 
-#: ../../mod/contacts.php:257
+#: ../../mod/contacts.php:257 ../../mod/contacts.php:298
 msgid "Block/Unblock contact"
 msgstr "Boquear/Desbloquear contacto"
 
-#: ../../mod/contacts.php:258
+#: ../../mod/contacts.php:258 ../../mod/contacts.php:299
 msgid "Ignore contact"
 msgstr "Ignorar contacto"
 
-#: ../../mod/contacts.php:259
+#: ../../mod/contacts.php:259 ../../mod/contacts.php:304
 msgid "Delete contact"
 msgstr "Eliminar contacto"
 
-#: ../../mod/contacts.php:261
+#: ../../mod/contacts.php:261 ../../mod/contacts.php:308
 msgid "Last updated: "
 msgstr "Última actualización:"
 
-#: ../../mod/contacts.php:262
+#: ../../mod/contacts.php:262 ../../mod/contacts.php:309
 msgid "Update public posts: "
 msgstr "Actualizar mensajes públicos: "
 
-#: ../../mod/contacts.php:264
+#: ../../mod/contacts.php:264 ../../mod/contacts.php:311
+#: ../../mod/admin.php:704
 msgid "Update now"
 msgstr "Actualizar ahora"
 
-#: ../../mod/contacts.php:267
+#: ../../mod/contacts.php:267 ../../mod/contacts.php:314
 msgid "Unblock this contact"
 msgstr "Desbloquear a este contacto"
 
-#: ../../mod/contacts.php:267
+#: ../../mod/contacts.php:267 ../../mod/contacts.php:314
 msgid "Block this contact"
 msgstr "Bloquear a este contacto"
 
-#: ../../mod/contacts.php:268
+#: ../../mod/contacts.php:268 ../../mod/contacts.php:315
 msgid "Unignore this contact"
 msgstr "Eliminar de contactos ignorados"
 
-#: ../../mod/contacts.php:268
+#: ../../mod/contacts.php:268 ../../mod/contacts.php:315
 msgid "Ignore this contact"
 msgstr "Agregar a contactos ignorados"
 
-#: ../../mod/contacts.php:271
+#: ../../mod/contacts.php:271 ../../mod/contacts.php:318
 msgid "Currently blocked"
 msgstr "Bloqueados"
 
-#: ../../mod/contacts.php:272
+#: ../../mod/contacts.php:272 ../../mod/contacts.php:319
 msgid "Currently ignored"
 msgstr "Ignorados"
 
-#: ../../mod/contacts.php:305
+#: ../../mod/contacts.php:305 ../../mod/contacts.php:349
 msgid "Show Blocked Connections"
 msgstr "Mostrar conexiones bloqueadas"
 
-#: ../../mod/contacts.php:305
+#: ../../mod/contacts.php:305 ../../mod/contacts.php:349
 msgid "Hide Blocked Connections"
 msgstr "Esconder conexiones bloqueadas"
 
 #: ../../mod/contacts.php:307 ../../mod/directory.php:38
+#: ../../mod/contacts.php:351 ../../mod/directory.php:55
 msgid "Finding: "
 msgstr "Busco: "
 
-#: ../../mod/contacts.php:308
+#: ../../mod/contacts.php:308 ../../mod/contacts.php:352
+#: ../../mod/directory.php:57
 msgid "Find"
 msgstr "Encontrar"
 
@@ -1049,7 +1193,8 @@ msgstr "Encontrar"
 msgid "Visit $username's profile"
 msgstr "Visita el perfil de $username"
 
-#: ../../mod/contacts.php:369
+#: ../../mod/contacts.php:369 ../../mod/contacts.php:413
+#: ../../include/Contact.php:125 ../../include/conversation.php:613
 msgid "Edit contact"
 msgstr "Modificar contacto"
 
@@ -1061,19 +1206,19 @@ msgstr "Información sobre privacidad remota no disponible."
 msgid "Visible to:"
 msgstr "Visible a:"
 
-#: ../../mod/register.php:47
+#: ../../mod/register.php:47 ../../mod/register.php:66
 msgid "Invalid OpenID url"
 msgstr "Url OpenID no valido"
 
-#: ../../mod/register.php:62
+#: ../../mod/register.php:62 ../../mod/register.php:81
 msgid "Please enter the required information."
 msgstr "Por favor, introduzca la información necesaria."
 
-#: ../../mod/register.php:74
+#: ../../mod/register.php:74 ../../mod/register.php:95
 msgid "Please use a shorter name."
 msgstr "Por favor, use un nombre más corto."
 
-#: ../../mod/register.php:76
+#: ../../mod/register.php:76 ../../mod/register.php:97
 msgid "Name too short."
 msgstr "El nombre es demasiado corto."
 
@@ -1081,21 +1226,21 @@ msgstr "El nombre es demasiado corto."
 msgid "That doesn\\'t appear to be your full (First Last) name."
 msgstr "Ese no parece ser su nombre completo (Nombre Apellido)."
 
-#: ../../mod/register.php:92
+#: ../../mod/register.php:92 ../../mod/register.php:117
 msgid "Your email domain is not among those allowed on this site."
 msgstr ""
 "Su dominio de correo electrónico no se encuentra entre los permitidos en "
 "este sitio."
 
-#: ../../mod/register.php:95
+#: ../../mod/register.php:95 ../../mod/register.php:120
 msgid "Not a valid email address."
 msgstr "No es una dirección de correo electrónico válida."
 
-#: ../../mod/register.php:101
+#: ../../mod/register.php:101 ../../mod/register.php:130
 msgid "Cannot use that email."
 msgstr "No se puede utilizar estecorreo electrónico."
 
-#: ../../mod/register.php:106
+#: ../../mod/register.php:106 ../../mod/register.php:136
 msgid ""
 "Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
 "must also begin with a letter."
@@ -1103,51 +1248,52 @@ msgstr ""
 "Su \"apodo\"sólo puede contener \"az\", \"0-9\", \"-\", y \"_\", y también "
 "debe empezar por una letra."
 
-#: ../../mod/register.php:112
+#: ../../mod/register.php:112 ../../mod/register.php:142
+#: ../../mod/register.php:243
 msgid "Nickname is already registered. Please choose another."
 msgstr "Apodo ya registrado. Por favor, elija otro."
 
-#: ../../mod/register.php:131
+#: ../../mod/register.php:131 ../../mod/register.php:161
 msgid "SERIOUS ERROR: Generation of security keys failed."
 msgstr "ERROR GRAVE: La generación de claves de seguridad ha fallado."
 
-#: ../../mod/register.php:198
+#: ../../mod/register.php:198 ../../mod/register.php:229
 msgid "An error occurred during registration. Please try again."
 msgstr ""
 "Se produjo un error durante el registro. Por favor, inténtelo de nuevo."
 
-#: ../../mod/register.php:216
+#: ../../mod/register.php:216 ../../mod/register.php:265
 msgid "An error occurred creating your default profile. Please try again."
 msgstr ""
 "Error al crear su perfil predeterminado. Por favor, inténtelo de nuevo."
 
-#: ../../mod/register.php:315
+#: ../../mod/register.php:315 ../../mod/register.php:375
 msgid ""
 "Registration successful. Please check your email for further instructions."
 msgstr ""
 "Se ha registrado con éxito. Por favor, consulte su correo electrónico para "
 "obtener instrucciones adicionales."
 
-#: ../../mod/register.php:319
+#: ../../mod/register.php:319 ../../mod/register.php:379
 msgid "Failed to send email message. Here is the message that failed."
 msgstr ""
 "Error al enviar mensaje de correo electrónico. Aquí está el mensaje no "
 "enviado."
 
-#: ../../mod/register.php:324
+#: ../../mod/register.php:324 ../../mod/register.php:384
 msgid "Your registration can not be processed."
 msgstr "Su registro no se puede procesar."
 
-#: ../../mod/register.php:347
+#: ../../mod/register.php:347 ../../mod/register.php:421
 #, php-format
 msgid "Registration request at %s"
 msgstr "Solicitud de registro en% s"
 
-#: ../../mod/register.php:351
+#: ../../mod/register.php:351 ../../mod/register.php:430
 msgid "Your registration is pending approval by the site owner."
 msgstr "Su registro está pendiente de aprobación por el propietario del sitio."
 
-#: ../../mod/register.php:399
+#: ../../mod/register.php:399 ../../mod/register.php:479
 msgid ""
 "You may (optionally) fill in this form via OpenID by supplying your OpenID "
 "and clicking 'Register'."
@@ -1155,7 +1301,7 @@ msgstr ""
 "Usted puede (opcionalmente) rellenar este formulario a través de OpenID "
 "mediante el suministro de su OpenID y haciendo clic en 'Registrar '."
 
-#: ../../mod/register.php:400
+#: ../../mod/register.php:400 ../../mod/register.php:480
 msgid ""
 "If you are not familiar with OpenID, please leave that field blank and fill "
 "in the rest of the items."
@@ -1163,7 +1309,7 @@ msgstr ""
 "Si usted no está familiarizado con OpenID, por favor deje ese campo en "
 "blanco y rellene el resto de los elementos."
 
-#: ../../mod/register.php:401
+#: ../../mod/register.php:401 ../../mod/register.php:481
 msgid "Your OpenID (optional): "
 msgstr "Tu OpenID (opcional):"
 
@@ -1176,32 +1322,43 @@ msgstr ""
 "sus nombres reales."
 
 #: ../../mod/register.php:413 ../../mod/register.php:415
+#: ../../mod/register.php:495
 msgid "Include your profile in member directory?"
 msgstr "¿Incluir su perfil en el directorio de miembros?"
 
 #: ../../mod/register.php:416 ../../mod/dfrn_request.php:618
-#: ../../mod/register.php:418
+#: ../../mod/register.php:418 ../../mod/dfrn_request.php:641
+#: ../../mod/settings.php:415 ../../mod/settings.php:421
+#: ../../mod/settings.php:429 ../../mod/settings.php:433
+#: ../../mod/register.php:498 ../../mod/profiles.php:354
 msgid "Yes"
 msgstr "Sí"
 
 #: ../../mod/register.php:417 ../../mod/dfrn_request.php:619
-#: ../../mod/register.php:419
+#: ../../mod/register.php:419 ../../mod/dfrn_request.php:642
+#: ../../mod/settings.php:415 ../../mod/settings.php:421
+#: ../../mod/settings.php:429 ../../mod/settings.php:433
+#: ../../mod/register.php:499 ../../mod/profiles.php:355
 msgid "No"
 msgstr "No"
 
 #: ../../mod/register.php:429 ../../mod/register.php:431
+#: ../../mod/register.php:515 ../../mod/admin.php:301
 msgid "Registration"
 msgstr "Registro"
 
 #: ../../mod/register.php:437 ../../mod/register.php:439
+#: ../../mod/register.php:523
 msgid "Your Full Name (e.g. Joe Smith): "
 msgstr "Su nombre completo (por ejemplo, Joe Smith):"
 
 #: ../../mod/register.php:438 ../../mod/register.php:440
+#: ../../mod/register.php:524
 msgid "Your Email Address: "
 msgstr "Su dirección de correo electrónico:"
 
 #: ../../mod/register.php:439 ../../mod/register.php:441
+#: ../../mod/register.php:525
 msgid ""
 "Choose a profile nickname. This must begin with a text character. Your "
 "profile address on this site will then be '<strong>nickname@$sitename</"
@@ -1211,14 +1368,15 @@ msgstr ""
 "de perfil en este sitio va a ser '<strong>nickname@$sitename</strong>'."
 
 #: ../../mod/register.php:440 ../../mod/register.php:442
+#: ../../mod/register.php:526
 msgid "Choose a nickname: "
 msgstr "Escoge un apodo: "
 
-#: ../../mod/install.php:30
+#: ../../mod/install.php:30 ../../mod/install.php:34
 msgid "Could not create/connect to database."
 msgstr "No se pudo crear o conectarse a la base de datos."
 
-#: ../../mod/install.php:35
+#: ../../mod/install.php:35 ../../mod/install.php:39
 msgid "Connected to database."
 msgstr "Conectado a la base de datos."
 
@@ -1226,7 +1384,7 @@ msgstr "Conectado a la base de datos."
 msgid "Database import succeeded."
 msgstr "Importación de la base de datos completada."
 
-#: ../../mod/install.php:67
+#: ../../mod/install.php:67 ../../mod/install.php:78
 msgid ""
 "IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
 msgstr ""
@@ -1234,14 +1392,15 @@ msgstr ""
 "para el encuestador"
 
 #: ../../mod/install.php:68 ../../mod/install.php:75 ../../mod/install.php:175
+#: ../../mod/install.php:79 ../../mod/install.php:89 ../../mod/install.php:207
 msgid "Please see the file \"INSTALL.txt\"."
 msgstr "Por favor, consulte el archivo \"INSTALL.txt\"."
 
-#: ../../mod/install.php:73
+#: ../../mod/install.php:73 ../../mod/install.php:87
 msgid "Database import failed."
 msgstr "La importación de la base de datos ha fallado."
 
-#: ../../mod/install.php:74
+#: ../../mod/install.php:74 ../../mod/install.php:88
 msgid ""
 "You may need to import the file \"database.sql\" manually using phpmyadmin "
 "or mysql."
@@ -1249,17 +1408,17 @@ msgstr ""
 "Puede que tenga que importar el archivo \"Database.sql\" manualmente usando "
 "phpmyadmin o mysql."
 
-#: ../../mod/install.php:84
+#: ../../mod/install.php:84 ../../mod/install.php:101
 msgid "Welcome to Friendika."
 msgstr "Bienvenido a Friendika."
 
-#: ../../mod/install.php:124
+#: ../../mod/install.php:124 ../../mod/install.php:153
 msgid "Could not find a command line version of PHP in the web server PATH."
 msgstr ""
 "No se pudo encontrar una versión de línea de comandos de PHP en la ruta del "
 "servidor web."
 
-#: ../../mod/install.php:125
+#: ../../mod/install.php:125 ../../mod/install.php:154
 msgid ""
 "This is required. Please adjust the configuration file .htconfig.php "
 "accordingly."
@@ -1267,7 +1426,7 @@ msgstr ""
 "Esto es necesario. Por favor, modifica el archivo de configuración. htconfig."
 "php en consecuencia."
 
-#: ../../mod/install.php:132
+#: ../../mod/install.php:132 ../../mod/install.php:161
 msgid ""
 "The command line version of PHP on your system does not have "
 "\"register_argc_argv\" enabled."
@@ -1275,11 +1434,11 @@ msgstr ""
 "La versión en línea de comandos de PHP en su sistema no tiene "
 "\"register_argc_argv\" habilitado."
 
-#: ../../mod/install.php:133
+#: ../../mod/install.php:133 ../../mod/install.php:162
 msgid "This is required for message delivery to work."
 msgstr "Esto es necesario para el funcionamiento de la entrega de mensajes."
 
-#: ../../mod/install.php:155
+#: ../../mod/install.php:155 ../../mod/install.php:184
 msgid ""
 "Error: the \"openssl_pkey_new\" function on this system is not able to "
 "generate encryption keys"
@@ -1287,7 +1446,7 @@ msgstr ""
 "Error:  La función \"openssl_pkey_new\" en este sistema no es capaz de "
 "generar claves de cifrado"
 
-#: ../../mod/install.php:156
+#: ../../mod/install.php:156 ../../mod/install.php:185
 msgid ""
 "If running under Windows, please see \"http://www.php.net/manual/en/openssl."
 "installation.php\"."
@@ -1295,33 +1454,33 @@ msgstr ""
 "Si se ejecuta en Windows, por favor consulte la sección \"http://www.php.net/"
 "manual/en/openssl.installation.php\"."
 
-#: ../../mod/install.php:165
+#: ../../mod/install.php:165 ../../mod/install.php:194
 msgid ""
 "Error: Apache webserver mod-rewrite module is required but not installed."
 msgstr ""
 "Error: El módulo servidor web Apache mod-rewrite es necesario pero no está "
 "instalado."
 
-#: ../../mod/install.php:167
+#: ../../mod/install.php:167 ../../mod/install.php:196
 msgid "Error: libCURL PHP module required but not installed."
 msgstr "Error: El módulo libcurl PHP es necesario, pero no está instalado."
 
-#: ../../mod/install.php:169
+#: ../../mod/install.php:169 ../../mod/install.php:198
 msgid ""
 "Error: GD graphics PHP module with JPEG support required but not installed."
 msgstr ""
 "Error: El módulo de gráficos GD de PHP con soporte JPEG es necesario, pero "
 "no está instalado."
 
-#: ../../mod/install.php:171
+#: ../../mod/install.php:171 ../../mod/install.php:200
 msgid "Error: openssl PHP module required but not installed."
 msgstr "Error: El módulo openssl PHP es necesario, pero  no está instalado."
 
-#: ../../mod/install.php:173
+#: ../../mod/install.php:173 ../../mod/install.php:202
 msgid "Error: mysqli PHP module required but not installed."
 msgstr "Error: El módulo PHP mysqli es necesario, pero no está instalado."
 
-#: ../../mod/install.php:184
+#: ../../mod/install.php:184 ../../mod/install.php:216
 msgid ""
 "The web installer needs to be able to create a file called \".htconfig.php\" "
 "in the top folder of your web server and it is unable to do so."
@@ -1330,7 +1489,7 @@ msgstr ""
 "llamado \". htconfig.php\" en la carpeta superior de su servidor web y es "
 "incapaz de hacerlo."
 
-#: ../../mod/install.php:185
+#: ../../mod/install.php:185 ../../mod/install.php:217
 msgid ""
 "This is most often a permission setting, as the web server may not be able "
 "to write files in your folder - even if you can."
@@ -1339,7 +1498,7 @@ msgstr ""
 "puede que no sea capaz de escribir archivos en la carpeta - incluso si usted "
 "puede."
 
-#: ../../mod/install.php:186
+#: ../../mod/install.php:186 ../../mod/install.php:218
 msgid ""
 "Please check with your site documentation or support people to see if this "
 "situation can be corrected."
@@ -1347,7 +1506,7 @@ msgstr ""
 "Por favor, consulte el sitio de documentación o gente de ayuda para ver si "
 "esta situación se puede corregir."
 
-#: ../../mod/install.php:187
+#: ../../mod/install.php:187 ../../mod/install.php:219
 msgid ""
 "If not, you may be required to perform a manual installation. Please see the "
 "file \"INSTALL.txt\" for instructions."
@@ -1355,7 +1514,7 @@ msgstr ""
 "Si no, deberá proceder con la instalación manual. Por favor, consulte el "
 "archivo \"INSTALL.txt\"para obtener instrucciones."
 
-#: ../../mod/install.php:196
+#: ../../mod/install.php:196 ../../mod/install.php:228
 msgid ""
 "The database configuration file \".htconfig.php\" could not be written. "
 "Please use the enclosed text to create a configuration file in your web "
@@ -1365,7 +1524,7 @@ msgstr ""
 "escribir. Por favor, utilice el texto adjunto para crear un archivo de "
 "configuración en la raíz de su servidor web."
 
-#: ../../mod/install.php:211
+#: ../../mod/install.php:211 ../../mod/install.php:243
 msgid "Errors encountered creating database tables."
 msgstr "Errores encontrados creando las tablas de bases de datos."
 
@@ -1378,82 +1537,91 @@ msgid "New Item View"
 msgstr "Vista de nuevos elementos"
 
 #: ../../mod/network.php:149 ../../mod/network.php:151
+#: ../../mod/network.php:228
 msgid "No such group"
 msgstr "Ningún grupo"
 
 #: ../../mod/network.php:160 ../../mod/network.php:162
+#: ../../mod/network.php:239
 msgid "Group is empty"
 msgstr "El grupo está vacío"
 
 #: ../../mod/network.php:164 ../../mod/network.php:166
+#: ../../mod/network.php:244
 msgid "Group: "
 msgstr "Grupo: "
 
-#: ../../mod/notifications.php:28
+#: ../../mod/notifications.php:28 ../../mod/notifications.php:26
 msgid "Invalid request identifier."
 msgstr "Solicitud de identificación no válida."
 
 #: ../../mod/notifications.php:31 ../../mod/notifications.php:134
+#: ../../mod/notifications.php:35 ../../mod/notifications.php:118
+#: ../../mod/notifications.php:164
 msgid "Discard"
 msgstr "Descartar"
 
 #: ../../mod/notifications.php:41 ../../mod/notifications.php:133
+#: ../../mod/notifications.php:47 ../../mod/notifications.php:117
+#: ../../mod/notifications.php:163
 msgid "Ignore"
 msgstr "Ignorar"
 
-#: ../../mod/notifications.php:72
+#: ../../mod/notifications.php:72 ../../mod/notifications.php:78
 msgid "Show Ignored Requests"
 msgstr "Mostrar peticiones ignoradas"
 
-#: ../../mod/notifications.php:72
+#: ../../mod/notifications.php:72 ../../mod/notifications.php:78
 msgid "Hide Ignored Requests"
 msgstr "Esconder peticiones ignoradas"
 
-#: ../../mod/notifications.php:105
+#: ../../mod/notifications.php:105 ../../mod/notifications.php:134
 msgid "Claims to be known to you: "
 msgstr "Dice conocerte:"
 
-#: ../../mod/notifications.php:105
+#: ../../mod/notifications.php:105 ../../mod/notifications.php:134
 msgid "yes"
 msgstr "sí"
 
-#: ../../mod/notifications.php:105
+#: ../../mod/notifications.php:105 ../../mod/notifications.php:134
 msgid "no"
 msgstr "no"
 
-#: ../../mod/notifications.php:111
+#: ../../mod/notifications.php:111 ../../mod/notifications.php:141
 msgid "Approve as: "
 msgstr "Aprobar como:"
 
-#: ../../mod/notifications.php:112
+#: ../../mod/notifications.php:112 ../../mod/notifications.php:142
 msgid "Friend"
 msgstr "Amig@"
 
-#: ../../mod/notifications.php:113
+#: ../../mod/notifications.php:113 ../../mod/notifications.php:143
 msgid "Fan/Admirer"
 msgstr "Fan/Admirador"
 
-#: ../../mod/notifications.php:120
+#: ../../mod/notifications.php:120 ../../mod/notifications.php:105
+#: ../../mod/notifications.php:150
 msgid "Notification type: "
 msgstr "Tipo di notificación: "
 
-#: ../../mod/notifications.php:121
+#: ../../mod/notifications.php:121 ../../mod/notifications.php:151
 msgid "Friend/Connect Request"
 msgstr "Solicitud de Amistad/Conexión"
 
-#: ../../mod/notifications.php:121
+#: ../../mod/notifications.php:121 ../../mod/notifications.php:151
 msgid "New Follower"
 msgstr "Nuevo seguidor"
 
-#: ../../mod/notifications.php:131
+#: ../../mod/notifications.php:131 ../../mod/notifications.php:114
+#: ../../mod/notifications.php:161 ../../mod/admin.php:469
 msgid "Approve"
 msgstr "Aprobar"
 
-#: ../../mod/notifications.php:140
+#: ../../mod/notifications.php:140 ../../mod/notifications.php:170
 msgid "No notifications."
 msgstr "Ninguna notificación."
 
-#: ../../mod/notifications.php:164
+#: ../../mod/notifications.php:164 ../../mod/admin.php:468
 msgid "No registrations."
 msgstr "Ningún registro."
 
@@ -1462,85 +1630,90 @@ msgid "This introduction has already been accepted."
 msgstr "Esta presentación ya ha sido aceptada."
 
 #: ../../mod/dfrn_request.php:116 ../../mod/dfrn_request.php:347
+#: ../../mod/dfrn_request.php:349
 msgid "Profile location is not valid or does not contain profile information."
 msgstr ""
 "Ubicación del perfil no es válido o no contiene la información de perfil."
 
 #: ../../mod/dfrn_request.php:121 ../../mod/dfrn_request.php:352
+#: ../../mod/dfrn_request.php:354
 msgid "Warning: profile location has no identifiable owner name."
 msgstr ""
 "Aviso: Ubicación del perfil no tiene nombre del propietario identificable."
 
 #: ../../mod/dfrn_request.php:123 ../../mod/dfrn_request.php:354
+#: ../../mod/dfrn_request.php:356
 msgid "Warning: profile location has no profile photo."
 msgstr "Advertencia: ubicación del perfil no tiene foto de perfil."
 
 #: ../../mod/dfrn_request.php:126 ../../mod/dfrn_request.php:357
+#: ../../mod/dfrn_request.php:359
 #, php-format
 msgid "%d required parameter was not found at the given location"
 msgid_plural "%d required parameters were not found at the given location"
 msgstr[0] "% d parámetro requerido no se encontró en el lugar determinado"
 msgstr[1] "% d parámetros requeridos no se encontraron en el lugar determinado"
 
-#: ../../mod/dfrn_request.php:164
+#: ../../mod/dfrn_request.php:164 ../../mod/dfrn_request.php:165
 msgid "Introduction complete."
 msgstr "Presentación completa."
 
-#: ../../mod/dfrn_request.php:188
+#: ../../mod/dfrn_request.php:188 ../../mod/dfrn_request.php:189
 msgid "Unrecoverable protocol error."
 msgstr "Error de protocolo irrecuperable."
 
-#: ../../mod/dfrn_request.php:216
+#: ../../mod/dfrn_request.php:216 ../../mod/dfrn_request.php:217
 msgid "Profile unavailable."
 msgstr "Perfil no disponible."
 
-#: ../../mod/dfrn_request.php:241
+#: ../../mod/dfrn_request.php:241 ../../mod/dfrn_request.php:242
 #, php-format
 msgid "%s has received too many connection requests today."
 msgstr "% s ha recibido demasiadas solicitudes de conexión hoy."
 
-#: ../../mod/dfrn_request.php:242
+#: ../../mod/dfrn_request.php:242 ../../mod/dfrn_request.php:243
 msgid "Spam protection measures have been invoked."
 msgstr "Han sido activadas las medidas de protección contra spam."
 
-#: ../../mod/dfrn_request.php:243
+#: ../../mod/dfrn_request.php:243 ../../mod/dfrn_request.php:244
 msgid "Friends are advised to please try again in 24 hours."
 msgstr "Se aconseja a los amigos intentarlo de nuevo en 24 horas."
 
-#: ../../mod/dfrn_request.php:273
+#: ../../mod/dfrn_request.php:273 ../../mod/dfrn_request.php:274
 msgid "Invalid locator"
 msgstr "Localizador no válido"
 
-#: ../../mod/dfrn_request.php:292
+#: ../../mod/dfrn_request.php:292 ../../mod/dfrn_request.php:294
 msgid "Unable to resolve your name at the provided location."
 msgstr "No se ha podido resolver tu nombre en la ubicación indicada."
 
-#: ../../mod/dfrn_request.php:305
+#: ../../mod/dfrn_request.php:305 ../../mod/dfrn_request.php:307
 msgid "You have already introduced yourself here."
 msgstr "Ya te has presentado aquí."
 
-#: ../../mod/dfrn_request.php:309
+#: ../../mod/dfrn_request.php:309 ../../mod/dfrn_request.php:311
 #, php-format
 msgid "Apparently you are already friends with %s."
 msgstr "Al parecer, ya eres amigo de % s."
 
-#: ../../mod/dfrn_request.php:330
+#: ../../mod/dfrn_request.php:330 ../../mod/dfrn_request.php:332
 msgid "Invalid profile URL."
 msgstr "Dirección de perfil no válida."
 
-#: ../../mod/dfrn_request.php:336
+#: ../../mod/dfrn_request.php:336 ../../mod/dfrn_request.php:338
+#: ../../mod/follow.php:20
 msgid "Disallowed profile URL."
 msgstr "Dirección de perfil no permitida."
 
-#: ../../mod/dfrn_request.php:423
+#: ../../mod/dfrn_request.php:423 ../../mod/dfrn_request.php:426
 msgid "Your introduction has been sent."
 msgstr "Su presentación ha sido enviada."
 
-#: ../../mod/dfrn_request.php:477
+#: ../../mod/dfrn_request.php:477 ../../mod/dfrn_request.php:479
 msgid "Please login to confirm introduction."
 msgstr "Inicia sesión para confirmar la presentación."
 
-#: ../../mod/dfrn_request.php:491
+#: ../../mod/dfrn_request.php:491 ../../mod/dfrn_request.php:493
 msgid ""
 "Incorrect identity currently logged in. Please login to <strong>this</"
 "strong> profile."
@@ -1549,19 +1722,20 @@ msgstr ""
 "strong> perfil."
 
 #: ../../mod/dfrn_request.php:536 ../../include/items.php:1341
-#: ../../include/items.php:1364
+#: ../../include/items.php:1364 ../../mod/dfrn_request.php:540
+#: ../../include/items.php:1577
 msgid "[Name Withheld]"
 msgstr "[Nombre oculto]"
 
-#: ../../mod/dfrn_request.php:543
+#: ../../mod/dfrn_request.php:543 ../../mod/dfrn_request.php:547
 msgid "Introduction received at "
 msgstr "Presentación recibida en"
 
-#: ../../mod/dfrn_request.php:615
+#: ../../mod/dfrn_request.php:615 ../../mod/dfrn_request.php:637
 msgid "Friend/Connection Request"
 msgstr "Solicitud de Amistad/Conexión"
 
-#: ../../mod/dfrn_request.php:616
+#: ../../mod/dfrn_request.php:616 ../../mod/dfrn_request.php:639
 msgid "Please answer the following:"
 msgstr "Por favor responda lo siguiente:"
 
@@ -1569,7 +1743,7 @@ msgstr "Por favor responda lo siguiente:"
 msgid "Does $name know you?"
 msgstr "$name te conoce?"
 
-#: ../../mod/dfrn_request.php:620
+#: ../../mod/dfrn_request.php:620 ../../mod/dfrn_request.php:643
 msgid "Add a personal note:"
 msgstr "Agregar una nota personal:"
 
@@ -1581,11 +1755,12 @@ msgstr ""
 "Por favor, introduzca su dirección de perfil de uno de las siguientes redes "
 "sociales soportadas:"
 
-#: ../../mod/dfrn_request.php:622
+#: ../../mod/dfrn_request.php:622 ../../mod/dfrn_request.php:645
+#: ../../include/contact_selectors.php:78
 msgid "Friendika"
 msgstr "Friendika"
 
-#: ../../mod/dfrn_request.php:623
+#: ../../mod/dfrn_request.php:623 ../../mod/dfrn_request.php:646
 msgid "StatusNet/Federated Social Web"
 msgstr "StatusNet/Federated Social Web"
 
@@ -1601,30 +1776,36 @@ msgstr "Red pública (insegura)"
 msgid "Your profile address:"
 msgstr "Su dirección de perfil:"
 
-#: ../../mod/dfrn_request.php:627
+#: ../../mod/dfrn_request.php:627 ../../mod/dfrn_request.php:650
 msgid "Submit Request"
 msgstr "Enviar solicitud"
 
 #: ../../mod/dfrn_request.php:628 ../../mod/tagrm.php:11
 #: ../../mod/tagrm.php:94 ../../addon/js_upload/js_upload.php:41
+#: ../../mod/dfrn_request.php:651 ../../addon/js_upload/js_upload.php:45
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: ../../mod/like.php:110
+#: ../../mod/like.php:110 ../../mod/like.php:106
+#: ../../addon/facebook/facebook.php:962 ../../include/diaspora.php:770
+#: ../../include/conversation.php:26 ../../include/conversation.php:35
 msgid "status"
 msgstr "estado"
 
-#: ../../mod/like.php:127
+#: ../../mod/like.php:127 ../../mod/like.php:123
+#: ../../addon/facebook/facebook.php:966 ../../include/diaspora.php:786
+#: ../../include/conversation.php:43
 #, php-format
 msgid "%1$s likes %2$s's %3$s"
 msgstr "A %1$s gusta %3$s de %2$s"
 
-#: ../../mod/like.php:129
+#: ../../mod/like.php:129 ../../mod/like.php:125
+#: ../../include/conversation.php:46
 #, php-format
 msgid "%1$s doesn't like %2$s's %3$s"
 msgstr "A %1$s no gusta %3$s de %2$s"
 
-#: ../../mod/lostpass.php:38
+#: ../../mod/lostpass.php:38 ../../mod/lostpass.php:42
 #, php-format
 msgid "Password reset requested at %s"
 msgstr "Restablecer la contraseña solicitada en %s"
@@ -1648,15 +1829,15 @@ msgstr "Por favor, introduzca su contraseña para la verificación:"
 msgid "Applications"
 msgstr "Aplicaciones"
 
-#: ../../mod/directory.php:32
+#: ../../mod/directory.php:32 ../../mod/directory.php:40
 msgid "Global Directory"
 msgstr "Directorio global"
 
-#: ../../mod/item.php:37
+#: ../../mod/item.php:37 ../../mod/item.php:83
 msgid "Unable to locate original post."
 msgstr "No se puede encontrar post original."
 
-#: ../../mod/item.php:98 ../../mod/item.php:126
+#: ../../mod/item.php:98 ../../mod/item.php:126 ../../mod/item.php:198
 msgid "Empty post discarded."
 msgstr "Mensaje vacío descartado."
 
@@ -1670,11 +1851,11 @@ msgstr "%s ha comentado en tu post en %s"
 msgid "%s posted on your profile wall at %s"
 msgstr "%s ha publicado en tu muro en %s"
 
-#: ../../mod/item.php:471 ../../mod/item.php:523
+#: ../../mod/item.php:471 ../../mod/item.php:523 ../../mod/item.php:800
 msgid "System error. Post not saved."
 msgstr "Error del sistema. Mensaje no guardado."
 
-#: ../../mod/item.php:489 ../../mod/item.php:541
+#: ../../mod/item.php:489 ../../mod/item.php:541 ../../mod/item.php:819
 #, php-format
 msgid ""
 "This message was sent to you by %s, a member of the Friendika social network."
@@ -1686,7 +1867,7 @@ msgstr ""
 msgid "You may visit them online at"
 msgstr "Puede visitarle online en"
 
-#: ../../mod/item.php:493 ../../mod/item.php:545
+#: ../../mod/item.php:493 ../../mod/item.php:545 ../../mod/item.php:822
 msgid ""
 "Please contact the sender by replying to this post if you do not wish to "
 "receive these messages."
@@ -1694,7 +1875,7 @@ msgstr ""
 "Por favor contacte al remitente respondiendo a este mensaje si no desea "
 "recibir estos mensajes."
 
-#: ../../mod/item.php:495 ../../mod/item.php:547
+#: ../../mod/item.php:495 ../../mod/item.php:547 ../../mod/item.php:824
 #, php-format
 msgid "%s posted an update."
 msgstr "%s  ha publicado una actualización."
@@ -1715,108 +1896,112 @@ msgstr "Seleccione una etiqueta para eliminar:"
 msgid "Remove"
 msgstr "Eliminar"
 
-#: ../../mod/message.php:18
+#: ../../mod/message.php:18 ../../mod/message.php:23
 msgid "No recipient selected."
 msgstr "Ningún destinatario seleccionado"
 
-#: ../../mod/message.php:23
+#: ../../mod/message.php:23 ../../include/message.php:13
 msgid "[no subject]"
 msgstr "[sin asunto]"
 
-#: ../../mod/message.php:34
+#: ../../mod/message.php:34 ../../mod/message.php:26
 msgid "Unable to locate contact information."
 msgstr "No se puede encontrar información del contacto."
 
-#: ../../mod/message.php:102
+#: ../../mod/message.php:102 ../../mod/message.php:31
 msgid "Message sent."
 msgstr "Mensaje enviado."
 
-#: ../../mod/message.php:105
+#: ../../mod/message.php:105 ../../mod/message.php:29
 msgid "Message could not be sent."
 msgstr "El mensaje no ha podido ser enviado."
 
 #: ../../mod/message.php:125 ../../include/nav.php:100
+#: ../../mod/message.php:51 ../../include/nav.php:102
 msgid "Messages"
 msgstr "Mensajes"
 
-#: ../../mod/message.php:126
+#: ../../mod/message.php:126 ../../mod/message.php:52
 msgid "Inbox"
 msgstr "Entrada"
 
-#: ../../mod/message.php:127
+#: ../../mod/message.php:127 ../../mod/message.php:53
 msgid "Outbox"
 msgstr "Enviados"
 
-#: ../../mod/message.php:128
+#: ../../mod/message.php:128 ../../mod/message.php:54
 msgid "New Message"
 msgstr "Nuevo mensaje"
 
-#: ../../mod/message.php:142
+#: ../../mod/message.php:142 ../../mod/message.php:68
 msgid "Message deleted."
 msgstr "Mensaje eliminado."
 
-#: ../../mod/message.php:158
+#: ../../mod/message.php:158 ../../mod/message.php:84
 msgid "Conversation removed."
 msgstr "Conversación eliminada."
 
-#: ../../mod/message.php:177
+#: ../../mod/message.php:177 ../../mod/message.php:106
 msgid "Send Private Message"
 msgstr "Enviar mensaje privado"
 
 #: ../../mod/message.php:178 ../../mod/message.php:312
+#: ../../mod/message.php:107 ../../mod/message.php:241
 msgid "To:"
 msgstr "A:"
 
 #: ../../mod/message.php:179 ../../mod/message.php:313
+#: ../../mod/message.php:108 ../../mod/message.php:242
 msgid "Subject:"
 msgstr "Asunto:"
 
-#: ../../mod/message.php:221
+#: ../../mod/message.php:221 ../../mod/message.php:150
 msgid "No messages."
 msgstr "No hay mensajes."
 
-#: ../../mod/message.php:234
+#: ../../mod/message.php:234 ../../mod/message.php:163
 msgid "Delete conversation"
 msgstr "Eliminar conversación"
 
-#: ../../mod/message.php:264
+#: ../../mod/message.php:264 ../../mod/message.php:193
 msgid "Message not available."
 msgstr "Mensaje no disponibile."
 
-#: ../../mod/message.php:301
+#: ../../mod/message.php:301 ../../mod/message.php:230
 msgid "Delete message"
 msgstr "Borrar mensaje"
 
-#: ../../mod/message.php:311
+#: ../../mod/message.php:311 ../../mod/message.php:240
 msgid "Send Reply"
 msgstr "Enviar respuesta"
 
-#: ../../mod/dfrn_confirm.php:231
+#: ../../mod/dfrn_confirm.php:231 ../../mod/dfrn_confirm.php:234
 msgid "Response from remote site was not understood."
 msgstr "La respuesta desde el sitio remoto no ha sido entendida."
 
-#: ../../mod/dfrn_confirm.php:240
+#: ../../mod/dfrn_confirm.php:240 ../../mod/dfrn_confirm.php:243
 msgid "Unexpected response from remote site: "
 msgstr "Respuesta inesperada desde el sitio remoto:"
 
-#: ../../mod/dfrn_confirm.php:248
+#: ../../mod/dfrn_confirm.php:248 ../../mod/dfrn_confirm.php:251
 msgid "Confirmation completed successfully."
 msgstr "Confirmación completada con éxito."
 
 #: ../../mod/dfrn_confirm.php:250 ../../mod/dfrn_confirm.php:264
-#: ../../mod/dfrn_confirm.php:271
+#: ../../mod/dfrn_confirm.php:271 ../../mod/dfrn_confirm.php:253
+#: ../../mod/dfrn_confirm.php:267 ../../mod/dfrn_confirm.php:274
 msgid "Remote site reported: "
 msgstr "El sito remoto informó:"
 
-#: ../../mod/dfrn_confirm.php:262
+#: ../../mod/dfrn_confirm.php:262 ../../mod/dfrn_confirm.php:265
 msgid "Temporary failure. Please wait and try again."
 msgstr "Error temporal. Por favor, espere y vuelva a intentarlo."
 
-#: ../../mod/dfrn_confirm.php:269
+#: ../../mod/dfrn_confirm.php:269 ../../mod/dfrn_confirm.php:272
 msgid "Introduction failed or was revoked."
 msgstr "La presentación ha fallado o ha sido anulada."
 
-#: ../../mod/dfrn_confirm.php:387
+#: ../../mod/dfrn_confirm.php:387 ../../mod/dfrn_confirm.php:409
 msgid "Unable to set contact photo."
 msgstr "Imposible establecer la foto del contacto."
 
@@ -1824,24 +2009,24 @@ msgstr "Imposible establecer la foto del contacto."
 msgid "is now friends with"
 msgstr "ahora es amigo de"
 
-#: ../../mod/dfrn_confirm.php:494
+#: ../../mod/dfrn_confirm.php:494 ../../mod/dfrn_confirm.php:529
 #, php-format
 msgid "No user record found for '%s' "
 msgstr "Ningún usuario encontrado para '%s'"
 
-#: ../../mod/dfrn_confirm.php:504
+#: ../../mod/dfrn_confirm.php:504 ../../mod/dfrn_confirm.php:539
 msgid "Our site encryption key is apparently messed up."
 msgstr "Nuestra clave de cifrado del site es aparentemente un lío."
 
-#: ../../mod/dfrn_confirm.php:515
+#: ../../mod/dfrn_confirm.php:515 ../../mod/dfrn_confirm.php:550
 msgid "Empty site URL was provided or URL could not be decrypted by us."
 msgstr "Se ha proporcionado una dirección vacía o no hemos podido descifrarla."
 
-#: ../../mod/dfrn_confirm.php:527
+#: ../../mod/dfrn_confirm.php:527 ../../mod/dfrn_confirm.php:571
 msgid "Contact record was not found for you on our site."
 msgstr "El contacto no se ha encontrado en nuestro sitio."
 
-#: ../../mod/dfrn_confirm.php:555
+#: ../../mod/dfrn_confirm.php:555 ../../mod/dfrn_confirm.php:605
 msgid ""
 "The ID provided by your system is a duplicate on our system. It should work "
 "if you try again."
@@ -1849,36 +2034,40 @@ msgstr ""
 "La identificación proporcionada por el sistema es un duplicado de nuestro "
 "sistema. Debería funcionar si intenta de nuevo."
 
-#: ../../mod/dfrn_confirm.php:566
+#: ../../mod/dfrn_confirm.php:566 ../../mod/dfrn_confirm.php:616
 msgid "Unable to set your contact credentials on our system."
 msgstr ""
 "No se puede establecer sus credenciales de contacto en nuestro sistema."
 
-#: ../../mod/dfrn_confirm.php:619
+#: ../../mod/dfrn_confirm.php:619 ../../mod/dfrn_confirm.php:670
 msgid "Unable to update your contact profile details on our system"
 msgstr ""
 "No se puede actualizar los datos de tu perfil de contacto en nuestro sistema"
 
-#: ../../mod/dfrn_confirm.php:648
+#: ../../mod/dfrn_confirm.php:648 ../../mod/dfrn_confirm.php:700
 #, php-format
 msgid "Connection accepted at %s"
 msgstr "Conexión aceptada en % s"
 
 #: ../../mod/openid.php:62 ../../mod/openid.php:109 ../../include/auth.php:105
 #: ../../include/auth.php:130 ../../include/auth.php:183
+#: ../../mod/openid.php:63 ../../mod/openid.php:123 ../../include/auth.php:121
+#: ../../include/auth.php:146 ../../include/auth.php:200
 msgid "Login failed."
 msgstr "Accesso fallido."
 
-#: ../../mod/openid.php:73 ../../include/auth.php:194
+#: ../../mod/openid.php:73 ../../include/auth.php:194 ../../mod/openid.php:83
+#: ../../include/auth.php:220
 msgid "Welcome back "
 msgstr "Bienvenido de nuevo"
 
 #: ../../mod/dfrn_poll.php:78 ../../mod/dfrn_poll.php:392
+#: ../../mod/dfrn_poll.php:90 ../../mod/dfrn_poll.php:516
 #, php-format
 msgid "%s welcomes %s"
 msgstr "%s te da la bienvenida a %s"
 
-#: ../../mod/viewcontacts.php:32
+#: ../../mod/viewcontacts.php:32 ../../mod/viewcontacts.php:40
 msgid "No contacts."
 msgstr "Ningún contacto."
 
@@ -1902,23 +2091,23 @@ msgstr "El nombre del grupo ha cambiado."
 msgid "Membership list updated."
 msgstr "Lista de miembros actualizada."
 
-#: ../../mod/group.php:107
+#: ../../mod/group.php:107 ../../mod/group.php:98
 msgid "Group removed."
 msgstr "Grupo eliminado."
 
-#: ../../mod/group.php:109
+#: ../../mod/group.php:109 ../../mod/group.php:100
 msgid "Unable to remove group."
 msgstr "No se puede eliminar el grupo."
 
-#: ../../addon/twitter/twitter.php:64
+#: ../../addon/twitter/twitter.php:64 ../../addon/twitter/twitter.php:70
 msgid "Post to Twitter"
 msgstr "Publicar en Twitter"
 
-#: ../../addon/twitter/twitter.php:122
+#: ../../addon/twitter/twitter.php:122 ../../addon/twitter/twitter.php:137
 msgid "Twitter Posting Settings"
 msgstr "Configuración de publicación en Twitter"
 
-#: ../../addon/twitter/twitter.php:129
+#: ../../addon/twitter/twitter.php:129 ../../addon/twitter/twitter.php:144
 msgid ""
 "No consumer key pair for Twitter found. Please contact your site "
 "administrator."
@@ -1926,7 +2115,7 @@ msgstr ""
 "No se ha encontrado ningún par de claves para Twitter. Póngase en contacto "
 "con el administrador del sitio."
 
-#: ../../addon/twitter/twitter.php:148
+#: ../../addon/twitter/twitter.php:148 ../../addon/twitter/twitter.php:163
 msgid ""
 "At this Friendika instance the Twitter plugin was enabled but you have not "
 "yet connected your account to your Twitter account. To do so click the "
@@ -1940,15 +2129,16 @@ msgstr ""
 "cuadro de entrada y enviar el formulario. Solo sus posts <strong>públicos</"
 "strong> se publicarán en Twitter."
 
-#: ../../addon/twitter/twitter.php:149
+#: ../../addon/twitter/twitter.php:149 ../../addon/twitter/twitter.php:164
 msgid "Log in with Twitter"
 msgstr "Acceder con Twitter"
 
-#: ../../addon/twitter/twitter.php:151
+#: ../../addon/twitter/twitter.php:151 ../../addon/twitter/twitter.php:166
 msgid "Copy the PIN from Twitter here"
 msgstr "Copia el PIN de Twitter aquí"
 
 #: ../../addon/twitter/twitter.php:165 ../../addon/statusnet/statusnet.php:197
+#: ../../addon/statusnet/statusnet.php:329 ../../addon/twitter/twitter.php:180
 msgid "Currently connected to: "
 msgstr "Actualmente conectado a:"
 
@@ -1965,18 +2155,22 @@ msgid "Send public postings to Twitter"
 msgstr "Enviar posts públicos a Twitter"
 
 #: ../../addon/twitter/twitter.php:172 ../../addon/statusnet/statusnet.php:204
+#: ../../addon/statusnet/statusnet.php:340 ../../addon/twitter/twitter.php:191
 msgid "Clear OAuth configuration"
 msgstr "Borrar la configuración de OAuth"
 
 #: ../../addon/statusnet/statusnet.php:78
+#: ../../addon/statusnet/statusnet.php:133
 msgid "Post to StatusNet"
 msgstr "Publicar en StatusNet"
 
 #: ../../addon/statusnet/statusnet.php:146
+#: ../../addon/statusnet/statusnet.php:253
 msgid "StatusNet Posting Settings"
 msgstr "Configuración de envío a StatusNet"
 
 #: ../../addon/statusnet/statusnet.php:152
+#: ../../addon/statusnet/statusnet.php:277
 msgid ""
 "No consumer key pair for StatusNet found. Register your Friendika Account as "
 "an desktop client on your StatusNet account, copy the consumer key pair here "
@@ -1992,18 +2186,22 @@ msgstr ""
 "StatusNet favorita."
 
 #: ../../addon/statusnet/statusnet.php:154
+#: ../../addon/statusnet/statusnet.php:279
 msgid "OAuth Consumer Key"
 msgstr "OAuth Consumer Key"
 
 #: ../../addon/statusnet/statusnet.php:157
+#: ../../addon/statusnet/statusnet.php:282
 msgid "OAuth Consumer Secret"
 msgstr "OAuth Consumer Secret"
 
 #: ../../addon/statusnet/statusnet.php:160
+#: ../../addon/statusnet/statusnet.php:285
 msgid "Base API Path (remember the trailing /)"
 msgstr "Dirección de base para la API (recordar el / al final)"
 
 #: ../../addon/statusnet/statusnet.php:181
+#: ../../addon/statusnet/statusnet.php:306
 msgid ""
 "To connect to your StatusNet account click the button below to get a "
 "security code from StatusNet which you have to copy into the input box below "
@@ -2016,10 +2214,12 @@ msgstr ""
 "en StatusNet."
 
 #: ../../addon/statusnet/statusnet.php:182
+#: ../../addon/statusnet/statusnet.php:307
 msgid "Log in with StatusNet"
 msgstr "Inicia sesión con StatusNet"
 
 #: ../../addon/statusnet/statusnet.php:184
+#: ../../addon/statusnet/statusnet.php:309
 msgid "Copy the security code from StatusNet here"
 msgstr "Copia el código de seguridad de StatusNet aquí"
 
@@ -2035,23 +2235,23 @@ msgstr ""
 msgid "Send public postings to StatusNet"
 msgstr "Enviar posts públicos a StatusNet"
 
-#: ../../addon/tictac/tictac.php:14
+#: ../../addon/tictac/tictac.php:14 ../../addon/tictac/tictac.php:20
 msgid "Three Dimensional Tic-Tac-Toe"
 msgstr "Tic-Tac-Toe tridimensionale"
 
-#: ../../addon/tictac/tictac.php:47
+#: ../../addon/tictac/tictac.php:47 ../../addon/tictac/tictac.php:53
 msgid "3D Tic-Tac-Toe"
 msgstr "3D Tic-Tac-Toe"
 
-#: ../../addon/tictac/tictac.php:52
+#: ../../addon/tictac/tictac.php:52 ../../addon/tictac/tictac.php:58
 msgid "New game"
 msgstr "Nueva partida"
 
-#: ../../addon/tictac/tictac.php:53
+#: ../../addon/tictac/tictac.php:53 ../../addon/tictac/tictac.php:59
 msgid "New game with handicap"
 msgstr "Nuevo juego con handicap"
 
-#: ../../addon/tictac/tictac.php:54
+#: ../../addon/tictac/tictac.php:54 ../../addon/tictac/tictac.php:60
 msgid ""
 "Three dimensional tic-tac-toe is just like the traditional game except that "
 "it is played on multiple levels simultaneously. "
@@ -2059,7 +2259,7 @@ msgstr ""
 "Tic-tac-toe tridimensional es como el juego tradicional, excepto que se "
 "juega en varios niveles simultáneamente."
 
-#: ../../addon/tictac/tictac.php:55
+#: ../../addon/tictac/tictac.php:55 ../../addon/tictac/tictac.php:61
 msgid ""
 "In this case there are three levels. You win by getting three in a row on "
 "any level, as well as up, down, and diagonally across the different levels."
@@ -2068,7 +2268,7 @@ msgstr ""
 "cualquier nivel, así como arriba, abajo y en diagonal a través de los "
 "diferentes niveles."
 
-#: ../../addon/tictac/tictac.php:57
+#: ../../addon/tictac/tictac.php:57 ../../addon/tictac/tictac.php:63
 msgid ""
 "The handicap game disables the center position on the middle level because "
 "the player claiming this square often has an unfair advantage."
@@ -2076,23 +2276,24 @@ msgstr ""
 "El juego con handicap desactiva la posición central en el nivel medio porque "
 "el jugador reclama que este cuadrado tiene a menudo una ventaja injusta."
 
-#: ../../addon/tictac/tictac.php:176
+#: ../../addon/tictac/tictac.php:176 ../../addon/tictac/tictac.php:182
 msgid "You go first..."
 msgstr "Comienza tú..."
 
-#: ../../addon/tictac/tictac.php:181
+#: ../../addon/tictac/tictac.php:181 ../../addon/tictac/tictac.php:187
 msgid "I'm going first this time..."
 msgstr "Yo voy primero esta vez..."
 
-#: ../../addon/tictac/tictac.php:187
+#: ../../addon/tictac/tictac.php:187 ../../addon/tictac/tictac.php:193
 msgid "You won!"
 msgstr "¡Has ganado!"
 
 #: ../../addon/tictac/tictac.php:193 ../../addon/tictac/tictac.php:218
+#: ../../addon/tictac/tictac.php:199 ../../addon/tictac/tictac.php:224
 msgid "\"Cat\" game!"
 msgstr "¡Empate!"
 
-#: ../../addon/tictac/tictac.php:216
+#: ../../addon/tictac/tictac.php:216 ../../addon/tictac/tictac.php:222
 msgid "I won!"
 msgstr "¡He ganado!"
 
@@ -2106,15 +2307,15 @@ msgid ""
 msgstr ""
 "Usa el seguente controllo solo se el el caricatore Java (qui sopra) no parte."
 
-#: ../../addon/facebook/facebook.php:116
+#: ../../addon/facebook/facebook.php:116 ../../addon/facebook/facebook.php:320
 msgid "Facebook disabled"
 msgstr "Facebook no habilitado"
 
-#: ../../addon/facebook/facebook.php:124
+#: ../../addon/facebook/facebook.php:124 ../../addon/facebook/facebook.php:334
 msgid "Facebook API key is missing."
 msgstr "Falta la Clave API de Facebook."
 
-#: ../../addon/facebook/facebook.php:131
+#: ../../addon/facebook/facebook.php:131 ../../addon/facebook/facebook.php:341
 msgid "Facebook Connect"
 msgstr "Facebook Connect"
 
@@ -2126,51 +2327,59 @@ msgstr "Instalar el conector con Facebook"
 msgid "Remove Facebook post connector"
 msgstr "DesInstalar el conector con Facebook"
 
-#: ../../addon/facebook/facebook.php:150
+#: ../../addon/facebook/facebook.php:150 ../../addon/facebook/facebook.php:360
 msgid "Post to Facebook by default"
 msgstr "Publicar en Facebook de forma predeterminada"
 
-#: ../../addon/facebook/facebook.php:174
+#: ../../addon/facebook/facebook.php:174 ../../addon/facebook/facebook.php:426
+#: ../../include/contact_selectors.php:78
 msgid "Facebook"
 msgstr "Facebook"
 
-#: ../../addon/facebook/facebook.php:175
+#: ../../addon/facebook/facebook.php:175 ../../addon/facebook/facebook.php:427
 msgid "Facebook Connector Settings"
 msgstr "Configuración de conexión a Facebook"
 
-#: ../../addon/facebook/facebook.php:189
+#: ../../addon/facebook/facebook.php:189 ../../addon/facebook/facebook.php:441
 msgid "Post to Facebook"
 msgstr "Publicar en Facebook"
 
-#: ../../addon/facebook/facebook.php:230
+#: ../../addon/facebook/facebook.php:230 ../../addon/facebook/facebook.php:587
 msgid "Image: "
 msgstr "Imagen: "
 
 #: ../../addon/randplace/randplace.php:171
+#: ../../addon/randplace/randplace.php:170
 msgid "Randplace Settings"
 msgstr "Configuración de Randplace"
 
 #: ../../addon/randplace/randplace.php:173
+#: ../../addon/randplace/randplace.php:172
 msgid "Enable Randplace Plugin"
 msgstr "Activar el plugin Randplace"
 
 #: ../../addon/js_upload/js_upload.php:39
+#: ../../addon/js_upload/js_upload.php:43
 msgid "Upload a file"
 msgstr "Subir un archivo"
 
 #: ../../addon/js_upload/js_upload.php:40
+#: ../../addon/js_upload/js_upload.php:44
 msgid "Drop files here to upload"
 msgstr "Soltar los archivos aquí para subir"
 
 #: ../../addon/js_upload/js_upload.php:42
+#: ../../addon/js_upload/js_upload.php:46
 msgid "Failed"
 msgstr "Falló"
 
 #: ../../addon/js_upload/js_upload.php:288
+#: ../../addon/js_upload/js_upload.php:292
 msgid "No files were uploaded."
 msgstr "No hay archivos subidos."
 
 #: ../../addon/js_upload/js_upload.php:294
+#: ../../addon/js_upload/js_upload.php:298
 msgid "Uploaded file is empty"
 msgstr "El archivo subido está vacío"
 
@@ -2179,10 +2388,12 @@ msgid "Uploaded file is too large"
 msgstr "El archivo subido es demasiado grande"
 
 #: ../../addon/js_upload/js_upload.php:317
+#: ../../addon/js_upload/js_upload.php:321
 msgid "File has an invalid extension, it should be one of "
 msgstr "El archivo tiene una extensión no válida, debería ser una de "
 
 #: ../../addon/js_upload/js_upload.php:328
+#: ../../addon/js_upload/js_upload.php:332
 msgid "Upload was cancelled, or server error encountered"
 msgstr "La subida ha sido cancelada, o se encontró un error del servidor"
 
@@ -2211,26 +2422,32 @@ msgid "Reputable, has my trust"
 msgstr "Buena reputación, tiene mi confianza"
 
 #: ../../include/contact_selectors.php:55
+#: ../../include/contact_selectors.php:56
 msgid "Frequently"
 msgstr "Frequentemente"
 
 #: ../../include/contact_selectors.php:56
+#: ../../include/contact_selectors.php:57
 msgid "Hourly"
 msgstr "Cada hora"
 
 #: ../../include/contact_selectors.php:57
+#: ../../include/contact_selectors.php:58
 msgid "Twice daily"
 msgstr "Dos veces al día"
 
 #: ../../include/contact_selectors.php:58
+#: ../../include/contact_selectors.php:59
 msgid "Daily"
 msgstr "Diariamente"
 
 #: ../../include/contact_selectors.php:59
+#: ../../include/contact_selectors.php:60
 msgid "Weekly"
 msgstr "Semanalmente"
 
 #: ../../include/contact_selectors.php:60
+#: ../../include/contact_selectors.php:61
 msgid "Monthly"
 msgstr "Mensualmente"
 
@@ -2466,142 +2683,152 @@ msgstr "Sesión terminada"
 msgid "Miscellaneous"
 msgstr "Varios"
 
-#: ../../include/datetime.php:148
+#: ../../include/datetime.php:148 ../../include/datetime.php:234
 msgid "less than a second ago"
 msgstr "hace menos de un segundo"
 
-#: ../../include/datetime.php:151
+#: ../../include/datetime.php:151 ../../include/datetime.php:105
+#: ../../include/datetime.php:237
 msgid "year"
 msgstr "año"
 
-#: ../../include/datetime.php:151
+#: ../../include/datetime.php:151 ../../include/datetime.php:237
 msgid "years"
 msgstr "años"
 
-#: ../../include/datetime.php:152
+#: ../../include/datetime.php:152 ../../include/datetime.php:110
+#: ../../include/datetime.php:238
 msgid "month"
 msgstr "mes"
 
-#: ../../include/datetime.php:152
+#: ../../include/datetime.php:152 ../../include/datetime.php:238
 msgid "months"
 msgstr "meses"
 
-#: ../../include/datetime.php:153
+#: ../../include/datetime.php:153 ../../include/datetime.php:239
 msgid "week"
 msgstr "semana"
 
-#: ../../include/datetime.php:153
+#: ../../include/datetime.php:153 ../../include/datetime.php:239
 msgid "weeks"
 msgstr "semanas"
 
-#: ../../include/datetime.php:154
+#: ../../include/datetime.php:154 ../../include/datetime.php:115
+#: ../../include/datetime.php:240
 msgid "day"
 msgstr "día"
 
-#: ../../include/datetime.php:154
+#: ../../include/datetime.php:154 ../../include/datetime.php:240
 msgid "days"
 msgstr "días"
 
-#: ../../include/datetime.php:155
+#: ../../include/datetime.php:155 ../../include/datetime.php:241
 msgid "hour"
 msgstr "hora"
 
-#: ../../include/datetime.php:155
+#: ../../include/datetime.php:155 ../../include/datetime.php:241
 msgid "hours"
 msgstr "horas"
 
-#: ../../include/datetime.php:156
+#: ../../include/datetime.php:156 ../../include/datetime.php:242
 msgid "minute"
 msgstr "minuto"
 
-#: ../../include/datetime.php:156
+#: ../../include/datetime.php:156 ../../include/datetime.php:242
 msgid "minutes"
 msgstr "minutos"
 
-#: ../../include/datetime.php:157
+#: ../../include/datetime.php:157 ../../include/datetime.php:243
 msgid "second"
 msgstr "segundo"
 
-#: ../../include/datetime.php:157
+#: ../../include/datetime.php:157 ../../include/datetime.php:243
 msgid "seconds"
 msgstr "segundos"
 
-#: ../../include/datetime.php:164
+#: ../../include/datetime.php:164 ../../include/datetime.php:250
 msgid " ago"
 msgstr " hace"
 
-#: ../../include/nav.php:56 ../../include/nav.php:91
+#: ../../include/nav.php:56 ../../include/nav.php:91 ../../include/nav.php:55
+#: ../../include/nav.php:93
 msgid "Home"
 msgstr "Home"
 
-#: ../../include/nav.php:64
+#: ../../include/nav.php:64 ../../include/nav.php:67
 msgid "Apps"
 msgstr "Aplicaciones"
 
-#: ../../include/nav.php:77
+#: ../../include/nav.php:77 ../../include/nav.php:81
 msgid "Directory"
 msgstr "Directorio"
 
-#: ../../include/nav.php:87
+#: ../../include/nav.php:87 ../../include/nav.php:91
 msgid "Network"
 msgstr "Red"
 
-#: ../../include/nav.php:96
+#: ../../include/nav.php:96 ../../include/nav.php:99
 msgid "Notifications"
 msgstr "Notificaciones"
 
-#: ../../include/nav.php:104
+#: ../../include/nav.php:104 ../../include/nav.php:105
 msgid "Manage"
 msgstr "Administrar"
 
-#: ../../include/nav.php:107
+#: ../../include/nav.php:107 ../../mod/admin.php:554 ../../include/nav.php:108
 msgid "Settings"
 msgstr "Configuración"
 
-#: ../../include/nav.php:109
+#: ../../include/nav.php:109 ../../mod/profiles.php:458
 msgid "Profiles"
 msgstr "Perfiles"
 
 #: ../../include/items.php:1004 ../../include/items.php:1027
+#: ../../include/profile_advanced.php:36 ../../include/items.php:1195
 msgid "Birthday:"
 msgstr "Fecha de nacimiento:"
 
 #: ../../include/items.php:1348 ../../include/items.php:1371
+#: ../../include/items.php:1584
 msgid "You have a new follower at "
 msgstr "Tienes un nuevo seguidor en "
 
-#: ../../include/group.php:130
+#: ../../include/group.php:130 ../../include/group.php:147
 msgid "Create a new group"
 msgstr "Crear un nuevo grupo"
 
-#: ../../include/group.php:131
+#: ../../include/group.php:131 ../../include/group.php:148
 msgid "Everybody"
 msgstr "Todo el mundo"
 
-#: ../../include/oembed.php:57
+#: ../../include/oembed.php:57 ../../include/oembed.php:99
 msgid "Embedding disabled"
 msgstr "Embedding desabilitado"
 
-#: ../../boot.php:2418
+#: ../../boot.php:2418 ../../boot.php:1005
 msgid "Birthday Reminders"
 msgstr "Recordatorios de cumpleaños"
 
 #: ../../mod/profile.php:160 ../../mod/editpost.php:66
-#: ../../mod/network.php:95
+#: ../../mod/network.php:95 ../../mod/editpost.php:95
+#: ../../include/conversation.php:752
 msgid "Insert Vorbis [.ogg] video"
 msgstr "Insertar video Vorbis [.ogg]"
 
 #: ../../mod/profile.php:161 ../../mod/editpost.php:67
-#: ../../mod/network.php:96
+#: ../../mod/network.php:96 ../../mod/editpost.php:96
+#: ../../include/conversation.php:753
 msgid "Insert Vorbis [.ogg] audio"
 msgstr "Insertar audio Vorbis [.ogg]"
 
 #: ../../mod/profile.php:354 ../../mod/display.php:222
 #: ../../mod/editpost.php:62 ../../mod/network.php:392
+#: ../../mod/editpost.php:90 ../../include/group.php:172
+#: ../../include/group.php:173 ../../include/conversation.php:418
 msgid "Edit"
 msgstr "Editar"
 
-#: ../../mod/search.php:54
+#: ../../mod/search.php:54 ../../mod/community.php:56 ../../mod/search.php:65
 msgid "No results."
 msgstr "No hay resultados."
 
@@ -2625,12 +2852,2206 @@ msgstr "Editar mensaje"
 #, php-format
 msgid "Cannot locate DNS info for database server '%s'"
 msgstr ""
-"No se puede encontrar información de DNS para el servidor de base de datos "
-"'%s'"
+"No se puede encontrar información de DNS para el servidor de base de datos '%"
+"s'"
 
-#: ../../boot.php:2016
+#: ../../boot.php:2016 ../../include/text.php:550
 #, php-format
 msgid "%d Contact"
 msgid_plural "%d Contacts"
 msgstr[0] "%d Contacto"
 msgstr[1] "%d Contactos"
+
+#: ../../mod/oexchange.php:27
+msgid "Post successful."
+msgstr ""
+
+#: ../../mod/crepair.php:44
+msgid "Contact settings applied."
+msgstr ""
+
+#: ../../mod/crepair.php:46
+msgid "Contact update failed."
+msgstr ""
+
+#: ../../mod/crepair.php:76
+msgid "Repair Contact Settings"
+msgstr ""
+
+#: ../../mod/crepair.php:78
+msgid ""
+"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect "
+"information your communications with this contact will stop working."
+msgstr ""
+
+#: ../../mod/crepair.php:79
+msgid ""
+"Please use your browser 'Back' button <strong>now</strong> if you are "
+"uncertain what to do on this page."
+msgstr ""
+
+#: ../../mod/crepair.php:87 ../../mod/admin.php:467 ../../mod/admin.php:476
+msgid "Name"
+msgstr ""
+
+#: ../../mod/crepair.php:88
+msgid "Account Nickname"
+msgstr ""
+
+#: ../../mod/crepair.php:89
+msgid "@Tagname - overrides Name/Nickname"
+msgstr ""
+
+#: ../../mod/crepair.php:90
+msgid "Account URL"
+msgstr ""
+
+#: ../../mod/crepair.php:91
+msgid "Friend Request URL"
+msgstr ""
+
+#: ../../mod/crepair.php:92
+msgid "Friend Confirm URL"
+msgstr ""
+
+#: ../../mod/crepair.php:93
+msgid "Notification Endpoint URL"
+msgstr ""
+
+#: ../../mod/crepair.php:94
+msgid "Poll/Feed URL"
+msgstr ""
+
+#: ../../mod/help.php:29
+msgid "Help:"
+msgstr ""
+
+#: ../../mod/help.php:33 ../../include/nav.php:64
+msgid "Help"
+msgstr ""
+
+#: ../../mod/wall_attach.php:57
+#, php-format
+msgid "File exceeds size limit of %d"
+msgstr ""
+
+#: ../../mod/wall_attach.php:87 ../../mod/wall_attach.php:98
+msgid "File upload failed."
+msgstr ""
+
+#: ../../mod/fsuggest.php:63
+msgid "Friend suggestion sent."
+msgstr ""
+
+#: ../../mod/fsuggest.php:97
+msgid "Suggest Friends"
+msgstr ""
+
+#: ../../mod/fsuggest.php:99
+#, php-format
+msgid "Suggest a friend for %s"
+msgstr ""
+
+#: ../../mod/events.php:112 ../../mod/photos.php:835 ../../mod/notes.php:46
+#: ../../mod/profile.php:117
+msgid "Status"
+msgstr ""
+
+#: ../../mod/events.php:113 ../../mod/photos.php:836 ../../mod/notes.php:47
+#: ../../mod/profperm.php:103 ../../mod/profile.php:118
+#: ../../include/profile_advanced.php:7
+msgid "Profile"
+msgstr ""
+
+#: ../../mod/events.php:114 ../../mod/photos.php:837 ../../mod/notes.php:48
+#: ../../mod/profile.php:119
+msgid "Photos"
+msgstr ""
+
+#: ../../mod/events.php:115 ../../mod/events.php:120 ../../mod/photos.php:838
+#: ../../mod/notes.php:49 ../../mod/profile.php:120
+msgid "Events"
+msgstr ""
+
+#: ../../mod/events.php:116 ../../mod/photos.php:839 ../../mod/notes.php:50
+#: ../../mod/notes.php:55 ../../mod/profile.php:121
+msgid "Personal Notes"
+msgstr ""
+
+#: ../../mod/events.php:210
+msgid "Create New Event"
+msgstr ""
+
+#: ../../mod/events.php:213
+msgid "Previous"
+msgstr ""
+
+#: ../../mod/events.php:216
+msgid "Next"
+msgstr ""
+
+#: ../../mod/events.php:223
+msgid "l, F j"
+msgstr ""
+
+#: ../../mod/events.php:235
+msgid "Edit event"
+msgstr ""
+
+#: ../../mod/events.php:305
+msgid "hour:minute"
+msgstr ""
+
+#: ../../mod/events.php:314
+msgid "Event details"
+msgstr ""
+
+#: ../../mod/events.php:315
+#, php-format
+msgid "Format is %s %s. Starting date and Description are required."
+msgstr ""
+
+#: ../../mod/events.php:316
+msgid "Event Starts:"
+msgstr ""
+
+#: ../../mod/events.php:319
+msgid "Finish date/time is not known or not relevant"
+msgstr ""
+
+#: ../../mod/events.php:321
+msgid "Event Finishes:"
+msgstr ""
+
+#: ../../mod/events.php:324
+msgid "Adjust for viewer timezone"
+msgstr ""
+
+#: ../../mod/events.php:326
+msgid "Description:"
+msgstr ""
+
+#: ../../mod/events.php:330
+msgid "Share this event"
+msgstr ""
+
+#: ../../mod/photos.php:57 ../../mod/settings.php:9
+msgid "everybody"
+msgstr ""
+
+#: ../../mod/photos.php:617
+msgid "Image file is empty."
+msgstr ""
+
+#: ../../mod/photos.php:734 ../../mod/community.php:9
+#: ../../mod/dfrn_request.php:590 ../../mod/viewcontacts.php:16
+#: ../../mod/display.php:7 ../../mod/search.php:13 ../../mod/directory.php:20
+msgid "Public access denied."
+msgstr ""
+
+#: ../../mod/photos.php:821
+msgid "Access to this item is restricted."
+msgstr ""
+
+#: ../../mod/photos.php:1184 ../../mod/photos.php:1223
+#: ../../mod/photos.php:1254 ../../include/conversation.php:409
+#: ../../boot.php:411
+msgid "Comment"
+msgstr ""
+
+#: ../../mod/community.php:14
+msgid "Not available."
+msgstr ""
+
+#: ../../mod/community.php:26 ../../include/nav.php:79
+msgid "Community"
+msgstr ""
+
+#: ../../mod/editpost.php:75 ../../include/conversation.php:733
+msgid "Post to Email"
+msgstr ""
+
+#: ../../mod/editpost.php:92 ../../include/conversation.php:749
+msgid "Attach file"
+msgstr ""
+
+#: ../../mod/editpost.php:109 ../../include/conversation.php:767
+msgid "Public post"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:505
+#, php-format
+msgid "Welcome home %s."
+msgstr ""
+
+#: ../../mod/dfrn_request.php:506
+#, php-format
+msgid "Please confirm your introduction/connection request to %s."
+msgstr ""
+
+#: ../../mod/dfrn_request.php:507
+msgid "Confirm"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:631
+#, php-format
+msgid ""
+"Diaspora members: Please do not use this form. Instead, enter \"%s\" into "
+"your Diaspora search bar."
+msgstr ""
+
+#: ../../mod/dfrn_request.php:634
+msgid ""
+"Please enter your 'Identity Address' from one of the following supported "
+"social networks:"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:638
+msgid ""
+"Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, "
+"testuser@identi.ca"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:640
+#, php-format
+msgid "Does %s know you?"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:647 ../../include/contact_selectors.php:78
+msgid "Diaspora"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:648
+msgid "- please share from your own site as noted above"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:649
+msgid "Your Identity Address:"
+msgstr ""
+
+#: ../../mod/install.php:75
+msgid "Proceed with Installation"
+msgstr ""
+
+#: ../../mod/install.php:77
+msgid "Your Friendika site database has been installed."
+msgstr ""
+
+#: ../../mod/install.php:81
+msgid "Proceed to registration"
+msgstr ""
+
+#: ../../mod/install.php:124
+msgid "Friendika Social Network"
+msgstr ""
+
+#: ../../mod/install.php:125
+msgid "Installation"
+msgstr ""
+
+#: ../../mod/install.php:126
+msgid ""
+"In order to install Friendika we need to know how to connect to your "
+"database."
+msgstr ""
+
+#: ../../mod/install.php:127
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
+msgstr ""
+
+#: ../../mod/install.php:128
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
+msgstr ""
+
+#: ../../mod/install.php:129
+msgid "Database Server Name"
+msgstr ""
+
+#: ../../mod/install.php:130
+msgid "Database Login Name"
+msgstr ""
+
+#: ../../mod/install.php:131
+msgid "Database Login Password"
+msgstr ""
+
+#: ../../mod/install.php:132
+msgid "Database Name"
+msgstr ""
+
+#: ../../mod/install.php:133
+msgid "Please select a default timezone for your website"
+msgstr ""
+
+#: ../../mod/install.php:134
+msgid ""
+"Site administrator email address. Your account email address must match this "
+"in order to use the web admin panel."
+msgstr ""
+
+#: ../../mod/install.php:204
+msgid "Error: mb_string PHP module required but not installed."
+msgstr ""
+
+#: ../../mod/localtime.php:12 ../../include/event.php:11
+#: ../../include/bb2diaspora.php:200
+msgid "l F d, Y \\@ g:i A"
+msgstr ""
+
+#: ../../mod/localtime.php:24
+msgid "Time Conversion"
+msgstr ""
+
+#: ../../mod/localtime.php:26
+msgid ""
+"Friendika provides this service for sharing events with other networks and "
+"friends in unknown timezones."
+msgstr ""
+
+#: ../../mod/localtime.php:30
+#, php-format
+msgid "Converted localtime: %s"
+msgstr ""
+
+#: ../../mod/localtime.php:32
+#, php-format
+msgid "UTC time: %s"
+msgstr ""
+
+#: ../../mod/localtime.php:36
+msgid "Please select your timezone:"
+msgstr ""
+
+#: ../../mod/update_community.php:18 ../../mod/update_network.php:22
+#: ../../mod/update_profile.php:41
+msgid "[Embedded content - reload page to view]"
+msgstr ""
+
+#: ../../mod/match.php:10
+msgid "Profile Match"
+msgstr ""
+
+#: ../../mod/match.php:18
+msgid "No keywords to match. Please add keywords to your default profile."
+msgstr ""
+
+#: ../../mod/match.php:54
+msgid "No matches"
+msgstr ""
+
+#: ../../mod/notifications.php:74
+msgid "Pending Friend/Connect Notifications"
+msgstr ""
+
+#: ../../mod/notifications.php:106
+msgid "Friend Suggestion"
+msgstr ""
+
+#: ../../mod/notifications.php:108
+#, php-format
+msgid "suggested by %s"
+msgstr ""
+
+#: ../../mod/notifications.php:143
+msgid "Sharer"
+msgstr ""
+
+#: ../../mod/contacts.php:32
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../mod/contacts.php:41
+msgid "Find People With Shared Interests"
+msgstr ""
+
+#: ../../mod/contacts.php:270
+msgid "Privacy Unavailable"
+msgstr ""
+
+#: ../../mod/contacts.php:271
+msgid "Private communications are not available for this contact."
+msgstr ""
+
+#: ../../mod/contacts.php:281
+msgid "Suggest friends"
+msgstr ""
+
+#: ../../mod/contacts.php:285
+#, php-format
+msgid "Network type: %s"
+msgstr ""
+
+#: ../../mod/contacts.php:290
+msgid "Profile Visibility"
+msgstr ""
+
+#: ../../mod/contacts.php:291
+#, php-format
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
+msgstr ""
+
+#: ../../mod/contacts.php:292
+msgid "Contact Information / Notes"
+msgstr ""
+
+#: ../../mod/contacts.php:293
+msgid "Online Reputation"
+msgstr ""
+
+#: ../../mod/contacts.php:294
+msgid ""
+"Occasionally your friends may wish to inquire about this person's online "
+"legitimacy."
+msgstr ""
+
+#: ../../mod/contacts.php:295
+msgid ""
+"You may help them choose whether or not to interact with this person by "
+"providing a <em>reputation</em> to guide them."
+msgstr ""
+
+#: ../../mod/contacts.php:296
+msgid ""
+"Please take a moment to elaborate on this selection if you feel it could be "
+"helpful to others."
+msgstr ""
+
+#: ../../mod/contacts.php:297 ../../mod/contacts.php:412
+#: ../../mod/viewcontacts.php:61
+#, php-format
+msgid "Visit %s's profile [%s]"
+msgstr ""
+
+#: ../../mod/contacts.php:300
+msgid "Repair contact URL settings"
+msgstr ""
+
+#: ../../mod/contacts.php:301
+msgid "Repair contact URL settings (WARNING: Advanced)"
+msgstr ""
+
+#: ../../mod/contacts.php:302
+msgid "View conversations"
+msgstr ""
+
+#: ../../mod/lostpass.php:16
+msgid "No valid account found."
+msgstr ""
+
+#: ../../mod/lostpass.php:31
+msgid "Password reset request issued. Check your email."
+msgstr ""
+
+#: ../../mod/lostpass.php:64
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
+msgstr ""
+
+#: ../../mod/lostpass.php:83
+msgid "Your password has been reset as requested."
+msgstr ""
+
+#: ../../mod/lostpass.php:84
+msgid "Your new password is"
+msgstr ""
+
+#: ../../mod/lostpass.php:85
+msgid "Save or copy your new password - and then"
+msgstr ""
+
+#: ../../mod/lostpass.php:86
+msgid "click here to login"
+msgstr ""
+
+#: ../../mod/lostpass.php:87
+msgid ""
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
+msgstr ""
+
+#: ../../mod/lostpass.php:118
+msgid "Forgot your Password?"
+msgstr ""
+
+#: ../../mod/lostpass.php:119
+msgid ""
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
+msgstr ""
+
+#: ../../mod/lostpass.php:120
+msgid "Nickname or Email: "
+msgstr ""
+
+#: ../../mod/lostpass.php:121
+msgid "Reset"
+msgstr ""
+
+#: ../../mod/settings.php:161
+msgid "Failed to connect with email account using the settings provided."
+msgstr ""
+
+#: ../../mod/settings.php:311 ../../include/nav.php:108
+msgid "Account settings"
+msgstr ""
+
+#: ../../mod/settings.php:312
+msgid "Plugin settings"
+msgstr ""
+
+#: ../../mod/settings.php:382 ../../mod/admin.php:133 ../../mod/admin.php:446
+msgid "Normal Account"
+msgstr ""
+
+#: ../../mod/settings.php:383
+msgid "This account is a normal personal profile"
+msgstr ""
+
+#: ../../mod/settings.php:386 ../../mod/admin.php:134 ../../mod/admin.php:447
+msgid "Soapbox Account"
+msgstr ""
+
+#: ../../mod/settings.php:387
+msgid "Automatically approve all connection/friend requests as read-only fans"
+msgstr ""
+
+#: ../../mod/settings.php:390 ../../mod/admin.php:135 ../../mod/admin.php:448
+msgid "Community/Celebrity Account"
+msgstr ""
+
+#: ../../mod/settings.php:391
+msgid "Automatically approve all connection/friend requests as read-write fans"
+msgstr ""
+
+#: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:449
+msgid "Automatic Friend Account"
+msgstr ""
+
+#: ../../mod/settings.php:395
+msgid "Automatically approve all connection/friend requests as friends"
+msgstr ""
+
+#: ../../mod/settings.php:405
+msgid "OpenID:"
+msgstr ""
+
+#: ../../mod/settings.php:405
+msgid "(Optional) Allow this OpenID to login to this account."
+msgstr ""
+
+#: ../../mod/settings.php:415
+msgid "Publish your default profile in your local site directory?"
+msgstr ""
+
+#: ../../mod/settings.php:421
+msgid "Publish your default profile in the global social directory?"
+msgstr ""
+
+#: ../../mod/settings.php:429
+msgid "Hide your contact/friend list from viewers of your default profile?"
+msgstr ""
+
+#: ../../mod/settings.php:433
+msgid "Hide profile details and all your messages from unknown viewers?"
+msgstr ""
+
+#: ../../mod/settings.php:461 ../../mod/profile_photo.php:196
+msgid "or"
+msgstr ""
+
+#: ../../mod/settings.php:466
+msgid "Your Identity Address is"
+msgstr ""
+
+#: ../../mod/settings.php:487
+msgid "Export Personal Data"
+msgstr ""
+
+#: ../../mod/settings.php:490
+msgid "Password Settings"
+msgstr ""
+
+#: ../../mod/settings.php:491
+msgid "New Password:"
+msgstr ""
+
+#: ../../mod/settings.php:492
+msgid "Confirm:"
+msgstr ""
+
+#: ../../mod/settings.php:492
+msgid "Leave password fields blank unless changing"
+msgstr ""
+
+#: ../../mod/settings.php:496
+msgid "Basic Settings"
+msgstr ""
+
+#: ../../mod/settings.php:497 ../../include/profile_advanced.php:10
+msgid "Full Name:"
+msgstr ""
+
+#: ../../mod/settings.php:498
+msgid "Email Address:"
+msgstr ""
+
+#: ../../mod/settings.php:499
+msgid "Your Timezone:"
+msgstr ""
+
+#: ../../mod/settings.php:500
+msgid "Default Post Location:"
+msgstr ""
+
+#: ../../mod/settings.php:501
+msgid "Use Browser Location:"
+msgstr ""
+
+#: ../../mod/settings.php:502
+msgid "Display Theme:"
+msgstr ""
+
+#: ../../mod/settings.php:506
+msgid "Security and Privacy Settings"
+msgstr ""
+
+#: ../../mod/settings.php:508
+msgid "Maximum Friend Requests/Day:"
+msgstr ""
+
+#: ../../mod/settings.php:508
+msgid "(to prevent spam abuse)"
+msgstr ""
+
+#: ../../mod/settings.php:510
+msgid "(click to open/close)"
+msgstr ""
+
+#: ../../mod/settings.php:514
+msgid "Allow friends to post to your profile page:"
+msgstr ""
+
+#: ../../mod/settings.php:515
+msgid "Automatically expire posts after days:"
+msgstr ""
+
+#: ../../mod/settings.php:515
+msgid "If empty, posts will not expire. Expired posts will be deleted"
+msgstr ""
+
+#: ../../mod/settings.php:524
+msgid "Notification Settings"
+msgstr ""
+
+#: ../../mod/settings.php:525
+msgid "Send a notification email when:"
+msgstr ""
+
+#: ../../mod/settings.php:526
+msgid "You receive an introduction"
+msgstr ""
+
+#: ../../mod/settings.php:527
+msgid "Your introductions are confirmed"
+msgstr ""
+
+#: ../../mod/settings.php:528
+msgid "Someone writes on your profile wall"
+msgstr ""
+
+#: ../../mod/settings.php:529
+msgid "Someone writes a followup comment"
+msgstr ""
+
+#: ../../mod/settings.php:530
+msgid "You receive a private message"
+msgstr ""
+
+#: ../../mod/settings.php:534
+msgid "Email/Mailbox Setup"
+msgstr ""
+
+#: ../../mod/settings.php:535
+msgid ""
+"If you wish to communicate with email contacts using this service "
+"(optional), please specify how to connect to your mailbox."
+msgstr ""
+
+#: ../../mod/settings.php:536
+msgid "Last successful email check:"
+msgstr ""
+
+#: ../../mod/settings.php:537
+msgid "Email access is disabled on this site."
+msgstr ""
+
+#: ../../mod/settings.php:538
+msgid "IMAP server name:"
+msgstr ""
+
+#: ../../mod/settings.php:539
+msgid "IMAP port:"
+msgstr ""
+
+#: ../../mod/settings.php:540
+msgid "Security:"
+msgstr ""
+
+#: ../../mod/settings.php:540
+msgid "None"
+msgstr ""
+
+#: ../../mod/settings.php:541
+msgid "Email login name:"
+msgstr ""
+
+#: ../../mod/settings.php:542
+msgid "Email password:"
+msgstr ""
+
+#: ../../mod/settings.php:543
+msgid "Reply-to address:"
+msgstr ""
+
+#: ../../mod/settings.php:544
+msgid "Send public posts to all email contacts:"
+msgstr ""
+
+#: ../../mod/settings.php:549
+msgid "Advanced Page Settings"
+msgstr ""
+
+#: ../../mod/network.php:51
+msgid "View Conversations"
+msgstr ""
+
+#: ../../mod/network.php:54
+msgid "View New Items"
+msgstr ""
+
+#: ../../mod/network.php:60
+msgid "View Any Items"
+msgstr ""
+
+#: ../../mod/network.php:68
+msgid "View Starred Items"
+msgstr ""
+
+#: ../../mod/network.php:76
+msgid "View Bookmarks"
+msgstr ""
+
+#: ../../mod/network.php:99
+msgid "Saved Searches"
+msgstr ""
+
+#: ../../mod/network.php:102
+msgid "Remove term"
+msgstr ""
+
+#: ../../mod/network.php:154
+#, php-format
+msgid "Warning: This group contains %s member from an insecure network."
+msgid_plural ""
+"Warning: This group contains %s members from an insecure network."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../mod/network.php:157
+msgid "Private messages to this group are at risk of public disclosure."
+msgstr ""
+
+#: ../../mod/network.php:254
+msgid "Contact: "
+msgstr ""
+
+#: ../../mod/network.php:256
+msgid "Private messages to this person are at risk of public disclosure."
+msgstr ""
+
+#: ../../mod/network.php:261
+msgid "Invalid contact."
+msgstr ""
+
+#: ../../mod/notes.php:74 ../../include/text.php:612
+msgid "Save"
+msgstr ""
+
+#: ../../mod/newmember.php:6
+msgid "Welcome to Friendika"
+msgstr ""
+
+#: ../../mod/newmember.php:8
+msgid "New Member Checklist"
+msgstr ""
+
+#: ../../mod/newmember.php:12
+msgid ""
+"We would like to offer some tips and links to help make your experience "
+"enjoyable. Click any item to visit the relevant page."
+msgstr ""
+
+#: ../../mod/newmember.php:16
+msgid ""
+"On your <em>Settings</em> page -  change your initial password. Also make a "
+"note of your Identity Address. This will be useful in making friends."
+msgstr ""
+
+#: ../../mod/newmember.php:18
+msgid ""
+"Review the other settings, particularly the privacy settings. An unpublished "
+"directory listing is like having an unlisted phone number. In general, you "
+"should probably publish your listing - unless all of your friends and "
+"potential friends know exactly how to find you."
+msgstr ""
+
+#: ../../mod/newmember.php:20
+msgid ""
+"Upload a profile photo if you have not done so already. Studies have shown "
+"that people with real photos of themselves are ten times more likely to make "
+"friends than people who do not."
+msgstr ""
+
+#: ../../mod/newmember.php:23
+msgid ""
+"Authorise the Facebook Connector if you currently have a Facebook account "
+"and we will (optionally) import all your Facebook friends and conversations."
+msgstr ""
+
+#: ../../mod/newmember.php:28
+msgid ""
+"Enter your email access information on your Settings page if you wish to "
+"import and interact with friends or mailing lists from your email INBOX"
+msgstr ""
+
+#: ../../mod/newmember.php:30
+msgid ""
+"Edit your <strong>default</strong> profile to your liking. Review the "
+"settings for hiding your list of friends and hiding the profile from unknown "
+"visitors."
+msgstr ""
+
+#: ../../mod/newmember.php:32
+msgid ""
+"Set some public keywords for your default profile which describe your "
+"interests. We may be able to find other people with similar interests and "
+"suggest friendships."
+msgstr ""
+
+#: ../../mod/newmember.php:34
+msgid ""
+"Your Contacts page is your gateway to managing friendships and connecting "
+"with friends on other networks. Typically you enter their address or site "
+"URL in the <em>Connect</em> dialog."
+msgstr ""
+
+#: ../../mod/newmember.php:36
+msgid ""
+"The Directory page lets you find other people in this network or other "
+"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on "
+"their profile page. Provide your own Identity Address if requested."
+msgstr ""
+
+#: ../../mod/newmember.php:38
+msgid ""
+"Once you have made some friends, organize them into private conversation "
+"groups from the sidebar of your Contacts page and then you can interact with "
+"each group privately on your Network page."
+msgstr ""
+
+#: ../../mod/newmember.php:40
+msgid ""
+"Our <strong>help</strong> pages may be consulted for detail on other program "
+"features and resources."
+msgstr ""
+
+#: ../../mod/attach.php:8
+msgid "Item not available."
+msgstr ""
+
+#: ../../mod/attach.php:20
+msgid "Item was not found."
+msgstr ""
+
+#: ../../mod/group.php:82
+msgid "Create a group of contacts/friends."
+msgstr ""
+
+#: ../../mod/group.php:83 ../../mod/group.php:166
+msgid "Group Name: "
+msgstr ""
+
+#: ../../mod/group.php:164 ../../mod/profperm.php:105
+msgid "Click on a contact to add or remove."
+msgstr ""
+
+#: ../../mod/group.php:165
+msgid "Group Editor"
+msgstr ""
+
+#: ../../mod/group.php:180
+msgid "Members"
+msgstr ""
+
+#: ../../mod/group.php:195
+msgid "All Contacts"
+msgstr ""
+
+#: ../../mod/profperm.php:25 ../../mod/profperm.php:55
+msgid "Invalid profile identifier."
+msgstr ""
+
+#: ../../mod/profperm.php:101
+msgid "Profile Visibility Editor"
+msgstr ""
+
+#: ../../mod/profperm.php:114
+msgid "Visible To"
+msgstr ""
+
+#: ../../mod/profperm.php:128
+msgid "All Contacts (with secure profile access)"
+msgstr ""
+
+#: ../../mod/register.php:53
+msgid "An invitation is required."
+msgstr ""
+
+#: ../../mod/register.php:58
+msgid "Invitation could not be verified."
+msgstr ""
+
+#: ../../mod/register.php:112
+msgid "That doesn't appear to be your full (First Last) name."
+msgstr ""
+
+#: ../../mod/register.php:511
+msgid "Membership on this site is by invitation only."
+msgstr ""
+
+#: ../../mod/register.php:512
+msgid "Your invitation ID: "
+msgstr ""
+
+#: ../../mod/friendika.php:42
+msgid "This is Friendika version"
+msgstr ""
+
+#: ../../mod/friendika.php:43
+msgid "running at web location"
+msgstr ""
+
+#: ../../mod/friendika.php:45
+msgid ""
+"Shared content within the Friendika network is provided under the <a href="
+"\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution "
+"3.0 license</a>"
+msgstr ""
+
+#: ../../mod/friendika.php:47
+msgid ""
+"Please visit <a href=\"http://project.friendika.com\">Project.Friendika.com</"
+"a> to learn more about the Friendika project."
+msgstr ""
+
+#: ../../mod/friendika.php:49
+msgid "Bug reports and issues: please visit"
+msgstr ""
+
+#: ../../mod/friendika.php:50
+msgid ""
+"Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - "
+"dot com"
+msgstr ""
+
+#: ../../mod/friendika.php:55
+msgid "Installed plugins/addons/apps"
+msgstr ""
+
+#: ../../mod/friendika.php:63
+msgid "No installed plugins/addons/apps"
+msgstr ""
+
+#: ../../mod/item.php:681 ../../mod/item.php:768 ../../mod/dfrn_notify.php:684
+msgid "Administrator@"
+msgstr ""
+
+#: ../../mod/item.php:771
+#, php-format
+msgid "%s posted to your profile wall at %s"
+msgstr ""
+
+#: ../../mod/item.php:821
+#, php-format
+msgid "You may visit them online at %s"
+msgstr ""
+
+#: ../../mod/profile_photo.php:193
+msgid "Upload File:"
+msgstr ""
+
+#: ../../mod/profile_photo.php:194
+msgid "Upload Profile Photo"
+msgstr ""
+
+#: ../../mod/profile_photo.php:195
+msgid "Upload"
+msgstr ""
+
+#: ../../mod/profile_photo.php:196
+msgid "skip this step"
+msgstr ""
+
+#: ../../mod/profile_photo.php:196
+msgid "select a photo from your photo albums"
+msgstr ""
+
+#: ../../mod/profile_photo.php:209
+msgid "Crop Image"
+msgstr ""
+
+#: ../../mod/profile_photo.php:210
+msgid "Please adjust the image cropping for optimum viewing."
+msgstr ""
+
+#: ../../mod/profile_photo.php:211
+msgid "Done Editing"
+msgstr ""
+
+#: ../../mod/message.php:98 ../../include/conversation.php:700
+msgid "Please enter a link URL:"
+msgstr ""
+
+#: ../../mod/message.php:166
+msgid "D, d M Y - g:i A"
+msgstr ""
+
+#: ../../mod/admin.php:66 ../../mod/admin.php:299
+msgid "Site"
+msgstr ""
+
+#: ../../mod/admin.php:67 ../../mod/admin.php:463 ../../mod/admin.php:475
+msgid "Users"
+msgstr ""
+
+#: ../../mod/admin.php:68 ../../mod/admin.php:552 ../../mod/admin.php:589
+msgid "Plugins"
+msgstr ""
+
+#: ../../mod/admin.php:69
+msgid "Update"
+msgstr ""
+
+#: ../../mod/admin.php:83 ../../mod/admin.php:654
+msgid "Logs"
+msgstr ""
+
+#: ../../mod/admin.php:88
+msgid "User registrations waiting for confirmation"
+msgstr ""
+
+#: ../../mod/admin.php:151 ../../mod/admin.php:298 ../../mod/admin.php:462
+#: ../../mod/admin.php:551 ../../mod/admin.php:588 ../../mod/admin.php:653
+msgid "Administration"
+msgstr ""
+
+#: ../../mod/admin.php:152
+msgid "Summary"
+msgstr ""
+
+#: ../../mod/admin.php:153
+msgid "Registered users"
+msgstr ""
+
+#: ../../mod/admin.php:155
+msgid "Pending registrations"
+msgstr ""
+
+#: ../../mod/admin.php:156
+msgid "Version"
+msgstr ""
+
+#: ../../mod/admin.php:158
+msgid "Active plugins"
+msgstr ""
+
+#: ../../mod/admin.php:247
+msgid "Site settings updated."
+msgstr ""
+
+#: ../../mod/admin.php:291
+msgid "Closed"
+msgstr ""
+
+#: ../../mod/admin.php:292
+msgid "Requires approval"
+msgstr ""
+
+#: ../../mod/admin.php:293
+msgid "Open"
+msgstr ""
+
+#: ../../mod/admin.php:302
+msgid "File upload"
+msgstr ""
+
+#: ../../mod/admin.php:303
+msgid "Policies"
+msgstr ""
+
+#: ../../mod/admin.php:304
+msgid "Advanced"
+msgstr ""
+
+#: ../../mod/admin.php:308 ../../addon/statusnet/statusnet.php:462
+msgid "Site name"
+msgstr ""
+
+#: ../../mod/admin.php:309
+msgid "Banner/Logo"
+msgstr ""
+
+#: ../../mod/admin.php:310
+msgid "System language"
+msgstr ""
+
+#: ../../mod/admin.php:311
+msgid "System theme"
+msgstr ""
+
+#: ../../mod/admin.php:313
+msgid "Maximum image size"
+msgstr ""
+
+#: ../../mod/admin.php:315
+msgid "Register policy"
+msgstr ""
+
+#: ../../mod/admin.php:316
+msgid "Register text"
+msgstr ""
+
+#: ../../mod/admin.php:317
+msgid "Allowed friend domains"
+msgstr ""
+
+#: ../../mod/admin.php:318
+msgid "Allowed email domains"
+msgstr ""
+
+#: ../../mod/admin.php:319
+msgid "Block public"
+msgstr ""
+
+#: ../../mod/admin.php:320
+msgid "Force publish"
+msgstr ""
+
+#: ../../mod/admin.php:321
+msgid "Global directory update URL"
+msgstr ""
+
+#: ../../mod/admin.php:323
+msgid "Block multiple registrations"
+msgstr ""
+
+#: ../../mod/admin.php:324
+msgid "OpenID support"
+msgstr ""
+
+#: ../../mod/admin.php:325
+msgid "Gravatar support"
+msgstr ""
+
+#: ../../mod/admin.php:326
+msgid "Fullname check"
+msgstr ""
+
+#: ../../mod/admin.php:327
+msgid "UTF-8 Regular expressions"
+msgstr ""
+
+#: ../../mod/admin.php:328
+msgid "Show Community Page"
+msgstr ""
+
+#: ../../mod/admin.php:329
+msgid "Enable OStatus support"
+msgstr ""
+
+#: ../../mod/admin.php:330
+msgid "Enable Diaspora support"
+msgstr ""
+
+#: ../../mod/admin.php:331
+msgid "Only allow Friendika contacts"
+msgstr ""
+
+#: ../../mod/admin.php:332
+msgid "Verify SSL"
+msgstr ""
+
+#: ../../mod/admin.php:333
+msgid "Proxy user"
+msgstr ""
+
+#: ../../mod/admin.php:334
+msgid "Proxy URL"
+msgstr ""
+
+#: ../../mod/admin.php:335
+msgid "Network timeout"
+msgstr ""
+
+#: ../../mod/admin.php:356
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked/unblocked"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../mod/admin.php:363
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../mod/admin.php:397
+#, php-format
+msgid "User '%s' deleted"
+msgstr ""
+
+#: ../../mod/admin.php:404
+#, php-format
+msgid "User '%s' unblocked"
+msgstr ""
+
+#: ../../mod/admin.php:404
+#, php-format
+msgid "User '%s' blocked"
+msgstr ""
+
+#: ../../mod/admin.php:465
+msgid "select all"
+msgstr ""
+
+#: ../../mod/admin.php:466
+msgid "User registrations waiting for confirm"
+msgstr ""
+
+#: ../../mod/admin.php:467
+msgid "Request date"
+msgstr ""
+
+#: ../../mod/admin.php:467 ../../mod/admin.php:476
+#: ../../include/contact_selectors.php:78
+msgid "Email"
+msgstr ""
+
+#: ../../mod/admin.php:470
+msgid "Deny"
+msgstr ""
+
+#: ../../mod/admin.php:472
+msgid "Block"
+msgstr ""
+
+#: ../../mod/admin.php:473
+msgid "Unblock"
+msgstr ""
+
+#: ../../mod/admin.php:476
+msgid "Register date"
+msgstr ""
+
+#: ../../mod/admin.php:476
+msgid "Last login"
+msgstr ""
+
+#: ../../mod/admin.php:476
+msgid "Last item"
+msgstr ""
+
+#: ../../mod/admin.php:476
+msgid "Account"
+msgstr ""
+
+#: ../../mod/admin.php:478
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: ../../mod/admin.php:479
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: ../../mod/admin.php:515
+#, php-format
+msgid "Plugin %s disabled."
+msgstr ""
+
+#: ../../mod/admin.php:519
+#, php-format
+msgid "Plugin %s enabled."
+msgstr ""
+
+#: ../../mod/admin.php:529
+msgid "Disable"
+msgstr ""
+
+#: ../../mod/admin.php:531
+msgid "Enable"
+msgstr ""
+
+#: ../../mod/admin.php:553
+msgid "Toggle"
+msgstr ""
+
+#: ../../mod/admin.php:616
+msgid "Log settings updated."
+msgstr ""
+
+#: ../../mod/admin.php:656
+msgid "Clear"
+msgstr ""
+
+#: ../../mod/admin.php:662
+msgid "Debugging"
+msgstr ""
+
+#: ../../mod/admin.php:663
+msgid "Log file"
+msgstr ""
+
+#: ../../mod/admin.php:663
+msgid "Must be writable by web server. Relative to your Friendika index.php."
+msgstr ""
+
+#: ../../mod/admin.php:664
+msgid "Log level"
+msgstr ""
+
+#: ../../mod/admin.php:705
+msgid "Close"
+msgstr ""
+
+#: ../../mod/admin.php:711
+msgid "FTP Host"
+msgstr ""
+
+#: ../../mod/admin.php:712
+msgid "FTP Path"
+msgstr ""
+
+#: ../../mod/admin.php:713
+msgid "FTP User"
+msgstr ""
+
+#: ../../mod/admin.php:714
+msgid "FTP Password"
+msgstr ""
+
+#: ../../mod/profile.php:103 ../../mod/display.php:63
+msgid "Access to this profile has been restricted."
+msgstr ""
+
+#: ../../mod/profile.php:134
+msgid "Tips for New Members"
+msgstr ""
+
+#: ../../mod/openid.php:79 ../../include/auth.php:216
+msgid "Welcome "
+msgstr ""
+
+#: ../../mod/openid.php:80 ../../include/auth.php:217
+msgid "Please upload a profile photo."
+msgstr ""
+
+#: ../../mod/follow.php:39
+msgid ""
+"This site is not configured to allow communications with other networks."
+msgstr ""
+
+#: ../../mod/follow.php:40 ../../mod/follow.php:50
+msgid "No compatible communication protocols or feeds were discovered."
+msgstr ""
+
+#: ../../mod/follow.php:52
+msgid "An author or name was not found."
+msgstr ""
+
+#: ../../mod/follow.php:54
+msgid "No browser URL could be matched to this address."
+msgstr ""
+
+#: ../../mod/follow.php:61
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
+msgstr ""
+
+#: ../../mod/apps.php:11
+msgid "No installed applications."
+msgstr ""
+
+#: ../../mod/profiles.php:353
+msgid "Hide your contact/friend list from viewers of this profile?"
+msgstr ""
+
+#: ../../mod/profiles.php:371
+msgid "Edit Profile Details"
+msgstr ""
+
+#: ../../mod/profiles.php:373
+msgid "View this profile"
+msgstr ""
+
+#: ../../mod/profiles.php:374
+msgid "Create a new profile using these settings"
+msgstr ""
+
+#: ../../mod/profiles.php:375
+msgid "Clone this profile"
+msgstr ""
+
+#: ../../mod/profiles.php:376
+msgid "Delete this profile"
+msgstr ""
+
+#: ../../mod/profiles.php:377
+msgid "Profile Name:"
+msgstr ""
+
+#: ../../mod/profiles.php:378
+msgid "Your Full Name:"
+msgstr ""
+
+#: ../../mod/profiles.php:379
+msgid "Title/Description:"
+msgstr ""
+
+#: ../../mod/profiles.php:380
+msgid "Your Gender:"
+msgstr ""
+
+#: ../../mod/profiles.php:381
+#, php-format
+msgid "Birthday (%s):"
+msgstr ""
+
+#: ../../mod/profiles.php:382
+msgid "Street Address:"
+msgstr ""
+
+#: ../../mod/profiles.php:383
+msgid "Locality/City:"
+msgstr ""
+
+#: ../../mod/profiles.php:384
+msgid "Postal/Zip Code:"
+msgstr ""
+
+#: ../../mod/profiles.php:385
+msgid "Country:"
+msgstr ""
+
+#: ../../mod/profiles.php:386
+msgid "Region/State:"
+msgstr ""
+
+#: ../../mod/profiles.php:387
+msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
+msgstr ""
+
+#: ../../mod/profiles.php:388
+msgid "Who: (if applicable)"
+msgstr ""
+
+#: ../../mod/profiles.php:389
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+msgstr ""
+
+#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:90
+msgid "Sexual Preference:"
+msgstr ""
+
+#: ../../mod/profiles.php:391
+msgid "Homepage URL:"
+msgstr ""
+
+#: ../../mod/profiles.php:392 ../../include/profile_advanced.php:115
+msgid "Political Views:"
+msgstr ""
+
+#: ../../mod/profiles.php:393
+msgid "Religious Views:"
+msgstr ""
+
+#: ../../mod/profiles.php:394
+msgid "Public Keywords:"
+msgstr ""
+
+#: ../../mod/profiles.php:395
+msgid "Private Keywords:"
+msgstr ""
+
+#: ../../mod/profiles.php:396
+msgid "Example: fishing photography software"
+msgstr ""
+
+#: ../../mod/profiles.php:397
+msgid "(Used for suggesting potential friends, can be seen by others)"
+msgstr ""
+
+#: ../../mod/profiles.php:398
+msgid "(Used for searching profiles, never shown to others)"
+msgstr ""
+
+#: ../../mod/profiles.php:399
+msgid "Tell us about yourself..."
+msgstr ""
+
+#: ../../mod/profiles.php:400
+msgid "Hobbies/Interests"
+msgstr ""
+
+#: ../../mod/profiles.php:401
+msgid "Contact information and Social Networks"
+msgstr ""
+
+#: ../../mod/profiles.php:402
+msgid "Musical interests"
+msgstr ""
+
+#: ../../mod/profiles.php:403
+msgid "Books, literature"
+msgstr ""
+
+#: ../../mod/profiles.php:404
+msgid "Television"
+msgstr ""
+
+#: ../../mod/profiles.php:405
+msgid "Film/dance/culture/entertainment"
+msgstr ""
+
+#: ../../mod/profiles.php:406
+msgid "Love/romance"
+msgstr ""
+
+#: ../../mod/profiles.php:407
+msgid "Work/employment"
+msgstr ""
+
+#: ../../mod/profiles.php:408
+msgid "School/education"
+msgstr ""
+
+#: ../../mod/profiles.php:459
+msgid "Change profile photo"
+msgstr ""
+
+#: ../../mod/profiles.php:460
+msgid "Create New Profile"
+msgstr ""
+
+#: ../../mod/profiles.php:472
+msgid "visible to everybody"
+msgstr ""
+
+#: ../../mod/profiles.php:473
+msgid "Edit visibility"
+msgstr ""
+
+#: ../../mod/directory.php:46
+msgid "Normal site view"
+msgstr ""
+
+#: ../../mod/directory.php:48
+msgid "View all site entries"
+msgstr ""
+
+#: ../../mod/directory.php:56
+msgid "Site Directory"
+msgstr ""
+
+#: ../../mod/directory.php:115
+msgid "Gender: "
+msgstr ""
+
+#: ../../mod/directory.php:141
+msgid "No entries (some entries may be hidden)."
+msgstr ""
+
+#: ../../mod/invite.php:92
+msgid "You have no more invitations available"
+msgstr ""
+
+#: ../../mod/invite.php:104
+msgid "You will need to supply this invitation code: $invite_code"
+msgstr ""
+
+#: ../../mod/dfrn_confirm.php:458 ../../include/conversation.php:79
+#, php-format
+msgid "%1$s is now friends with %2$s"
+msgstr ""
+
+#: ../../mod/dfrn_confirm.php:585
+#, php-format
+msgid "Site public key not available in contact record for URL %s."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:325
+msgid "Updating contacts"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:347
+msgid "Install Facebook connector for this account."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:354
+msgid "Remove Facebook connector"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:364
+msgid "Link all your Facebook friends and conversations"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:368
+msgid ""
+"Do not link your Facebook profile wall posts - as these could be visible to "
+"people that would not be able to see them on Facebook."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:514
+msgid ""
+"Post to Facebook cancelled because of multi-network access permission "
+"conflict."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:663
+msgid "View on Friendika"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:694
+msgid "Facebook post failed. Queued for retry."
+msgstr ""
+
+#: ../../addon/widgets/widgets.php:53
+msgid "Generate new key"
+msgstr ""
+
+#: ../../addon/widgets/widgets.php:56
+msgid "Widgets key"
+msgstr ""
+
+#: ../../addon/widgets/widgets.php:58
+msgid "Widgets available"
+msgstr ""
+
+#: ../../addon/widgets/widget_friends.php:30
+msgid "Connect on Friendika!"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:25
+msgid "Impressum"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:38
+#: ../../addon/impressum/impressum.php:40
+#: ../../addon/impressum/impressum.php:70
+msgid "Site Owner"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:38
+#: ../../addon/impressum/impressum.php:74
+msgid "Email Address"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:43
+#: ../../addon/impressum/impressum.php:72
+msgid "Postal Address"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:49
+msgid ""
+"The impressum addon needs to be configured!<br />Please add at least the "
+"<tt>owner</tt> variable to your config file. For other variables please "
+"refer to the README file of the addon."
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:71
+msgid "Site Owners Profile"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:73
+msgid "Notes"
+msgstr ""
+
+#: ../../addon/oembed/oembed.php:30
+msgid "OEmbed settings updated"
+msgstr ""
+
+#: ../../addon/oembed/oembed.php:43
+msgid "Use OEmbed for YouTube videos"
+msgstr ""
+
+#: ../../addon/oembed/oembed.php:71
+msgid "URL to embed:"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:175
+msgid ""
+"Please contact your site administrator.<br />The provided API URL is not "
+"valid."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:203
+msgid "We could not contact the StatusNet API with the Path you entered."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:230
+msgid "StatusNet settings updated."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:267
+msgid "Globally Available StatusNet OAuthKeys"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:268
+msgid ""
+"There are preconfigured OAuth key pairs for some StatusNet servers "
+"available. If you are useing one of them, please use these credentials. If "
+"not feel free to connect to any other StatusNet instance (see below)."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:276
+msgid "Provide your own OAuth Credentials"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:315
+msgid "Cancel Connection Process"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:317
+msgid "Current StatusNet API is"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:318
+msgid "Cancel StatusNet Connection"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:330
+msgid ""
+"If enabled all your <strong>public</strong> postings can be posted to the "
+"associated StatusNet account. You can choose to do so by default (here) or "
+"for every posting separately in the posting options when writing the entry."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:332
+msgid "Allow posting to StatusNet"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:335
+msgid "Send public postings to StatusNet by default"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:463
+msgid "API URL"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:464
+msgid "Consumer Secret"
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:465
+msgid "Consumer Key"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:33
+msgid "Post to Wordpress"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:65
+msgid "WordPress Post Settings"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:67
+msgid "Enable WordPress Post Plugin"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:72
+msgid "WordPress username"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:77
+msgid "WordPress password"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:82
+msgid "WordPress API URL"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:87
+msgid "Post to WordPress by default"
+msgstr ""
+
+#: ../../addon/piwik/piwik.php:70
+msgid ""
+"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
+"analytics tool."
+msgstr ""
+
+#: ../../addon/piwik/piwik.php:73
+#, php-format
+msgid ""
+"If you do not want that your visits are logged this way you <a href='%s'>can "
+"set a cookie to prevent Piwik from tracking further visits of the site</a> "
+"(opt-out)."
+msgstr ""
+
+#: ../../addon/piwik/piwik.php:82
+msgid "Piwik Base URL"
+msgstr ""
+
+#: ../../addon/piwik/piwik.php:83
+msgid "Site ID"
+msgstr ""
+
+#: ../../addon/piwik/piwik.php:84
+msgid "Show opt-out cookie link?"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:115
+msgid "Twitter settings updated."
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:181
+msgid ""
+"If enabled all your <strong>public</strong> postings can be posted to the "
+"associated Twitter account. You can choose to do so by default (here) or for "
+"every posting separately in the posting options when writing the entry."
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:183
+msgid "Allow posting to Twitter"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:186
+msgid "Send public postings to Twitter by default"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:282
+msgid "Consumer key"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:283
+msgid "Consumer secret"
+msgstr ""
+
+#: ../../include/profile_advanced.php:45
+msgid "j F, Y"
+msgstr ""
+
+#: ../../include/profile_advanced.php:46
+msgid "j F"
+msgstr ""
+
+#: ../../include/profile_advanced.php:59
+msgid "Age:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:70
+msgid "<span class=\"heart\">&hearts;</span> Status:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:127
+msgid "Religion:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:138
+msgid "About:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:150
+msgid "Hobbies/Interests:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:162
+msgid "Contact information and Social Networks:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:174
+msgid "Musical interests:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:186
+msgid "Books, literature:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:198
+msgid "Television:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:210
+msgid "Film/dance/culture/entertainment:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:222
+msgid "Love/Romance:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:234
+msgid "Work/employment:"
+msgstr ""
+
+#: ../../include/profile_advanced.php:246
+msgid "School/education:"
+msgstr ""
+
+#: ../../include/contact_selectors.php:78
+msgid "OStatus"
+msgstr ""
+
+#: ../../include/contact_selectors.php:78
+msgid "RSS/Atom"
+msgstr ""
+
+#: ../../include/contact_selectors.php:78
+msgid "Zot!"
+msgstr ""
+
+#: ../../include/event.php:17 ../../include/bb2diaspora.php:206
+msgid "Starts:"
+msgstr ""
+
+#: ../../include/event.php:27 ../../include/bb2diaspora.php:214
+msgid "Finishes:"
+msgstr ""
+
+#: ../../include/delivery.php:363 ../../include/notifier.php:549
+msgid "(no subject)"
+msgstr ""
+
+#: ../../include/text.php:754
+msgid "bytes"
+msgstr ""
+
+#: ../../include/text.php:837
+msgid "Select an alternate language"
+msgstr ""
+
+#: ../../include/diaspora.php:390
+msgid "Sharing notification from Diaspora network"
+msgstr ""
+
+#: ../../include/diaspora.php:940
+msgid "link"
+msgstr ""
+
+#: ../../include/diaspora.php:1121
+#, php-format
+msgid "[Relayed] Comment authored by %s from network %s"
+msgstr ""
+
+#: ../../include/nav.php:41
+msgid "End this session"
+msgstr ""
+
+#: ../../include/nav.php:44
+msgid "Sign in"
+msgstr ""
+
+#: ../../include/nav.php:55
+msgid "Home Page"
+msgstr ""
+
+#: ../../include/nav.php:59
+msgid "Create an account"
+msgstr ""
+
+#: ../../include/nav.php:64
+msgid "Help and documentation"
+msgstr ""
+
+#: ../../include/nav.php:67
+msgid "Addon applications, utilities, games"
+msgstr ""
+
+#: ../../include/nav.php:69
+msgid "Search site content"
+msgstr ""
+
+#: ../../include/nav.php:79
+msgid "Conversations on this site"
+msgstr ""
+
+#: ../../include/nav.php:81
+msgid "People directory"
+msgstr ""
+
+#: ../../include/nav.php:91
+msgid "Conversations from your friends"
+msgstr ""
+
+#: ../../include/nav.php:93
+msgid "Your posts and conversations"
+msgstr ""
+
+#: ../../include/nav.php:99
+msgid "Friend requests"
+msgstr ""
+
+#: ../../include/nav.php:102
+msgid "Private mail"
+msgstr ""
+
+#: ../../include/nav.php:105
+msgid "Manage other pages"
+msgstr ""
+
+#: ../../include/nav.php:109
+msgid "Manage/edit profiles"
+msgstr ""
+
+#: ../../include/nav.php:110
+msgid "Manage/edit friends and contacts"
+msgstr ""
+
+#: ../../include/nav.php:117
+msgid "Admin"
+msgstr ""
+
+#: ../../include/nav.php:117
+msgid "Site setup and configuration"
+msgstr ""
+
+#: ../../include/datetime.php:228
+msgid "never"
+msgstr ""
+
+#: ../../include/poller.php:423
+msgid "From: "
+msgstr ""
+
+#: ../../include/bbcode.php:116
+msgid "Image/photo"
+msgstr ""
+
+#: ../../include/acl_selectors.php:279
+msgid "Visible to everybody"
+msgstr ""
+
+#: ../../include/acl_selectors.php:280
+msgid "show"
+msgstr ""
+
+#: ../../include/acl_selectors.php:281
+msgid "don't show"
+msgstr ""
+
+#: ../../include/Contact.php:121 ../../include/conversation.php:609
+msgid "View status"
+msgstr ""
+
+#: ../../include/Contact.php:122 ../../include/conversation.php:610
+msgid "View profile"
+msgstr ""
+
+#: ../../include/Contact.php:123 ../../include/conversation.php:611
+msgid "View photos"
+msgstr ""
+
+#: ../../include/Contact.php:124 ../../include/conversation.php:612
+msgid "View recent"
+msgstr ""
+
+#: ../../include/Contact.php:126 ../../include/conversation.php:614
+msgid "Send PM"
+msgstr ""
+
+#: ../../include/conversation.php:23
+msgid "event"
+msgstr ""
+
+#: ../../include/conversation.php:214 ../../include/conversation.php:489
+#: ../../include/conversation.php:490
+#, php-format
+msgid "View %s's profile"
+msgstr ""
+
+#: ../../include/conversation.php:223 ../../include/conversation.php:502
+#, php-format
+msgid "%s from %s"
+msgstr ""
+
+#: ../../include/conversation.php:302
+msgid "See more posts like this"
+msgstr ""
+
+#: ../../include/conversation.php:330
+#, php-format
+msgid "See all %d comments"
+msgstr ""
+
+#: ../../include/conversation.php:428
+msgid "Select"
+msgstr ""
+
+#: ../../include/conversation.php:430
+msgid "toggle star status"
+msgstr ""
+
+#: ../../include/conversation.php:535
+msgid "Delete Selected Items"
+msgstr ""
+
+#: ../../include/conversation.php:699
+msgid "Visible to <strong>everybody</strong>"
+msgstr ""
+
+#: ../../include/conversation.php:701
+msgid "Please enter a YouTube link:"
+msgstr ""
+
+#: ../../include/conversation.php:702
+msgid "Please enter a video(.ogg) link/URL:"
+msgstr ""
+
+#: ../../include/conversation.php:703
+msgid "Please enter an audio(.ogg) link/URL:"
+msgstr ""
+
+#: ../../include/conversation.php:704
+msgid "Where are you right now?"
+msgstr ""
+
+#: ../../include/conversation.php:705
+msgid "Enter a title for this item"
+msgstr ""
+
+#: ../../include/conversation.php:756
+msgid "Set title"
+msgstr ""
+
+#: ../../boot.php:410
+msgid "Delete this item?"
+msgstr ""
+
+#: ../../boot.php:987
+msgid "g A l F d"
+msgstr ""
index 8e7a8fe112af87bae3284dd1afec6af6925a2797..4044755a54fec316f82147fc9c5987d911594388 100644 (file)
@@ -1,20 +1,17 @@
 <?php
 
-function string_plural_select($n){
-       return ($n != 1);
-}
 ;
 $a->strings["Not Found"] = "No se ha encontrado";
-$a->strings["Page not found."] = "Página no encontrada.";
+$a->strings["Page not found."] = "Pgina no encontrada.";
 $a->strings["Permission denied"] = "Permiso denegado";
 $a->strings["Permission denied."] = "Permiso denegado.";
-$a->strings["Create a New Account"] = "Crea una nueva cuenta";
+$a->strings["Create a New Account"] = "Crear una nueva cuenta";
 $a->strings["Register"] = "Registrarse";
 $a->strings["Nickname or Email address: "] = "Apodo o dirección de email: ";
-$a->strings["Password: "] = "Contraseña: ";
+$a->strings["Password: "] = "Contrasea: ";
 $a->strings["Login"] = "Acceder";
 $a->strings["Nickname/Email/OpenID: "] = "Apodo/Email/OpenID: ";
-$a->strings["Password (if not OpenID): "] = "Contraseña (si no OpenID): ";
+$a->strings["Password (if not OpenID): "] = "Contrasea (si no OpenID): ";
 $a->strings["Forgot your password?"] = "¿Olvidó la contraseña?";
 $a->strings["Password Reset"] = "Resetear la contraseña";
 $a->strings["Logout"] = "Salir";
@@ -34,7 +31,7 @@ $a->strings["No contacts"] = "Nigún contacto";
 $a->strings["Contacts"] = "Contactos";
 $a->strings["View Contacts"] = "Ver contactos";
 $a->strings["Search"] = "Busca";
-$a->strings["No profile"] = "Nigún perfil";
+$a->strings["No profile"] = "Nign perfil";
 $a->strings["Connect"] = "Conecta";
 $a->strings["Location:"] = "Ubicación:";
 $a->strings[", "] = ", ";
@@ -329,9 +326,9 @@ $a->strings["Please login to confirm introduction."] = "Inicia sesión para conf
 $a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Inicio de sesión con la identificación incorrecta. Entra en <strong>este</ strong> perfil.";
 $a->strings["[Name Withheld]"] = "[Nombre oculto]";
 $a->strings["Introduction received at "] = "Presentación recibida en";
-$a->strings["Friend/Connection Request"] = "Solicitud de Amistad/Conexión";
+$a->strings["Friend/Connection Request"] = "Solicitud de Amistad/Conexin";
 $a->strings["Please answer the following:"] = "Por favor responda lo siguiente:";
-$a->strings["Does \$name know you?"] = "\$name te conoce?";
+$a->strings["Does \$name know you?"] = "$name te conoce?";
 $a->strings["Add a personal note:"] = "Agregar una nota personal:";
 $a->strings["Please enter your profile address from one of the following supported social networks:"] = "Por favor, introduzca su dirección de perfil de uno de las siguientes redes sociales soportadas:";
 $a->strings["Friendika"] = "Friendika";
@@ -577,3 +574,522 @@ $a->strings["%d Contact"] = array(
        0 => "%d Contacto",
        1 => "%d Contactos",
 );
+$a->strings["Post successful."] = "";
+$a->strings["Contact settings applied."] = "";
+$a->strings["Contact update failed."] = "";
+$a->strings["Repair Contact Settings"] = "";
+$a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working."] = "";
+$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "";
+$a->strings["Name"] = "";
+$a->strings["Account Nickname"] = "";
+$a->strings["@Tagname - overrides Name/Nickname"] = "";
+$a->strings["Account URL"] = "";
+$a->strings["Friend Request URL"] = "";
+$a->strings["Friend Confirm URL"] = "";
+$a->strings["Notification Endpoint URL"] = "";
+$a->strings["Poll/Feed URL"] = "";
+$a->strings["Help:"] = "";
+$a->strings["Help"] = "";
+$a->strings["File exceeds size limit of %d"] = "";
+$a->strings["File upload failed."] = "";
+$a->strings["Friend suggestion sent."] = "";
+$a->strings["Suggest Friends"] = "";
+$a->strings["Suggest a friend for %s"] = "";
+$a->strings["Status"] = "";
+$a->strings["Profile"] = "";
+$a->strings["Photos"] = "";
+$a->strings["Events"] = "";
+$a->strings["Personal Notes"] = "";
+$a->strings["Create New Event"] = "";
+$a->strings["Previous"] = "";
+$a->strings["Next"] = "";
+$a->strings["l, F j"] = "";
+$a->strings["Edit event"] = "";
+$a->strings["hour:minute"] = "";
+$a->strings["Event details"] = "";
+$a->strings["Format is %s %s. Starting date and Description are required."] = "";
+$a->strings["Event Starts:"] = "";
+$a->strings["Finish date/time is not known or not relevant"] = "";
+$a->strings["Event Finishes:"] = "";
+$a->strings["Adjust for viewer timezone"] = "";
+$a->strings["Description:"] = "";
+$a->strings["Share this event"] = "";
+$a->strings["everybody"] = "";
+$a->strings["Image file is empty."] = "";
+$a->strings["Public access denied."] = "";
+$a->strings["Access to this item is restricted."] = "";
+$a->strings["Comment"] = "";
+$a->strings["Not available."] = "";
+$a->strings["Community"] = "";
+$a->strings["Post to Email"] = "";
+$a->strings["Attach file"] = "";
+$a->strings["Public post"] = "";
+$a->strings["Welcome home %s."] = "";
+$a->strings["Please confirm your introduction/connection request to %s."] = "";
+$a->strings["Confirm"] = "";
+$a->strings["Diaspora members: Please do not use this form. Instead, enter \"%s\" into your Diaspora search bar."] = "";
+$a->strings["Please enter your 'Identity Address' from one of the following supported social networks:"] = "";
+$a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "";
+$a->strings["Does %s know you?"] = "";
+$a->strings["Diaspora"] = "";
+$a->strings["- please share from your own site as noted above"] = "";
+$a->strings["Your Identity Address:"] = "";
+$a->strings["Proceed with Installation"] = "";
+$a->strings["Your Friendika site database has been installed."] = "";
+$a->strings["Proceed to registration"] = "";
+$a->strings["Friendika Social Network"] = "";
+$a->strings["Installation"] = "";
+$a->strings["In order to install Friendika we need to know how to connect to your database."] = "";
+$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "";
+$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "";
+$a->strings["Database Server Name"] = "";
+$a->strings["Database Login Name"] = "";
+$a->strings["Database Login Password"] = "";
+$a->strings["Database Name"] = "";
+$a->strings["Please select a default timezone for your website"] = "";
+$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "";
+$a->strings["Error: mb_string PHP module required but not installed."] = "";
+$a->strings["l F d, Y \\@ g:i A"] = "";
+$a->strings["Time Conversion"] = "";
+$a->strings["Friendika provides this service for sharing events with other networks and friends in unknown timezones."] = "";
+$a->strings["Converted localtime: %s"] = "";
+$a->strings["UTC time: %s"] = "";
+$a->strings["Please select your timezone:"] = "";
+$a->strings["[Embedded content - reload page to view]"] = "";
+$a->strings["Profile Match"] = "";
+$a->strings["No keywords to match. Please add keywords to your default profile."] = "";
+$a->strings["No matches"] = "";
+$a->strings["Pending Friend/Connect Notifications"] = "";
+$a->strings["Friend Suggestion"] = "";
+$a->strings["suggested by %s"] = "";
+$a->strings["Sharer"] = "";
+$a->strings["%d invitation available"] = array(
+       0 => "",
+       1 => "",
+);
+$a->strings["Find People With Shared Interests"] = "";
+$a->strings["Privacy Unavailable"] = "";
+$a->strings["Private communications are not available for this contact."] = "";
+$a->strings["Suggest friends"] = "";
+$a->strings["Network type: %s"] = "";
+$a->strings["Profile Visibility"] = "";
+$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "";
+$a->strings["Contact Information / Notes"] = "";
+$a->strings["Online Reputation"] = "";
+$a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = "";
+$a->strings["You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them."] = "";
+$a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = "";
+$a->strings["Visit %s's profile [%s]"] = "";
+$a->strings["Repair contact URL settings"] = "";
+$a->strings["Repair contact URL settings (WARNING: Advanced)"] = "";
+$a->strings["View conversations"] = "";
+$a->strings["No valid account found."] = "";
+$a->strings["Password reset request issued. Check your email."] = "";
+$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "";
+$a->strings["Your password has been reset as requested."] = "";
+$a->strings["Your new password is"] = "";
+$a->strings["Save or copy your new password - and then"] = "";
+$a->strings["click here to login"] = "";
+$a->strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "";
+$a->strings["Forgot your Password?"] = "";
+$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "";
+$a->strings["Nickname or Email: "] = "";
+$a->strings["Reset"] = "";
+$a->strings["Failed to connect with email account using the settings provided."] = "";
+$a->strings["Account settings"] = "";
+$a->strings["Plugin settings"] = "";
+$a->strings["Normal Account"] = "";
+$a->strings["This account is a normal personal profile"] = "";
+$a->strings["Soapbox Account"] = "";
+$a->strings["Automatically approve all connection/friend requests as read-only fans"] = "";
+$a->strings["Community/Celebrity Account"] = "";
+$a->strings["Automatically approve all connection/friend requests as read-write fans"] = "";
+$a->strings["Automatic Friend Account"] = "";
+$a->strings["Automatically approve all connection/friend requests as friends"] = "";
+$a->strings["OpenID:"] = "";
+$a->strings["(Optional) Allow this OpenID to login to this account."] = "";
+$a->strings["Publish your default profile in your local site directory?"] = "";
+$a->strings["Publish your default profile in the global social directory?"] = "";
+$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "";
+$a->strings["Hide profile details and all your messages from unknown viewers?"] = "";
+$a->strings["or"] = "";
+$a->strings["Your Identity Address is"] = "";
+$a->strings["Export Personal Data"] = "";
+$a->strings["Password Settings"] = "";
+$a->strings["New Password:"] = "";
+$a->strings["Confirm:"] = "";
+$a->strings["Leave password fields blank unless changing"] = "";
+$a->strings["Basic Settings"] = "";
+$a->strings["Full Name:"] = "";
+$a->strings["Email Address:"] = "";
+$a->strings["Your Timezone:"] = "";
+$a->strings["Default Post Location:"] = "";
+$a->strings["Use Browser Location:"] = "";
+$a->strings["Display Theme:"] = "";
+$a->strings["Security and Privacy Settings"] = "";
+$a->strings["Maximum Friend Requests/Day:"] = "";
+$a->strings["(to prevent spam abuse)"] = "";
+$a->strings["(click to open/close)"] = "";
+$a->strings["Allow friends to post to your profile page:"] = "";
+$a->strings["Automatically expire posts after days:"] = "";
+$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "";
+$a->strings["Notification Settings"] = "";
+$a->strings["Send a notification email when:"] = "";
+$a->strings["You receive an introduction"] = "";
+$a->strings["Your introductions are confirmed"] = "";
+$a->strings["Someone writes on your profile wall"] = "";
+$a->strings["Someone writes a followup comment"] = "";
+$a->strings["You receive a private message"] = "";
+$a->strings["Email/Mailbox Setup"] = "";
+$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "";
+$a->strings["Last successful email check:"] = "";
+$a->strings["Email access is disabled on this site."] = "";
+$a->strings["IMAP server name:"] = "";
+$a->strings["IMAP port:"] = "";
+$a->strings["Security:"] = "";
+$a->strings["None"] = "";
+$a->strings["Email login name:"] = "";
+$a->strings["Email password:"] = "";
+$a->strings["Reply-to address:"] = "";
+$a->strings["Send public posts to all email contacts:"] = "";
+$a->strings["Advanced Page Settings"] = "";
+$a->strings["View Conversations"] = "";
+$a->strings["View New Items"] = "";
+$a->strings["View Any Items"] = "";
+$a->strings["View Starred Items"] = "";
+$a->strings["View Bookmarks"] = "";
+$a->strings["Saved Searches"] = "";
+$a->strings["Remove term"] = "";
+$a->strings["Warning: This group contains %s member from an insecure network."] = array(
+       0 => "",
+       1 => "",
+);
+$a->strings["Private messages to this group are at risk of public disclosure."] = "";
+$a->strings["Contact: "] = "";
+$a->strings["Private messages to this person are at risk of public disclosure."] = "";
+$a->strings["Invalid contact."] = "";
+$a->strings["Save"] = "";
+$a->strings["Welcome to Friendika"] = "";
+$a->strings["New Member Checklist"] = "";
+$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = "";
+$a->strings["On your <em>Settings</em> page -  change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = "";
+$a->strings["Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you."] = "";
+$a->strings["Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not."] = "";
+$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "";
+$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "";
+$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "";
+$a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "";
+$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Connect</em> dialog."] = "";
+$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "";
+$a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "";
+$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "";
+$a->strings["Item not available."] = "";
+$a->strings["Item was not found."] = "";
+$a->strings["Create a group of contacts/friends."] = "";
+$a->strings["Group Name: "] = "";
+$a->strings["Click on a contact to add or remove."] = "";
+$a->strings["Group Editor"] = "";
+$a->strings["Members"] = "";
+$a->strings["All Contacts"] = "";
+$a->strings["Invalid profile identifier."] = "";
+$a->strings["Profile Visibility Editor"] = "";
+$a->strings["Visible To"] = "";
+$a->strings["All Contacts (with secure profile access)"] = "";
+$a->strings["An invitation is required."] = "";
+$a->strings["Invitation could not be verified."] = "";
+$a->strings["That doesn't appear to be your full (First Last) name."] = "";
+$a->strings["Membership on this site is by invitation only."] = "";
+$a->strings["Your invitation ID: "] = "";
+$a->strings["This is Friendika version"] = "";
+$a->strings["running at web location"] = "";
+$a->strings["Shared content within the Friendika network is provided under the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0 license</a>"] = "";
+$a->strings["Please visit <a href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn more about the Friendika project."] = "";
+$a->strings["Bug reports and issues: please visit"] = "";
+$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = "";
+$a->strings["Installed plugins/addons/apps"] = "";
+$a->strings["No installed plugins/addons/apps"] = "";
+$a->strings["Administrator@"] = "";
+$a->strings["%s posted to your profile wall at %s"] = "";
+$a->strings["You may visit them online at %s"] = "";
+$a->strings["Upload File:"] = "";
+$a->strings["Upload Profile Photo"] = "";
+$a->strings["Upload"] = "";
+$a->strings["skip this step"] = "";
+$a->strings["select a photo from your photo albums"] = "";
+$a->strings["Crop Image"] = "";
+$a->strings["Please adjust the image cropping for optimum viewing."] = "";
+$a->strings["Done Editing"] = "";
+$a->strings["Please enter a link URL:"] = "";
+$a->strings["D, d M Y - g:i A"] = "";
+$a->strings["Site"] = "";
+$a->strings["Users"] = "";
+$a->strings["Plugins"] = "";
+$a->strings["Update"] = "";
+$a->strings["Logs"] = "";
+$a->strings["User registrations waiting for confirmation"] = "";
+$a->strings["Administration"] = "";
+$a->strings["Summary"] = "";
+$a->strings["Registered users"] = "";
+$a->strings["Pending registrations"] = "";
+$a->strings["Version"] = "";
+$a->strings["Active plugins"] = "";
+$a->strings["Site settings updated."] = "";
+$a->strings["Closed"] = "";
+$a->strings["Requires approval"] = "";
+$a->strings["Open"] = "";
+$a->strings["File upload"] = "";
+$a->strings["Policies"] = "";
+$a->strings["Advanced"] = "";
+$a->strings["Site name"] = "";
+$a->strings["Banner/Logo"] = "";
+$a->strings["System language"] = "";
+$a->strings["System theme"] = "";
+$a->strings["Maximum image size"] = "";
+$a->strings["Register policy"] = "";
+$a->strings["Register text"] = "";
+$a->strings["Allowed friend domains"] = "";
+$a->strings["Allowed email domains"] = "";
+$a->strings["Block public"] = "";
+$a->strings["Force publish"] = "";
+$a->strings["Global directory update URL"] = "";
+$a->strings["Block multiple registrations"] = "";
+$a->strings["OpenID support"] = "";
+$a->strings["Gravatar support"] = "";
+$a->strings["Fullname check"] = "";
+$a->strings["UTF-8 Regular expressions"] = "";
+$a->strings["Show Community Page"] = "";
+$a->strings["Enable OStatus support"] = "";
+$a->strings["Enable Diaspora support"] = "";
+$a->strings["Only allow Friendika contacts"] = "";
+$a->strings["Verify SSL"] = "";
+$a->strings["Proxy user"] = "";
+$a->strings["Proxy URL"] = "";
+$a->strings["Network timeout"] = "";
+$a->strings["%s user blocked"] = array(
+       0 => "",
+       1 => "",
+);
+$a->strings["%s user deleted"] = array(
+       0 => "",
+       1 => "",
+);
+$a->strings["User '%s' deleted"] = "";
+$a->strings["User '%s' unblocked"] = "";
+$a->strings["User '%s' blocked"] = "";
+$a->strings["select all"] = "";
+$a->strings["User registrations waiting for confirm"] = "";
+$a->strings["Request date"] = "";
+$a->strings["Email"] = "";
+$a->strings["Deny"] = "";
+$a->strings["Block"] = "";
+$a->strings["Unblock"] = "";
+$a->strings["Register date"] = "";
+$a->strings["Last login"] = "";
+$a->strings["Last item"] = "";
+$a->strings["Account"] = "";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "";
+$a->strings["Plugin %s disabled."] = "";
+$a->strings["Plugin %s enabled."] = "";
+$a->strings["Disable"] = "";
+$a->strings["Enable"] = "";
+$a->strings["Toggle"] = "";
+$a->strings["Log settings updated."] = "";
+$a->strings["Clear"] = "";
+$a->strings["Debugging"] = "";
+$a->strings["Log file"] = "";
+$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = "";
+$a->strings["Log level"] = "";
+$a->strings["Close"] = "";
+$a->strings["FTP Host"] = "";
+$a->strings["FTP Path"] = "";
+$a->strings["FTP User"] = "";
+$a->strings["FTP Password"] = "";
+$a->strings["Access to this profile has been restricted."] = "";
+$a->strings["Tips for New Members"] = "";
+$a->strings["Welcome "] = "";
+$a->strings["Please upload a profile photo."] = "";
+$a->strings["This site is not configured to allow communications with other networks."] = "";
+$a->strings["No compatible communication protocols or feeds were discovered."] = "";
+$a->strings["An author or name was not found."] = "";
+$a->strings["No browser URL could be matched to this address."] = "";
+$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "";
+$a->strings["No installed applications."] = "";
+$a->strings["Hide your contact/friend list from viewers of this profile?"] = "";
+$a->strings["Edit Profile Details"] = "";
+$a->strings["View this profile"] = "";
+$a->strings["Create a new profile using these settings"] = "";
+$a->strings["Clone this profile"] = "";
+$a->strings["Delete this profile"] = "";
+$a->strings["Profile Name:"] = "";
+$a->strings["Your Full Name:"] = "";
+$a->strings["Title/Description:"] = "";
+$a->strings["Your Gender:"] = "";
+$a->strings["Birthday (%s):"] = "";
+$a->strings["Street Address:"] = "";
+$a->strings["Locality/City:"] = "";
+$a->strings["Postal/Zip Code:"] = "";
+$a->strings["Country:"] = "";
+$a->strings["Region/State:"] = "";
+$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "";
+$a->strings["Who: (if applicable)"] = "";
+$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "";
+$a->strings["Sexual Preference:"] = "";
+$a->strings["Homepage URL:"] = "";
+$a->strings["Political Views:"] = "";
+$a->strings["Religious Views:"] = "";
+$a->strings["Public Keywords:"] = "";
+$a->strings["Private Keywords:"] = "";
+$a->strings["Example: fishing photography software"] = "";
+$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "";
+$a->strings["(Used for searching profiles, never shown to others)"] = "";
+$a->strings["Tell us about yourself..."] = "";
+$a->strings["Hobbies/Interests"] = "";
+$a->strings["Contact information and Social Networks"] = "";
+$a->strings["Musical interests"] = "";
+$a->strings["Books, literature"] = "";
+$a->strings["Television"] = "";
+$a->strings["Film/dance/culture/entertainment"] = "";
+$a->strings["Love/romance"] = "";
+$a->strings["Work/employment"] = "";
+$a->strings["School/education"] = "";
+$a->strings["Change profile photo"] = "";
+$a->strings["Create New Profile"] = "";
+$a->strings["visible to everybody"] = "";
+$a->strings["Edit visibility"] = "";
+$a->strings["Normal site view"] = "";
+$a->strings["View all site entries"] = "";
+$a->strings["Site Directory"] = "";
+$a->strings["Gender: "] = "";
+$a->strings["No entries (some entries may be hidden)."] = "";
+$a->strings["You have no more invitations available"] = "";
+$a->strings["You will need to supply this invitation code: \$invite_code"] = "";
+$a->strings["%1\$s is now friends with %2\$s"] = "";
+$a->strings["Site public key not available in contact record for URL %s."] = "";
+$a->strings["Updating contacts"] = "";
+$a->strings["Install Facebook connector for this account."] = "";
+$a->strings["Remove Facebook connector"] = "";
+$a->strings["Link all your Facebook friends and conversations"] = "";
+$a->strings["Do not link your Facebook profile wall posts - as these could be visible to people that would not be able to see them on Facebook."] = "";
+$a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = "";
+$a->strings["View on Friendika"] = "";
+$a->strings["Facebook post failed. Queued for retry."] = "";
+$a->strings["Generate new key"] = "";
+$a->strings["Widgets key"] = "";
+$a->strings["Widgets available"] = "";
+$a->strings["Connect on Friendika!"] = "";
+$a->strings["Impressum"] = "";
+$a->strings["Site Owner"] = "";
+$a->strings["Email Address"] = "";
+$a->strings["Postal Address"] = "";
+$a->strings["The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon."] = "";
+$a->strings["Site Owners Profile"] = "";
+$a->strings["Notes"] = "";
+$a->strings["OEmbed settings updated"] = "";
+$a->strings["Use OEmbed for YouTube videos"] = "";
+$a->strings["URL to embed:"] = "";
+$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "";
+$a->strings["We could not contact the StatusNet API with the Path you entered."] = "";
+$a->strings["StatusNet settings updated."] = "";
+$a->strings["Globally Available StatusNet OAuthKeys"] = "";
+$a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance (see below)."] = "";
+$a->strings["Provide your own OAuth Credentials"] = "";
+$a->strings["Cancel Connection Process"] = "";
+$a->strings["Current StatusNet API is"] = "";
+$a->strings["Cancel StatusNet Connection"] = "";
+$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "";
+$a->strings["Allow posting to StatusNet"] = "";
+$a->strings["Send public postings to StatusNet by default"] = "";
+$a->strings["API URL"] = "";
+$a->strings["Consumer Secret"] = "";
+$a->strings["Consumer Key"] = "";
+$a->strings["Post to Wordpress"] = "";
+$a->strings["WordPress Post Settings"] = "";
+$a->strings["Enable WordPress Post Plugin"] = "";
+$a->strings["WordPress username"] = "";
+$a->strings["WordPress password"] = "";
+$a->strings["WordPress API URL"] = "";
+$a->strings["Post to WordPress by default"] = "";
+$a->strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = "";
+$a->strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = "";
+$a->strings["Piwik Base URL"] = "";
+$a->strings["Site ID"] = "";
+$a->strings["Show opt-out cookie link?"] = "";
+$a->strings["Twitter settings updated."] = "";
+$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "";
+$a->strings["Allow posting to Twitter"] = "";
+$a->strings["Send public postings to Twitter by default"] = "";
+$a->strings["Consumer key"] = "";
+$a->strings["Consumer secret"] = "";
+$a->strings["j F, Y"] = "";
+$a->strings["j F"] = "";
+$a->strings["Age:"] = "";
+$a->strings["<span class=\"heart\">&hearts;</span> Status:"] = "";
+$a->strings["Religion:"] = "";
+$a->strings["About:"] = "";
+$a->strings["Hobbies/Interests:"] = "";
+$a->strings["Contact information and Social Networks:"] = "";
+$a->strings["Musical interests:"] = "";
+$a->strings["Books, literature:"] = "";
+$a->strings["Television:"] = "";
+$a->strings["Film/dance/culture/entertainment:"] = "";
+$a->strings["Love/Romance:"] = "";
+$a->strings["Work/employment:"] = "";
+$a->strings["School/education:"] = "";
+$a->strings["OStatus"] = "";
+$a->strings["RSS/Atom"] = "";
+$a->strings["Zot!"] = "";
+$a->strings["Starts:"] = "";
+$a->strings["Finishes:"] = "";
+$a->strings["(no subject)"] = "";
+$a->strings["bytes"] = "";
+$a->strings["Select an alternate language"] = "";
+$a->strings["Sharing notification from Diaspora network"] = "";
+$a->strings["link"] = "";
+$a->strings["[Relayed] Comment authored by %s from network %s"] = "";
+$a->strings["End this session"] = "";
+$a->strings["Sign in"] = "";
+$a->strings["Home Page"] = "";
+$a->strings["Create an account"] = "";
+$a->strings["Help and documentation"] = "";
+$a->strings["Addon applications, utilities, games"] = "";
+$a->strings["Search site content"] = "";
+$a->strings["Conversations on this site"] = "";
+$a->strings["People directory"] = "";
+$a->strings["Conversations from your friends"] = "";
+$a->strings["Your posts and conversations"] = "";
+$a->strings["Friend requests"] = "";
+$a->strings["Private mail"] = "";
+$a->strings["Manage other pages"] = "";
+$a->strings["Manage/edit profiles"] = "";
+$a->strings["Manage/edit friends and contacts"] = "";
+$a->strings["Admin"] = "";
+$a->strings["Site setup and configuration"] = "";
+$a->strings["never"] = "";
+$a->strings["From: "] = "";
+$a->strings["Image/photo"] = "";
+$a->strings["Visible to everybody"] = "";
+$a->strings["show"] = "";
+$a->strings["don't show"] = "";
+$a->strings["View status"] = "";
+$a->strings["View profile"] = "";
+$a->strings["View photos"] = "";
+$a->strings["View recent"] = "";
+$a->strings["Send PM"] = "";
+$a->strings["event"] = "";
+$a->strings["View %s's profile"] = "";
+$a->strings["%s from %s"] = "";
+$a->strings["See more posts like this"] = "";
+$a->strings["See all %d comments"] = "";
+$a->strings["Select"] = "";
+$a->strings["toggle star status"] = "";
+$a->strings["Delete Selected Items"] = "";
+$a->strings["Visible to <strong>everybody</strong>"] = "";
+$a->strings["Please enter a YouTube link:"] = "";
+$a->strings["Please enter a video(.ogg) link/URL:"] = "";
+$a->strings["Please enter an audio(.ogg) link/URL:"] = "";
+$a->strings["Where are you right now?"] = "";
+$a->strings["Enter a title for this item"] = "";
+$a->strings["Set title"] = "";
+$a->strings["Delete this item?"] = "";
+$a->strings["g A l F d"] = "";
index 49bebee8b8648939291f7ee6fff7fbfbb8d54481..2c024930cad96422097d2030625e5e2f4d93abe3 100644 (file)
@@ -1,10 +1,9 @@
-<div class="side-follow-wrapper" id="side-follow-wrapper" >
-<form action="follow" method="post" />
-<label id="side-follow-label" for="side-follow-url" >$label</label>
-<input id="side-follow-url" type="text" name="url" size="24" title="$hint" />
-<div class="side-follow-input-end"></div>
-<input id="side-follow-submit" type="submit" name="submit" value="$follow" />
-</form>
+<div id="follow-sidebar" class="widget">
+       <h3>Find People</h3>
+       <form action="follow" method="post" />
+               <input id="side-follow-url" type="text" name="url" size="24" title="$hint" /><input id="side-follow-submit" type="submit" name="submit" value="$follow" />
+       </form>
+       $findSimilar
+       $inviteFriends
 </div>
-<div class="side-follow-end"></div>
 
index a9735940cd05f3ac4281efdda558b92240de4316..bbe728bf0338dc3947bae68a03fb97c89057e456 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-function string_plural_select($n){
+function string_plural_select_fr($n){
        return ($n != 1);
 }
 ;
index bd9852b962284977c31ed03c1c7049c0f179078f..cbae1610f4b235e17db2482b4ef54cb1b79bf6dd 100644 (file)
@@ -1,7 +1,6 @@
-<div class="group-delete-wrapper" id="group-delete-wrapper-$id" >
+<div class="group-delete-wrapper button" id="group-delete-wrapper-$id" >
        <a href="group/drop/$id" 
                onclick="return confirmDelete();" 
-               title="$delete" 
                id="group-delete-icon-$id" 
                class="icon drophide group-delete-icon" 
                onmouseover="imgbright(this);" 
index 9d73269e1e1de6296884d7092e9a1691975f68db..b6d78da390a4d5b4b29c5dc500c1ee865a05dd91 100644 (file)
@@ -1,8 +1,12 @@
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <base href="$baseurl/" />
 <meta name="generator" content="$generator" />
-<link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
 <link rel="stylesheet" href="$baseurl/library/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />
+<link rel="stylesheet" href="$baseurl/library/tiptip/tipTip.css" type="text/css" media="screen" />
+<link rel="stylesheet" href="$baseurl/library/jgrowl/jquery.jgrowl.css" type="text/css" media="screen" />
+
+<link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
+
 <link rel="shortcut icon" href="$baseurl/images/friendika-32.png" />
 <link rel="search"
          href="$baseurl/opensearch" 
 <!--[if IE]>
 <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 <![endif]-->
-<script type="text/javascript" src="$baseurl/include/jquery.js" ></script>
+<script type="text/javascript" src="$baseurl/js/jquery.js" ></script>
 <script type="text/javascript" src="$baseurl/library/fancybox/jquery.fancybox-1.3.4.pack.js"></script>
+<script type="text/javascript" src="$baseurl/library/tiptip/jquery.tipTip.minified.js"></script>
+<script type="text/javascript" src="$baseurl/library/jgrowl/jquery.jgrowl_minimized.js"></script>
 <script type="text/javascript" src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js" ></script>
-<script type="text/javascript" src="$baseurl/include/acl.js" ></script>
-<script type="text/javascript" src="$baseurl/include/main.js" ></script>
+<script type="text/javascript" src="$baseurl/js/acl.js" ></script>
+<script type="text/javascript" src="$baseurl/js/main.js" ></script>
 <script>
 
        function confirmDelete() { return confirm("$delitem"); }
index 6b28ba782d2860eea24778ca833087ea523a50c5..235cfbcf7a4cc51a36fe460ab643ba56ee9945e8 100644 (file)
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: friendika\n"
 "Report-Msgid-Bugs-To: http://bugs.friendika.com/\n"
 "POT-Creation-Date: 2011-08-14 21:17-0700\n"
-"PO-Revision-Date: 2011-08-17 17:49+0000\n"
+"PO-Revision-Date: 2011-09-01 10:32+0000\n"
 "Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.net/projects/p/friendika/team/it/)\n"
 "MIME-Version: 1.0\n"
@@ -1082,7 +1082,7 @@ msgstr "Amico"
 
 #: ../../mod/notifications.php:141
 msgid "Fan/Admirer"
-msgstr "Fan/Admiratore"
+msgstr "Fan/Ammiratore"
 
 #: ../../mod/notifications.php:149
 msgid "Friend/Connect Request"
@@ -2158,7 +2158,7 @@ msgstr "Regitrati"
 #: ../../include/diaspora.php:446 ../../include/conversation.php:26
 #: ../../include/conversation.php:35
 msgid "status"
-msgstr "stato"
+msgstr "lo stato"
 
 #: ../../mod/like.php:127 ../../addon/facebook/facebook.php:958
 #: ../../include/diaspora.php:463 ../../include/conversation.php:43
@@ -4420,7 +4420,7 @@ msgstr "Hai un nuovo seguace su "
 
 #: ../../include/conversation.php:23
 msgid "event"
-msgstr "evento"
+msgstr "l'evento"
 
 #: ../../include/conversation.php:213 ../../include/conversation.php:488
 #: ../../include/conversation.php:489
index 9e3a2262f381be010f6da1e2f823f2c4e93d1e8e..3a0aed70f42a2640e044a73601c5f26b7d1fd402 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-function string_plural_select($n){
+function string_plural_select_it($n){
        return ($n != 1);
 }
 ;
@@ -224,7 +224,7 @@ $a->strings["yes"] = "si";
 $a->strings["no"] = "no";
 $a->strings["Approve as: "] = "Approva come: ";
 $a->strings["Friend"] = "Amico";
-$a->strings["Fan/Admirer"] = "Fan/Admiratore";
+$a->strings["Fan/Admirer"] = "Fan/Ammiratore";
 $a->strings["Friend/Connect Request"] = "Richiesta Amicizia/Connessione";
 $a->strings["New Follower"] = "Nuovo Seguace";
 $a->strings["No notifications."] = "Nessuna notifica.";
@@ -459,7 +459,7 @@ $a->strings["Your Email Address: "] = "Il tuo Indirizzo Email: ";
 $a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@\$sitename</strong>'."] = "Scegli un soprannome. Deve cominciare con un carattere. L'indirizzo del tuo profilo sarà '<strong>soprannome@\$sitename</strong>'.";
 $a->strings["Choose a nickname: "] = "Scegli un soprannome: ";
 $a->strings["Register"] = "Regitrati";
-$a->strings["status"] = "stato";
+$a->strings["status"] = "lo stato";
 $a->strings["%1\$s likes %2\$s's %3\$s"] = "A %1\$s piace %3\$s di %2\$s";
 $a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "A %1\$s non piace %3\$s di %2\$s";
 $a->strings["This is Friendika version"] = "Questo è Friendika versione";
@@ -985,7 +985,7 @@ $a->strings["show"] = "mostra";
 $a->strings["don't show"] = "non mostrare";
 $a->strings["(no subject)"] = "(nessun oggetto)";
 $a->strings["You have a new follower at "] = "Hai un nuovo seguace su ";
-$a->strings["event"] = "evento";
+$a->strings["event"] = "l'evento";
 $a->strings["View %s's profile"] = "Vedi il profilo di %s";
 $a->strings["%s from %s"] = "%s da %s";
 $a->strings["View in context"] = "Vedi nel contesto";
diff --git a/view/it/wall_received_html_body_eml.tpl b/view/it/wall_received_html_body_eml.tpl
new file mode 100644 (file)
index 0000000..cdc05cf
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
+<html>
+<head>
+       <title>Messaggio da Friendika</title>
+       <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+</head>
+<body>
+<table style="border:1px solid #ccc">
+       <tbody>
+       <tr><td colspan="2" style="background:#084769; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px; float:left;" src='$siteurl/images/friendika-32.png'><div style="padding:7px; margin-left: 5px; float:left; font-size:18px;letter-spacing:1px;">Friendika</div><div style="clear: both;"></div></td></tr>
+
+       <tr><td style="padding-top:22px;" colspan="2">$from ha scritto sulla tua bacheca.</td></tr>
+
+
+       <tr><td style="padding-left:22px;padding-top:22px;width:60px;" valign="top" rowspan=3><a href="$url"><img style="border:0px;width:48px;height:48px;" src="$thumb"></a></td>
+               <td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
+       <tr><td style="padding-right:22px;">$body</td></tr>
+       <tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Vai su <a href="$siteurl">$siteurl</a> per <a href="$display">vedere o cancellare il post</a>.</td></tr>
+       <tr><td></td><td>Grazie,</td></tr>
+       <tr><td></td><td>L'amministratore di $sitename</td></tr>
+       </tbody>
+</table>
+</body>
+</html>
\ No newline at end of file
diff --git a/view/it/wall_received_text_body_eml.tpl b/view/it/wall_received_text_body_eml.tpl
new file mode 100644 (file)
index 0000000..327557e
--- /dev/null
@@ -0,0 +1,18 @@
+
+Caro $username,
+
+       '$from' ha scritto sulla tua bacheca.
+
+-----
+$body
+-----
+
+Vai su $siteurl per vedere o cancellare il post:
+
+$display
+
+Grazie,
+       L'amministratore di $sitename
+
+
index 6195c5bbc6d4b506c4db89d3cb1374e9060f359e..5eb07db44c6ee13efce041203904f613aea86193 100644 (file)
@@ -80,7 +80,7 @@ function initEditor(cb){
 }
 
 </script>
-<script type="text/javascript" src="include/ajaxupload.js" ></script>
+<script type="text/javascript" src="js/ajaxupload.js" ></script>
 <script>
        var ispublic = '$ispublic';
        $(document).ready(function() {
@@ -142,7 +142,7 @@ function initEditor(cb){
                if(reply && reply.length) {
                        reply = bin2hex(reply);
                        $('#profile-rotator').show();
-                       $.get('parse_url?url=' + reply, function(data) {
+                       $.get('parse_url?binurl=' + reply, function(data) {
                                tinyMCE.execCommand('mceInsertRawHTML',false,data);
                                $('#profile-rotator').hide();
                        });
diff --git a/view/like.tpl b/view/like.tpl
deleted file mode 100644 (file)
index ce5af04..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
-                               <a href="#" class="icon like"title="$likethis" onclick="dolike($id,'like'); return false"></a>
-                               <a href="#" class="icon dislike" title="$nolike" onclick="dolike($id,'dislike'); return false"></a>
-                               <a href="#" class="icon recycle wall-item-share-buttons" title="$share"onclick="jotShare($id); return false"></a>
-                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
-                       </div>
index 78f624eed775e68d22801eaee97fe9085f0924b2..27598cd504b37464a5740199e1fb758f5f48c1a3 100644 (file)
@@ -11,7 +11,7 @@
         <input type="password" maxlength="60" name="password" id="login-password" value="" />
 </div>
 <div id="login-password-end"></div>
-<div id="login-extra-links">
+<div id="login-extra-links" class=".button">
        <div id="login-extra-filler">&nbsp;</div>
        $register_html
         <a href="lostpass" title="$lostpass" id="lost-password-link" >$lostlink</a>
index 779ef39eecb1ca6477e9594e4d7a2b53245cc386..6c2af115bb54b78751cb6effceebb8870d2557f6 100644 (file)
@@ -1,15 +1,14 @@
 <div class="mail-conv-outside-wrapper">
        <div class="mail-conv-sender" >
-               <a href="$from_url" class="mail-conv-sender-url" ><img class="mail-conv-sender-photo$sparkle" src="$from_photo" alt="$from_name" /></a>
+               <a href="$from_url" class="mail-conv-sender-url" ><img class="mframe mail-conv-sender-photo$sparkle" src="$from_photo" alt="$from_name" /></a>
        </div>
        <div class="mail-conv-detail" >
                <div class="mail-conv-sender-name" >$from_name</div>
                <div class="mail-conv-date">$date</div>
                <div class="mail-conv-subject">$subject</div>
                <div class="mail-conv-body">$body</div>
-       </div>
+       <div class="mail-conv-delete-wrapper" id="mail-conv-delete-wrapper-$id" ><a href="message/drop/$id" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" id="mail-conv-delete-icon-$id" class="mail-conv-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div><div class="mail-conv-delete-end"></div>
+       <div class="mail-conv-outside-wrapper-end"></div>
+</div>
 </div>
-<div class="mail-conv-delete-wrapper" id="mail-conv-delete-wrapper-$id" ><a href="message/drop/$id" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" id="mail-conv-delete-icon-$id" class="mail-conv-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div><div class="mail-conv-delete-end"></div>
-
-<div class="mail-conv-outside-wrapper-end"></div>
 <hr class="mail-conv-break" />
index eac79eb59ae2a48d7fe393f475382b6d1949aacc..5cc65b9ad85738e38d00f1c1ad704113c9cf3038 100644 (file)
@@ -2,8 +2,8 @@
 
 <div class="message-links">
 <ul>
-<li><a href="message" class="message-link-inbox">$inbox</a></li>
-<li><a href="message/sent" class="message-link-outbox">$outbox</a></li>
-<li><a href="message/new" class="message-link-new">$new</a></li>
+<li><a href="message" class="button message-link-inbox">$inbox</a></li>
+<li><a href="message/sent" class="button message-link-outbox">$outbox</a></li>
+<li><a href="message/new" class="button message-link-new">$new</a></li>
 <ul>
 </div>
index 8c8e78276e0d73a93daf6bad5546bf508589cad1..77673c7924d2fa3c5fe09565c8bb1eb3a3aeec94 100644 (file)
@@ -6,10 +6,10 @@
                <div class="mail-list-sender-name" >$from_name</div>
                <div class="mail-list-date">$date</div>
                <div class="mail-list-subject"><a href="message/$id" class="mail-list-link">$subject</a></div>
+       <div class="mail-list-delete-wrapper" id="mail-list-delete-wrapper-$id" >
+               <a href="message/dropconv/$id" onclick="return confirmDelete();"  title="$delete" class="icon drophide mail-list-               delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
        </div>
 </div>
-<div class="mail-list-delete-wrapper" id="mail-list-delete-wrapper-$id" >
-       <a href="message/dropconv/$id" onclick="return confirmDelete();"  title="$delete" class="icon drophide mail-list-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
 </div>
 <div class="mail-list-delete-end"></div>
 
diff --git a/view/match.tpl b/view/match.tpl
new file mode 100644 (file)
index 0000000..330245a
--- /dev/null
@@ -0,0 +1,12 @@
+<div class="profile-match-wrapper">
+       <div class="profile-match-photo">
+               <a href="$url">
+                       <img src="$photo" alt="$name" title="$name[$tags]" />
+               </a>
+       </div>
+       <div class="profile-match-break"></div>
+       <div class="profile-match-name">
+               <a href="$url" title="$name[$tags]">$name</a>
+       </div>
+       <div class="profile-match-end"></div>
+</div>
\ No newline at end of file
index 67775a45b221117a07e6c7b0ea3d3fef421d1668..a74154c19c60c154fc2cdf4615da3f817244fb8d 100644 (file)
@@ -53,7 +53,7 @@ tinyMCE.init({
 });
 
 </script>
-<script type="text/javascript" src="include/ajaxupload.js" ></script>
+<script type="text/javascript" src="js/ajaxupload.js" ></script>
 <script>
        $(document).ready(function() {
                var uploader = new window.AjaxUpload(
index 09a25ac837d88bc939fe4559a5ba8b5ca33bf23e..cf1c2a2271741f81d67058efe33eac72e982b718 100644 (file)
@@ -1,6 +1,102 @@
-$langselector
+<header>
+       {# $langselector #}
 
-<div id="site-location">$sitelocation</div>
+       <div id="site-location">$sitelocation</div>
+       <div id="banner">$banner</div>
+</header>
+<nav>
+       <ul>
+               {{ if $userinfo }}
+                       <li id="nav-user-linkmenu" class="nav-menu-icon"><a href="#" rel="#nav-user-menu" title="$sitelocation"><img src="$userinfo.icon" alt="$userinfo.name"></a>
+                               <ul id="nav-user-menu" class="menu-popup">
+                                       {{ for $nav.usermenu as $usermenu }}
+                                               <li><a class="$usermenu.2" href="$usermenu.0" title="$usermenu.3">$usermenu.1</a></li>
+                                       {{ endfor }}
+                                       
+                                       {{ if $nav.notifications }}<li><a class="$nav.notifications.2" href="$nav.notifications.0" title="$nav.notifications.3" >$nav.notifications.1</a></li>{{ endif }}
+                                       {{ if $nav.messages }}<li><a class="$nav.messages.2" href="$nav.messages.0" title="$nav.messages.3" >$nav.messages.1</a></li>{{ endif }}
+                                       {{ if $nav.contacts }}<li><a class="$nav.contacts.2" href="$nav.contacts.0" title="$nav.contacts.3" >$nav.contacts.1</a>{{ endif }}                                     
+                               </ul>
+                       </li>
+               {{ endif }}
+               
+               {{ if $nav.community }}
+                       <li id="nav-community-link" class="nav-menu $sel.community">
+                               <a class="$nav.community.2" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a>
+                       </li>
+               {{ endif }}
+               
+               {{ if $nav.network }}
+                       <li id="nav-network-link" class="nav-menu $sel.network">
+                               <a class="$nav.network.2" href="$nav.network.0" title="$nav.network.3" >$nav.network.1</a>
+                               <span id="net-update" class="nav-notify"></span>
+                       </li>
+               {{ endif }}
+               {{ if $nav.home }}
+                       <li id="nav-home-link" class="nav-menu $sel.home">
+                               <a class="$nav.home.2" href="$nav.home.0" title="$nav.home.3" >$nav.home.1</a>
+                               <span id="home-update" class="nav-notify"></span>
+                       </li>
+               {{ endif }}
+               
+               {{ if $nav.notifications }}
+                       <li  id="nav-notifications-linkmenu" class="nav-menu-icon"><a href="$nav.notifications.0" rel="#nav-notifications-menu" title="$nav.notifications.1"><span class="icon s22 notify">$nav.notifications.1</span></a>
+                               <span id="notify-update" class="nav-notify"></span>
+                               <ul id="nav-notifications-menu" class="menu-popup">
+                                       <li class="empty">$emptynotifications</li>
+                               </ul>
+                       </li>           
+               {{ endif }}
+
+
+
+               
+       
+
+
+               
+               
+               
+               <li id="nav-site-linkmenu" class="nav-menu-icon"><a href="#" rel="#nav-site-menu"><span class="icon s22 gear">Site</span></a>
+                       <ul id="nav-site-menu" class="menu-popup">
+                               {{ if $nav.settings }}<li><a class="$nav.settings.2" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a></li>{{ endif }}
+                               {{ if $nav.admin }}<li><a class="$nav.admin.2" href="$nav.admin.0" title="$nav.admin.3" >$nav.admin.1</a></li>{{ endif }}
+
+                               {{ if $nav.logout }}<li><a class="menu-sep $nav.logout.2" href="$nav.logout.0" title="$nav.logout.3" >$nav.logout.1</a></li>{{ endif }}
+                               {{ if $nav.login }}<li><a class="$nav.login.2" href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a><li>{{ endif }}
+                       </ul>           
+               </li>
+               
+               
+               <li id="nav-help-link" class="nav-menu $sel.help">
+                       <a class="$nav.help.2" target="friendika-help" href="$nav.help.0" title="$nav.help.3" >$nav.help.1</a>
+               </li>
+
+               <li id="nav-search-link" class="nav-menu $sel.search">
+                       <a class="$nav.search.2" href="$nav.search.0" title="$nav.search.3" >$nav.search.1</a>
+               </li>
+               <li id="nav-directory-link" class="nav-menu $sel.directory">
+                       <a class="$nav.directory.2" href="$nav.directory.0" title="$nav.directory.3" >$nav.directory.1</a>
+               </li>
+               
+               {{ if $nav.apps }}
+                       <li id="nav-apps-link" class="nav-menu $sel.apps">
+                               <a class=" $nav.apps.2" href="#" rel="#nav-apps-menu" title="$nav.apps.3" >$nav.apps.1</a>
+                               <ul id="nav-apps-menu" class="menu-popup">
+                                       {{ for $apps as $ap }}
+                                       <li><a href="$ap.url">$ap.name</a></li>
+                                       {{ endfor }}
+                               </ul>
+                       </li>
+               {{ endif }}
+       </ul>
+
+</nav>
+<ul id="nav-notifications-template" style="display:none;" rel="template">
+       <li><a href="{0}"><img src="{1}">{2} <span class="notif-when">{3}</span></a></li>
+</ul>
+
+{#
 
 {{ if $nav.logout }}<a id="nav-logout-link" class="nav-link $nav.logout.2" href="$nav.logout.0" title="$nav.logout.3" >$nav.logout.1</a> {{ endif }}
 {{ if $nav.login }}<a id="nav-login-link" class="nav-login-link $nav.login.2" href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a> {{ endif }}
@@ -18,17 +114,6 @@ $langselector
 
 {{ if $nav.admin }}<a id="nav-admin-link" class="nav-link $nav.admin.2" href="$nav.admin.0" title="$nav.admin.3" >$nav.admin.1</a>{{ endif }}
 
-{{ if $nav.network }}
-<a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0" title="$nav.network.3" >$nav.network.1</a>
-<span id="net-update" class="nav-ajax-left"></span>
-{{ endif }}
-{{ if $nav.home }}
-<a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0" title="$nav.home.3" >$nav.home.1</a>
-<span id="home-update" class="nav-ajax-left"></span>
-{{ endif }}
-{{ if $nav.community }}
-<a id="nav-community-link" class="nav-commlink $nav.community.2" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a>
-{{ endif }}
 {{ if $nav.notifications }}
 <a id="nav-notify-link" class="nav-commlink $nav.notifications.2" href="$nav.notifications.0" title="$nav.notifications.3" >$nav.notifications.1</a>
 <span id="notify-update" class="nav-ajax-left"></span>
@@ -43,7 +128,8 @@ $langselector
 {{ if $nav.settings }}<a id="nav-settings-link" class="nav-link $nav.settings.2" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a>{{ endif }}
 {{ if $nav.profiles }}<a id="nav-profiles-link" class="nav-link $nav.profiles.2" href="$nav.profiles.0" title="$nav.profiles.3" >$nav.profiles.1</a>{{ endif }}
 
-{{ if $nav.contacts }}<a id="nav-contacts-link" class="nav-link $nav.contacts.2" href="$nav.contacts.0" title="$nav.contacts.3" >$nav.contacts.1</a>{{ endif }}
+
 </span>
 <span id="nav-end"></span>
 <span id="banner">$banner</span>
+#}
index fab7d7254cc276781739b881ff8743640b005952..3ab9fe7235bbf11f26b774a63f12b2029cb7bb0e 100644 (file)
@@ -1,8 +1,7 @@
 <div class="photo-album-image-wrapper" id="photo-album-image-wrapper-$id">
        <a href="$photolink" class="photo-album-photo-link" id="photo-album-photo-link-$id" title="$phototitle">
-               <img src="$imgsrc" alt="$imgalt" title="$phototitle" class="photo-album-photo" id="photo-album-photo-$id" />
+               <img src="$imgsrc" alt="$imgalt" title="$phototitle" class="photo-album-photo lframe  resize" id="photo-album-photo-$id" />
                <p class='caption'>$desc</p>            
        </a>
-       
 </div>
 <div class="photo-album-image-wrapper-end"></div>
index 839e41ee7b79656669f9e6ab6661352c3ccf4869..9950cc4aca5400cfe328cf4b31d0ac3b99306f6c 100644 (file)
@@ -19,7 +19,7 @@
        <div id="photo-edit-tags-end"></div>
 
        <div id="photo-edit-perms" class="photo-edit-perms" >
-               <a href="#photo-edit-perms-select" id="photo-edit-perms-menu" title="$permissions"/>
+               <a href="#photo-edit-perms-select" id="photo-edit-perms-menu" class="button" title="$permissions"/>
                        <span id="jot-perms-icon" class="icon $lockstate" ></span>$permissions
                </a>
                <div id="photo-edit-perms-menu-end"></div>
index e2ebb6fd541f2c3c5da565727f1aec24c737f3fd..ab88c5ff52ab5ed2485dcd69d75451ad99666660 100644 (file)
@@ -1,5 +1,5 @@
 
-<div class="photo-top-image-wrapper" id="photo-top-image-wrapper-$id">
+<div class="photo-top-image-wrapper lframe" id="photo-top-image-wrapper-$id">
        <a href="$photolink" class="photo-top-photo-link" id="photo-top-photo-link-$id" title="$phototitle"><img src="$imgsrc" alt="$imgalt" title="$phototitle" class="photo-top-photo" id="photo-top-photo-$id" /></a>
        <div class="photo-top-album-name"><a href="$albumlink" class="photo-top-album-link" title="$albumalt" >$albumname</a></div>
 </div>
index 10240b5965c77f6ed50decb918c294883d0b4221..318a9242771ecaf8c84f72266d0e80fa1748a7f7 100644 (file)
        </div>
        <div id="photos-upload-exist-end"></div>
 
+       <div id="photos-upload-noshare-div" class="photos-upload-noshare-div" >
+               <input id="photos-upload-noshare" type="checkbox" name="not_visible" value="1" />
+               <label id="photos-upload-noshare-text" for="photos-upload-noshare" >$nosharetext</label>
+       </div>
+
 
        <div id="photos-upload-perms" class="photos-upload-perms" >
-               <a href="#photos-upload-permissions-wrapper" id="photos-upload-perms-menu" />
+               <a href="#photos-upload-permissions-wrapper" id="photos-upload-perms-menu" class="button" />
                <span id="jot-perms-icon" class="icon $lockstate" ></span>$permissions
                </a>
        <div id="photos-upload-perms-end"></div>
index 707dfec53e2d8879abb2c8774e728f98fef06b82..95d0f177c1c3e9664ee628a493ea69efe162caba 100644 (file)
@@ -1,8 +1,8 @@
 <h1>$header</h1>
-<p id="profile-listing-desc" >
+<p id="profile-listing-desc" class="button" >
 <a href="profile_photo" >$chg_photo</a>
 </p>
-<div id="profile-listing-new-link-wrapper" >
+<div id="profile-listing-new-link-wrapper" class="button >
 <a href="profiles/new" id="profile-listing-new-link" title="$cr_new" >$cr_new</a>
 </div>
 
index 7820013b606a1b1ccf74251462886ace0b57c23f..d57c33acfbbf479f3165167f4b0815ef0ac10b0c 100644 (file)
@@ -1,9 +1,9 @@
 
 <div id="profile-tabs-wrapper" >
-       <a href="$url" id="profile-tab-status-link" class="profile-tabs" >$status</a>
-       <a href="$url?tab=profile" id="profile-tab-profile-link" class="profile-tabs" >$profile</a>
-       <a href="$phototab" id="profile-tab-photos-link" class="profile-tabs" >$photos</a>
-       {{ if $events }}<a href="events" id="profile-tab-events-link" class="profile-tabs" >$events</a>{{ endif }}
-       {{ if $notes }}<a href="notes" id="profile-tab-notes-link" class="profile-tabs" >$notes</a>{{ endif }}
+       <a href="$url" id="profile-tab-status-link" class="profile-tabs button" >$status</a>
+       <a href="$url?tab=profile" id="profile-tab-profile-link" class="profile-tabs button" >$profile</a>
+       <a href="$phototab" id="profile-tab-photos-link" class="profile-tabs button" >$photos</a>
+       {{ if $events }}<a href="events" id="profile-tab-events-link" class="profile-tabs button" >$events</a>{{ endif }}
+       {{ if $notes }}<a href="notes" id="profile-tab-notes-link" class="profile-tabs button" >$notes</a>{{ endif }}
 <div id="profile-tabs-end"></div>
 </div>
index 34f265ee671ed1ffe8d8559b76afccbed4f4162b..d65b65784c7bea0f2979697cb0bf0f4d2f7666fb 100644 (file)
@@ -1,29 +1,63 @@
 <div class="vcard">
 
-       $fullname
-       $pdesc
-       $tabs
+       <div class="tool">
+               <div class="fn label">$profile.name</div>
+               {{ if $profile.edit }}
+                       <div class="action">
+                       <a class="icon s16 edit ttright" href="#" rel="#profiles-menu" title="$profile.edit.3"><span>$profile.edit.1</span></a>
+                       <ul id="profiles-menu" class="menu-popup">
+                               {{ for $profile.menu.entries as $e }}
+                               <li>
+                                       <a href="profiles/$e.id"><img src='$e.photo'>$e.profile_name</a>
+                               </li>
+                               {{ endfor }}
+                               <li><a href="profile_photo" >$profile.menu.chg_photo</a></li>
+                               <li><a href="profiles/new" id="profile-listing-new-link">$profile.menu.cr_new</a></li>
+                               
+                       </ul>
+                       </div>
+               {{ endif }}
+       </div>
+                               
+       
+       {{ if $pdesc }}<div class="title">$profile.pdesc</div>{{ endif }}
+       <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="$profile.photo" alt="$profile.name"></div>
 
-       $photo
 
-       <div id="profile-extra-links">
-               <ul>
-                       $connect
-               </ul>
-       </div>
 
-       $location
+       {{ if $location }}
+               <dl class="location"><dt class="location-label">$location</dt> 
+               <dd class="adr">
+                       {{ if $profile.address }}<div class="street-address">$profile.address</div>{{ endif }}
+                       <span class="city-state-zip">
+                               <span class="locality">$profile.locality</span>{{ if $profile.locality }}, {{ endif }}
+                               <span class="region">$profile.region</span>
+                               <span class="postal-code">$profile.postal-code</span>
+                       </span>
+                       {{ if $profile.country-name }}<span class="country-name">$profile.country-name</span>{{ endif }}
+               </dd>
+               </dl>
+       {{ endif }}
 
-       $gender
+       {{ if $gender }}<dl class="mf"><dt class="gender-label">$gender</dt> <dd class="x-gender">$profile.gender</dd></dl>{{ endif }}
+       
+       {{ if $profile.pubkey }}<div class="key" style="display:none;">$profile.pubkey</div>{{ endif }}
 
-       $pubkey
+       {{ if $marital }}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>$marital</dt><dd class="marital-text">$profile.marital</dd></dl>{{ endif }}
 
-$diaspora
+       {{ if $homepage }}<dl class="homepage"><dt class="homepage-label">$homepage</dt><dd class="homepage-url"><a href="$profile.homepage" target="external-link">$profile.homepage</a></dd></dl>{{ endif }}
 
+       {{ inc diaspora_vcard.tpl }}{{ endinc }}
+       
+       <div id="profile-extra-links">
+               <ul>
+                       {{ if $connect }}
+                               <li><a id="dfrn-request-link" href="dfrn_request/$profile.nickname">$connect</a></li>
+                       {{ endif }}
+               </ul>
+       </div>
 </div>
 
-$marital
-
-$homepage
+$contact_block
 
 
index 7c3894145422f9b70d6cdf3b2ac7aa80b8a84d63..ead360deb567347e4d9c7a10f74ea5738bb7ff68 100644 (file)
@@ -15,7 +15,7 @@ $select
 <div id="prvmail-message-label">$yourmessage</div>
 <textarea rows="8" cols="72" class="prvmail-text" id="prvmail-text" name="body" ></textarea>
 
-</div>
+
 <div id="prvmail-submit-wrapper" >
        <input type="submit" id="prvmail-submit" name="submit" value="Submit" />
        <div id="prvmail-upload-wrapper" >
@@ -29,5 +29,6 @@ $select
        </div> 
 </div>
 <div id="prvmail-end"></div>
+</div>
 </form>
 </div>
index 4df793041025c5b905ff8fa72b3b874d559d5388..0cf143db499026ffb8dfa5ff76486c0c44dd8d70 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-function string_plural_select($n){
+function string_plural_select_pt_br($n){
        return ($n > 1);
 }
 ;
diff --git a/view/ru/messages.po b/view/ru/messages.po
new file mode 100644 (file)
index 0000000..e400927
--- /dev/null
@@ -0,0 +1,4561 @@
+# FRIENDIKA Distributed Social Network
+# Copyright (C) 2010, 2011 Mike Macgirvin
+# This file is distributed under the same license as the Friendika package.
+# 
+#   <mobilpress@gmail.com>, 2011.
+# Pavel Morozov <mobilpress@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: friendika\n"
+"Report-Msgid-Bugs-To: http://bugs.friendika.com/\n"
+"POT-Creation-Date: 2011-08-14 21:17-0700\n"
+"PO-Revision-Date: 2011-09-02 15:00+0000\n"
+"Last-Translator: mobilpress <mobilpress@gmail.com>\n"
+"Language-Team: Russian (http://www.transifex.net/projects/p/friendika/team/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"
+
+#: ../../mod/oexchange.php:27
+msgid "Post successful."
+msgstr "Успешно добавлено."
+
+#: ../../mod/crepair.php:42
+msgid "Contact settings applied."
+msgstr "Установки контакта приняты."
+
+#: ../../mod/crepair.php:44
+msgid "Contact update failed."
+msgstr "Обновление контакта неудачное."
+
+#: ../../mod/crepair.php:54 ../../mod/wall_attach.php:43
+#: ../../mod/fsuggest.php:78 ../../mod/events.php:102 ../../mod/photos.php:122
+#: ../../mod/photos.php:849 ../../mod/editpost.php:10 ../../mod/install.php:96
+#: ../../mod/notifications.php:62 ../../mod/contacts.php:132
+#: ../../mod/settings.php:41 ../../mod/settings.php:46
+#: ../../mod/settings.php:305 ../../mod/manage.php:75 ../../mod/network.php:6
+#: ../../mod/notes.php:20 ../../mod/attach.php:33 ../../mod/group.php:19
+#: ../../mod/viewcontacts.php:21 ../../mod/register.php:27
+#: ../../mod/regmod.php:111 ../../mod/item.php:110
+#: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:133
+#: ../../mod/profile_photo.php:144 ../../mod/profile_photo.php:155
+#: ../../mod/message.php:8 ../../mod/message.php:116 ../../mod/admin.php:10
+#: ../../mod/wall_upload.php:42 ../../mod/follow.php:8
+#: ../../mod/display.php:108 ../../mod/profiles.php:7
+#: ../../mod/profiles.php:226 ../../mod/invite.php:13 ../../mod/invite.php:81
+#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:308
+#: ../../include/items.php:1930 ../../index.php:266
+msgid "Permission denied."
+msgstr "Нет разрешения."
+
+#: ../../mod/crepair.php:68 ../../mod/fsuggest.php:20
+#: ../../mod/fsuggest.php:92 ../../mod/contacts.php:240
+#: ../../mod/dfrn_confirm.php:114
+msgid "Contact not found."
+msgstr "Контакт не найден."
+
+#: ../../mod/crepair.php:74
+msgid "Repair Contact Settings"
+msgstr "Восстановить установки контакта"
+
+#: ../../mod/crepair.php:76
+msgid ""
+"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect"
+" information your communications with this contact will stop working."
+msgstr ""
+"<strong>ВНИМАНИЕ: Это крайне важно</strong> и если вы введете неверную "
+"информацию, ваша связь с этим контактом перестанет работать."
+
+#: ../../mod/crepair.php:77
+msgid ""
+"Please use your browser 'Back' button <strong>now</strong> if you are "
+"uncertain what to do on this page."
+msgstr ""
+"Пожалуйста, нажмите клавишу вашего браузера 'Back' или 'Назад' "
+"<strong>сейчас</strong>, если вы не уверены, что делаете на этой странице."
+
+#: ../../mod/crepair.php:85 ../../mod/admin.php:464 ../../mod/admin.php:473
+msgid "Name"
+msgstr "Имя"
+
+#: ../../mod/crepair.php:86
+msgid "Account Nickname"
+msgstr "Ник аккаунта"
+
+#: ../../mod/crepair.php:87
+msgid "Account URL"
+msgstr "URL аккаунта"
+
+#: ../../mod/crepair.php:88
+msgid "Friend Request URL"
+msgstr "URL запроса в друзья"
+
+#: ../../mod/crepair.php:89
+msgid "Friend Confirm URL"
+msgstr "URL подтверждения друга"
+
+#: ../../mod/crepair.php:90
+msgid "Notification Endpoint URL"
+msgstr "URL эндпоинта уведомления"
+
+#: ../../mod/crepair.php:91
+msgid "Poll/Feed URL"
+msgstr "URL опроса/ленты"
+
+#: ../../mod/crepair.php:100 ../../mod/fsuggest.php:107
+#: ../../mod/events.php:333 ../../mod/photos.php:877 ../../mod/photos.php:934
+#: ../../mod/photos.php:1144 ../../mod/photos.php:1184
+#: ../../mod/photos.php:1223 ../../mod/photos.php:1254
+#: ../../mod/install.php:137 ../../mod/contacts.php:296
+#: ../../mod/settings.php:482 ../../mod/manage.php:106 ../../mod/group.php:84
+#: ../../mod/group.php:167 ../../mod/admin.php:298 ../../mod/admin.php:461
+#: ../../mod/admin.php:587 ../../mod/admin.php:652 ../../mod/profiles.php:372
+#: ../../mod/invite.php:106 ../../addon/facebook/facebook.php:366
+#: ../../addon/randplace/randplace.php:178
+#: ../../addon/impressum/impressum.php:69 ../../addon/oembed/oembed.php:41
+#: ../../addon/statusnet/statusnet.php:274
+#: ../../addon/statusnet/statusnet.php:288
+#: ../../addon/statusnet/statusnet.php:314
+#: ../../addon/statusnet/statusnet.php:321
+#: ../../addon/statusnet/statusnet.php:343
+#: ../../addon/statusnet/statusnet.php:468 ../../addon/piwik/piwik.php:76
+#: ../../addon/twitter/twitter.php:171 ../../addon/twitter/twitter.php:194
+#: ../../addon/twitter/twitter.php:280 ../../include/conversation.php:409
+msgid "Submit"
+msgstr "Подтвердить"
+
+#: ../../mod/help.php:27
+msgid "Help:"
+msgstr "Помощь:"
+
+#: ../../mod/help.php:31 ../../include/nav.php:64
+msgid "Help"
+msgstr "Помощь"
+
+#: ../../mod/wall_attach.php:57
+#, php-format
+msgid "File exceeds size limit of %d"
+msgstr "Файл превышает предельный размер %d"
+
+#: ../../mod/wall_attach.php:87 ../../mod/wall_attach.php:98
+msgid "File upload failed."
+msgstr "Загрузка файла не удалась."
+
+#: ../../mod/fsuggest.php:63
+msgid "Friend suggestion sent."
+msgstr ""
+
+#: ../../mod/fsuggest.php:97
+msgid "Suggest Friends"
+msgstr ""
+
+#: ../../mod/fsuggest.php:99
+#, php-format
+msgid "Suggest a friend for %s"
+msgstr ""
+
+#: ../../mod/events.php:112 ../../mod/photos.php:834 ../../mod/notes.php:46
+#: ../../mod/profile.php:116
+msgid "Status"
+msgstr "Статус"
+
+#: ../../mod/events.php:113 ../../mod/photos.php:835 ../../mod/notes.php:47
+#: ../../mod/profperm.php:103 ../../mod/profile.php:117
+#: ../../include/profile_advanced.php:7
+msgid "Profile"
+msgstr "Профиль"
+
+#: ../../mod/events.php:114 ../../mod/photos.php:836 ../../mod/notes.php:48
+#: ../../mod/profile.php:118
+msgid "Photos"
+msgstr "Фото"
+
+#: ../../mod/events.php:115 ../../mod/events.php:120 ../../mod/photos.php:837
+#: ../../mod/notes.php:49 ../../mod/profile.php:119
+msgid "Events"
+msgstr ""
+
+#: ../../mod/events.php:116 ../../mod/photos.php:838 ../../mod/notes.php:50
+#: ../../mod/notes.php:55 ../../mod/profile.php:120
+msgid "Personal Notes"
+msgstr ""
+
+#: ../../mod/events.php:210
+msgid "Create New Event"
+msgstr ""
+
+#: ../../mod/events.php:213
+msgid "Previous"
+msgstr ""
+
+#: ../../mod/events.php:216
+msgid "Next"
+msgstr ""
+
+#: ../../mod/events.php:223
+msgid "l, F j"
+msgstr ""
+
+#: ../../mod/events.php:235
+msgid "Edit event"
+msgstr ""
+
+#: ../../mod/events.php:237 ../../include/text.php:846
+msgid "link to source"
+msgstr "ссылка на источник"
+
+#: ../../mod/events.php:305
+msgid "hour:minute"
+msgstr ""
+
+#: ../../mod/events.php:314
+msgid "Event details"
+msgstr ""
+
+#: ../../mod/events.php:315
+#, php-format
+msgid "Format is %s %s. Starting date and Description are required."
+msgstr ""
+
+#: ../../mod/events.php:316
+msgid "Event Starts:"
+msgstr ""
+
+#: ../../mod/events.php:319
+msgid "Finish date/time is not known or not relevant"
+msgstr ""
+
+#: ../../mod/events.php:321
+msgid "Event Finishes:"
+msgstr ""
+
+#: ../../mod/events.php:324
+msgid "Adjust for viewer timezone"
+msgstr ""
+
+#: ../../mod/events.php:326
+msgid "Description:"
+msgstr ""
+
+#: ../../mod/events.php:328 ../../include/event.php:37 ../../boot.php:868
+msgid "Location:"
+msgstr "Местоположение:"
+
+#: ../../mod/events.php:330
+msgid "Share this event"
+msgstr ""
+
+#: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94
+#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:45
+msgid "Cancel"
+msgstr "Отмена"
+
+#: ../../mod/tagrm.php:41
+msgid "Tag removed"
+msgstr "Ключевое слово удалено"
+
+#: ../../mod/tagrm.php:79
+msgid "Remove Item Tag"
+msgstr "Удалить ключевое слово"
+
+#: ../../mod/tagrm.php:81
+msgid "Select a tag to remove: "
+msgstr "Выберите ключевое слово для удаления: "
+
+#: ../../mod/tagrm.php:93
+msgid "Remove"
+msgstr "Удалить"
+
+#: ../../mod/dfrn_poll.php:90 ../../mod/dfrn_poll.php:516
+#, php-format
+msgid "%s welcomes %s"
+msgstr "%s приглашает %s"
+
+#: ../../mod/photos.php:37
+msgid "Photo Albums"
+msgstr "Фотоальбомы"
+
+#: ../../mod/photos.php:45 ../../mod/photos.php:143 ../../mod/photos.php:857
+#: ../../mod/photos.php:926 ../../mod/photos.php:941 ../../mod/photos.php:1332
+#: ../../mod/photos.php:1344
+msgid "Contact Photos"
+msgstr "Фотографии контакта"
+
+#: ../../mod/photos.php:57 ../../mod/settings.php:9
+msgid "everybody"
+msgstr "все"
+
+#: ../../mod/photos.php:132
+msgid "Contact information unavailable"
+msgstr "Контактная информация недоступна"
+
+#: ../../mod/photos.php:143 ../../mod/photos.php:577 ../../mod/photos.php:926
+#: ../../mod/photos.php:941 ../../mod/register.php:316
+#: ../../mod/register.php:323 ../../mod/register.php:330
+#: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65
+#: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:160
+#: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245
+msgid "Profile Photos"
+msgstr "Фотографии профиля"
+
+#: ../../mod/photos.php:153
+msgid "Album not found."
+msgstr "Альбом не найден."
+
+#: ../../mod/photos.php:171 ../../mod/photos.php:935
+msgid "Delete Album"
+msgstr "Удалить альбом"
+
+#: ../../mod/photos.php:234 ../../mod/photos.php:1145
+msgid "Delete Photo"
+msgstr "Удалить фото"
+
+#: ../../mod/photos.php:508
+msgid "was tagged in a"
+msgstr "отмечен/а/ в"
+
+#: ../../mod/photos.php:508 ../../mod/like.php:110
+#: ../../include/diaspora.php:446 ../../include/conversation.php:31
+msgid "photo"
+msgstr "фото"
+
+#: ../../mod/photos.php:508
+msgid "by"
+msgstr "от"
+
+#: ../../mod/photos.php:608 ../../addon/js_upload/js_upload.php:310
+msgid "Image exceeds size limit of "
+msgstr "Размер фото превышает лимит "
+
+#: ../../mod/photos.php:616
+msgid "Image file is empty."
+msgstr ""
+
+#: ../../mod/photos.php:630 ../../mod/profile_photo.php:118
+#: ../../mod/wall_upload.php:65
+msgid "Unable to process image."
+msgstr "Невозможно обработать фото."
+
+#: ../../mod/photos.php:650 ../../mod/profile_photo.php:241
+#: ../../mod/wall_upload.php:84
+msgid "Image upload failed."
+msgstr "Загрузка фото неудачная."
+
+#: ../../mod/photos.php:733 ../../mod/community.php:9
+#: ../../mod/dfrn_request.php:591 ../../mod/viewcontacts.php:16
+#: ../../mod/display.php:7 ../../mod/search.php:13 ../../mod/directory.php:20
+msgid "Public access denied."
+msgstr "Свободный доступ закрыт."
+
+#: ../../mod/photos.php:743
+msgid "No photos selected"
+msgstr "Не выбрано фото."
+
+#: ../../mod/photos.php:820
+msgid "Access to this item is restricted."
+msgstr ""
+
+#: ../../mod/photos.php:884
+msgid "Upload Photos"
+msgstr "Загрузить фото"
+
+#: ../../mod/photos.php:887 ../../mod/photos.php:930
+msgid "New album name: "
+msgstr "Название нового альбома: "
+
+#: ../../mod/photos.php:888
+msgid "or existing album name: "
+msgstr "или название существующего альбома: "
+
+#: ../../mod/photos.php:890 ../../mod/photos.php:1140
+msgid "Permissions"
+msgstr "Разрешения"
+
+#: ../../mod/photos.php:945
+msgid "Edit Album"
+msgstr "Редактировать альбом"
+
+#: ../../mod/photos.php:955 ../../mod/photos.php:1362
+msgid "View Photo"
+msgstr "Просмотреть фото"
+
+#: ../../mod/photos.php:984
+msgid "Photo not available"
+msgstr "Фото недоступно"
+
+#: ../../mod/photos.php:1033
+msgid "Edit photo"
+msgstr "Редактировать фото"
+
+#: ../../mod/photos.php:1034
+msgid "Use as profile photo"
+msgstr "Использовать как фото профиля"
+
+#: ../../mod/photos.php:1040 ../../include/conversation.php:342
+msgid "Private Message"
+msgstr "Личное сообщение"
+
+#: ../../mod/photos.php:1051
+msgid "View Full Size"
+msgstr "Просмотреть полный размер"
+
+#: ../../mod/photos.php:1119
+msgid "Tags: "
+msgstr "Ключевые слова: "
+
+#: ../../mod/photos.php:1122
+msgid "[Remove any tag]"
+msgstr "[Удалить любое ключевое слово]"
+
+#: ../../mod/photos.php:1133
+msgid "New album name"
+msgstr "Название нового альбома"
+
+#: ../../mod/photos.php:1136
+msgid "Caption"
+msgstr "Подпись"
+
+#: ../../mod/photos.php:1138
+msgid "Add a Tag"
+msgstr "Добавить ключевое слово"
+
+#: ../../mod/photos.php:1142
+msgid ""
+"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
+msgstr ""
+"Пример: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
+
+#: ../../mod/photos.php:1162 ../../include/conversation.php:390
+msgid "I like this (toggle)"
+msgstr "Мне нравится это (флаг)"
+
+#: ../../mod/photos.php:1163 ../../include/conversation.php:391
+msgid "I don't like this (toggle)"
+msgstr "Мне не нравится это (флаг)"
+
+#: ../../mod/photos.php:1164 ../../include/conversation.php:392
+#: ../../include/conversation.php:746
+msgid "Share"
+msgstr "Поделиться"
+
+#: ../../mod/photos.php:1165 ../../mod/editpost.php:99
+#: ../../mod/message.php:190 ../../mod/message.php:324
+#: ../../include/conversation.php:393 ../../include/conversation.php:756
+msgid "Please wait"
+msgstr "Пожалуйста, подождите"
+
+#: ../../mod/photos.php:1181 ../../mod/photos.php:1220
+#: ../../mod/photos.php:1251 ../../include/conversation.php:406
+msgid "This is you"
+msgstr "Это вы"
+
+#: ../../mod/photos.php:1183 ../../mod/photos.php:1222
+#: ../../mod/photos.php:1253 ../../include/conversation.php:408
+#: ../../boot.php:411
+msgid "Comment"
+msgstr "Комментарий"
+
+#: ../../mod/photos.php:1281 ../../mod/group.php:154 ../../mod/admin.php:468
+#: ../../include/conversation.php:427
+msgid "Delete"
+msgstr "Удалить"
+
+#: ../../mod/photos.php:1349
+msgid "Recent Photos"
+msgstr "Последние фото"
+
+#: ../../mod/photos.php:1353
+msgid "Upload New Photos"
+msgstr "Загрузить новые фотографии"
+
+#: ../../mod/photos.php:1366
+msgid "View Album"
+msgstr "Просмотреть альбом"
+
+#: ../../mod/community.php:14
+msgid "Not available."
+msgstr ""
+
+#: ../../mod/community.php:26 ../../include/nav.php:79
+msgid "Community"
+msgstr ""
+
+#: ../../mod/community.php:56 ../../mod/search.php:65
+msgid "No results."
+msgstr "Нет результатов."
+
+#: ../../mod/community.php:83 ../../mod/network.php:302
+#: ../../mod/register.php:504 ../../mod/profile.php:241
+#: ../../mod/display.php:117
+msgid ""
+"Shared content is covered by the <a "
+"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
+"Attribution 3.0</a> license."
+msgstr ""
+"Общий контент покрывается лицензией <a "
+"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
+"Attribution 3.0</a>."
+
+#: ../../mod/editpost.php:17 ../../mod/editpost.php:27
+msgid "Item not found"
+msgstr "Пункт не найден"
+
+#: ../../mod/editpost.php:32
+msgid "Edit post"
+msgstr "Редактировать сообщение"
+
+#: ../../mod/editpost.php:75 ../../include/conversation.php:732
+msgid "Post to Email"
+msgstr "Отправить на Email"
+
+#: ../../mod/editpost.php:90 ../../include/group.php:171
+#: ../../include/group.php:172 ../../include/conversation.php:417
+msgid "Edit"
+msgstr "Редактировать"
+
+#: ../../mod/editpost.php:91 ../../mod/message.php:188
+#: ../../mod/message.php:322 ../../include/conversation.php:747
+msgid "Upload photo"
+msgstr "Загрузить фото"
+
+#: ../../mod/editpost.php:92 ../../include/conversation.php:748
+msgid "Attach file"
+msgstr "Приложить файл"
+
+#: ../../mod/editpost.php:93 ../../mod/message.php:189
+#: ../../mod/message.php:323 ../../include/conversation.php:749
+msgid "Insert web link"
+msgstr "Вставить веб-ссылку"
+
+#: ../../mod/editpost.php:94 ../../include/conversation.php:750
+msgid "Insert YouTube video"
+msgstr "Вставить видео YouTube"
+
+#: ../../mod/editpost.php:95 ../../include/conversation.php:751
+msgid "Insert Vorbis [.ogg] video"
+msgstr "Вставить Vorbis [.ogg] видео"
+
+#: ../../mod/editpost.php:96 ../../include/conversation.php:752
+msgid "Insert Vorbis [.ogg] audio"
+msgstr "Вставить Vorbis [.ogg] аудио"
+
+#: ../../mod/editpost.php:97 ../../include/conversation.php:753
+msgid "Set your location"
+msgstr "Задать ваше местоположение"
+
+#: ../../mod/editpost.php:98 ../../include/conversation.php:754
+msgid "Clear browser location"
+msgstr "Очистить местоположение браузера"
+
+#: ../../mod/editpost.php:100 ../../include/conversation.php:757
+msgid "Permission settings"
+msgstr "Настройки разрешений"
+
+#: ../../mod/editpost.php:108 ../../include/conversation.php:765
+msgid "CC: email addresses"
+msgstr "CC: адреса электронной почты"
+
+#: ../../mod/editpost.php:109 ../../include/conversation.php:766
+msgid "Public post"
+msgstr "Публичное сообщение"
+
+#: ../../mod/editpost.php:111 ../../include/conversation.php:768
+msgid "Example: bob@example.com, mary@example.com"
+msgstr "Пример: bob@example.com, mary@example.com"
+
+#: ../../mod/dfrn_request.php:96
+msgid "This introduction has already been accepted."
+msgstr "Эта краткая информация уже была принята."
+
+#: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351
+msgid "Profile location is not valid or does not contain profile information."
+msgstr ""
+"Местоположение профиля является недопустимым или не содержит информацию о "
+"профиле."
+
+#: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356
+msgid "Warning: profile location has no identifiable owner name."
+msgstr ""
+"Внимание: местоположение профиля не имеет идентифицируемого имени владельца."
+
+#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:358
+msgid "Warning: profile location has no profile photo."
+msgstr "Внимание: местоположение профиля не имеет еще фотографии профиля."
+
+#: ../../mod/dfrn_request.php:130 ../../mod/dfrn_request.php:361
+#, php-format
+msgid "%d required parameter was not found at the given location"
+msgid_plural "%d required parameters were not found at the given location"
+msgstr[0] "%d требуемый параметр не был найден в заданном месте"
+msgstr[1] "%d требуемые параметры не были найдены в заданном месте"
+msgstr[2] "%d требуемые параметры не были найдены в заданном месте"
+
+#: ../../mod/dfrn_request.php:168
+msgid "Introduction complete."
+msgstr "Краткая информация заполнена."
+
+#: ../../mod/dfrn_request.php:192
+msgid "Unrecoverable protocol error."
+msgstr "Неисправимая ошибка протокола."
+
+#: ../../mod/dfrn_request.php:220
+msgid "Profile unavailable."
+msgstr "Профиль недоступен."
+
+#: ../../mod/dfrn_request.php:245
+#, php-format
+msgid "%s has received too many connection requests today."
+msgstr "К %s пришло сегодня слишком много запросов на подключение."
+
+#: ../../mod/dfrn_request.php:246
+msgid "Spam protection measures have been invoked."
+msgstr "Были применены меры защиты от спама."
+
+#: ../../mod/dfrn_request.php:247
+msgid "Friends are advised to please try again in 24 hours."
+msgstr "Друзья советуют попробовать еще раз в ближайшие 24 часа."
+
+#: ../../mod/dfrn_request.php:277
+msgid "Invalid locator"
+msgstr "Недопустимый локатор"
+
+#: ../../mod/dfrn_request.php:296
+msgid "Unable to resolve your name at the provided location."
+msgstr "Не удается установить ваше имя на предложенном местоположении."
+
+#: ../../mod/dfrn_request.php:309
+msgid "You have already introduced yourself here."
+msgstr "Вы уже ввели информацию о себе здесь."
+
+#: ../../mod/dfrn_request.php:313
+#, php-format
+msgid "Apparently you are already friends with %s."
+msgstr "Похоже, что вы уже друзья с %s."
+
+#: ../../mod/dfrn_request.php:334
+msgid "Invalid profile URL."
+msgstr "Неверный URL профиля."
+
+#: ../../mod/dfrn_request.php:340 ../../mod/follow.php:20
+msgid "Disallowed profile URL."
+msgstr "Запрещенный URL профиля."
+
+#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:116
+msgid "Failed to update contact record."
+msgstr "Не удалось обновить запись контакта."
+
+#: ../../mod/dfrn_request.php:427
+msgid "Your introduction has been sent."
+msgstr "Ваша краткая информация отправлена."
+
+#: ../../mod/dfrn_request.php:481
+msgid "Please login to confirm introduction."
+msgstr "Пожалуйста, войдите с паролем для подтверждения краткой информации."
+
+#: ../../mod/dfrn_request.php:495
+msgid ""
+"Incorrect identity currently logged in. Please login to "
+"<strong>this</strong> profile."
+msgstr ""
+"Неверно идентифицирован вход. Пожалуйста, войдите в <strong>этот</strong> "
+"профиль."
+
+#: ../../mod/dfrn_request.php:507
+#, php-format
+msgid "Welcome home %s."
+msgstr "Добро пожаловать домой, %s!"
+
+#: ../../mod/dfrn_request.php:508
+#, php-format
+msgid "Please confirm your introduction/connection request to %s."
+msgstr ""
+"Пожалуйста, подтвердите краткую информацию / запрос на подключение к %s."
+
+#: ../../mod/dfrn_request.php:509
+msgid "Confirm"
+msgstr "Подтвердить"
+
+#: ../../mod/dfrn_request.php:542 ../../include/items.php:1519
+msgid "[Name Withheld]"
+msgstr "[Имя не разглашается]"
+
+#: ../../mod/dfrn_request.php:549
+msgid "Introduction received at "
+msgstr "Краткая информация получена "
+
+#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:44
+#: ../../mod/lostpass.php:106 ../../mod/register.php:369
+#: ../../mod/register.php:423 ../../mod/regmod.php:54
+#: ../../mod/dfrn_notify.php:291 ../../mod/dfrn_notify.php:547
+#: ../../mod/dfrn_confirm.php:674 ../../include/items.php:1528
+msgid "Administrator"
+msgstr "Администратор"
+
+#: ../../mod/dfrn_request.php:630
+msgid "Friend/Connection Request"
+msgstr "Запрос в друзья / на подключение"
+
+#: ../../mod/dfrn_request.php:631
+msgid ""
+"Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, "
+"testuser@identi.ca"
+msgstr ""
+"Примеры: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, "
+"testuser@identi.ca"
+
+#: ../../mod/dfrn_request.php:632
+msgid "Please answer the following:"
+msgstr "Пожалуйста, ответьте следующее:"
+
+#: ../../mod/dfrn_request.php:633
+#, php-format
+msgid "Does %s know you?"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:415
+#: ../../mod/settings.php:421 ../../mod/settings.php:429
+#: ../../mod/settings.php:433 ../../mod/register.php:498
+#: ../../mod/profiles.php:354
+msgid "Yes"
+msgstr "Да"
+
+#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:415
+#: ../../mod/settings.php:421 ../../mod/settings.php:429
+#: ../../mod/settings.php:433 ../../mod/register.php:499
+#: ../../mod/profiles.php:355
+msgid "No"
+msgstr "Нет"
+
+#: ../../mod/dfrn_request.php:636
+msgid "Add a personal note:"
+msgstr "Добавить личную заметку:"
+
+#: ../../mod/dfrn_request.php:637
+msgid ""
+"Please enter your 'Identity Address' from one of the following supported "
+"social networks:"
+msgstr ""
+"Пожалуйста, введите ваш 'идентификационный адрес' одной из следующих "
+"поддерживаемых социальных сетей:"
+
+#: ../../mod/dfrn_request.php:638
+msgid "Friendika"
+msgstr "Friendika"
+
+#: ../../mod/dfrn_request.php:639
+msgid "StatusNet/Federated Social Web"
+msgstr "StatusNet / Federated Social Web"
+
+#: ../../mod/dfrn_request.php:640
+msgid "Private (secure) network"
+msgstr "Частная (защищенная) сеть"
+
+#: ../../mod/dfrn_request.php:641
+msgid "Public (insecure) network"
+msgstr "Общественная (незащищенная) сеть"
+
+#: ../../mod/dfrn_request.php:642
+msgid "Your Identity Address:"
+msgstr "Ваш идентификационный адрес:"
+
+#: ../../mod/dfrn_request.php:643
+msgid "Submit Request"
+msgstr "Отправить запрос"
+
+#: ../../mod/install.php:34
+msgid "Could not create/connect to database."
+msgstr "Не удается создать / подключиться к базе данных."
+
+#: ../../mod/install.php:39
+msgid "Connected to database."
+msgstr "Подключено к базе данных."
+
+#: ../../mod/install.php:75
+msgid "Proceed with Installation"
+msgstr "Приступить к установке"
+
+#: ../../mod/install.php:77
+msgid "Your Friendika site database has been installed."
+msgstr "Ваша база данных сайта Friendika установлена."
+
+#: ../../mod/install.php:78
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the "
+"poller."
+msgstr ""
+"ВАЖНО: Вам нужно будет [вручную] установить запланированное задание для "
+"регистратора."
+
+#: ../../mod/install.php:79 ../../mod/install.php:89 ../../mod/install.php:207
+msgid "Please see the file \"INSTALL.txt\"."
+msgstr "Пожалуйста, смотрите файл \"INSTALL.txt\"."
+
+#: ../../mod/install.php:81
+msgid "Proceed to registration"
+msgstr "Приступить к регистрации"
+
+#: ../../mod/install.php:87
+msgid "Database import failed."
+msgstr "Импорт базы данных неудачный."
+
+#: ../../mod/install.php:88
+msgid ""
+"You may need to import the file \"database.sql\" manually using phpmyadmin "
+"or mysql."
+msgstr ""
+"Вам может понадобиться импортировать файл \"database.sql\" вручную с помощью"
+" PhpMyAdmin или MySQL."
+
+#: ../../mod/install.php:101
+msgid "Welcome to Friendika."
+msgstr "Добро пожаловать в Friendika!"
+
+#: ../../mod/install.php:124
+msgid "Friendika Social Network"
+msgstr "Социальная сеть Friendika"
+
+#: ../../mod/install.php:125
+msgid "Installation"
+msgstr "Установка"
+
+#: ../../mod/install.php:126
+msgid ""
+"In order to install Friendika we need to know how to connect to your "
+"database."
+msgstr ""
+
+#: ../../mod/install.php:127
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
+msgstr ""
+"Пожалуйста, свяжитесь с вашим хостинг-провайдером или администратором сайта,"
+" если у вас есть вопросы об этих параметрах."
+
+#: ../../mod/install.php:128
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
+msgstr ""
+
+#: ../../mod/install.php:129
+msgid "Database Server Name"
+msgstr "Имя сервера базы данных"
+
+#: ../../mod/install.php:130
+msgid "Database Login Name"
+msgstr "Логин базы данных"
+
+#: ../../mod/install.php:131
+msgid "Database Login Password"
+msgstr "Пароль базы данных"
+
+#: ../../mod/install.php:132
+msgid "Database Name"
+msgstr "Имя базы данных"
+
+#: ../../mod/install.php:133
+msgid "Please select a default timezone for your website"
+msgstr "Пожалуйста, выберите часовой пояс по умолчанию для вашего сайта"
+
+#: ../../mod/install.php:134
+msgid ""
+"Site administrator email address. Your account email address must match this"
+" in order to use the web admin panel."
+msgstr ""
+
+#: ../../mod/install.php:153
+msgid "Could not find a command line version of PHP in the web server PATH."
+msgstr "Не удалось найти PATH веб-сервера в установках PHP."
+
+#: ../../mod/install.php:154
+msgid ""
+"This is required. Please adjust the configuration file .htconfig.php "
+"accordingly."
+msgstr ""
+"Это необходимо. Пожалуйста, измените файл конфигурации .htconfig.php "
+"соответственно."
+
+#: ../../mod/install.php:161
+msgid ""
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
+msgstr "Не включено \"register_argc_argv\" в установках PHP."
+
+#: ../../mod/install.php:162
+msgid "This is required for message delivery to work."
+msgstr "Это необходимо для работы доставки сообщений."
+
+#: ../../mod/install.php:184
+msgid ""
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
+msgstr ""
+"Ошибка: функция \"openssl_pkey_new\" в этой системе не в состоянии "
+"генерировать ключи шифрования"
+
+#: ../../mod/install.php:185
+msgid ""
+"If running under Windows, please see "
+"\"http://www.php.net/manual/en/openssl.installation.php\"."
+msgstr ""
+"Если вы работаете под Windows, см. "
+"\"http://www.php.net/manual/en/openssl.installation.php\"."
+
+#: ../../mod/install.php:194
+msgid ""
+"Error: Apache webserver mod-rewrite module is required but not installed."
+msgstr ""
+"Ошибка: необходим модуль веб-сервера Apache mod-rewrite, но он не "
+"установлен."
+
+#: ../../mod/install.php:196
+msgid "Error: libCURL PHP module required but not installed."
+msgstr "Ошибка: необходим libCURL PHP модуль, но он не установлен."
+
+#: ../../mod/install.php:198
+msgid ""
+"Error: GD graphics PHP module with JPEG support required but not installed."
+msgstr ""
+"Ошибка: необходим PHP модуль GD графики с поддержкой JPEG, но он не "
+"установлен."
+
+#: ../../mod/install.php:200
+msgid "Error: openssl PHP module required but not installed."
+msgstr "Ошибка: необходим PHP модуль OpenSSL, но он не установлен."
+
+#: ../../mod/install.php:202
+msgid "Error: mysqli PHP module required but not installed."
+msgstr "Ошибка: необходим PHP модуль MySQLi, но он не установлен."
+
+#: ../../mod/install.php:204
+msgid "Error: mb_string PHP module required but not installed."
+msgstr ""
+
+#: ../../mod/install.php:216
+msgid ""
+"The web installer needs to be able to create a file called \".htconfig.php\""
+" in the top folder of your web server and it is unable to do so."
+msgstr ""
+"Веб-инсталлятору требуется создать файл с именем \". htconfig.php\" в "
+"верхней папке веб-сервера, но он не в состоянии это сделать."
+
+#: ../../mod/install.php:217
+msgid ""
+"This is most often a permission setting, as the web server may not be able "
+"to write files in your folder - even if you can."
+msgstr ""
+"Это наиболее частые параметры разрешений, когда веб-сервер не может записать"
+" файлы в папке - даже если вы можете."
+
+#: ../../mod/install.php:218
+msgid ""
+"Please check with your site documentation or support people to see if this "
+"situation can be corrected."
+msgstr ""
+"Пожалуйста, посмотрите документацию вашего сайта или обратитесь к другим за "
+"поддержкой, чтобы убедиться, что эта ситуация может быть исправлена."
+
+#: ../../mod/install.php:219
+msgid ""
+"If not, you may be required to perform a manual installation. Please see the"
+" file \"INSTALL.txt\" for instructions."
+msgstr ""
+"Если нет, вам может потребоваться выполнить установку вручную. Пожалуйста, "
+"посмотрите файл \"INSTALL.txt\" для получения инструкций."
+
+#: ../../mod/install.php:228
+msgid ""
+"The database configuration file \".htconfig.php\" could not be written. "
+"Please use the enclosed text to create a configuration file in your web "
+"server root."
+msgstr ""
+"Файл конфигурации базы данных \".htconfig.php\" не могла быть записан. "
+"Пожалуйста, используйте приложенный текст, чтобы создать конфигурационный "
+"файл в корневом каталоге веб-сервера."
+
+#: ../../mod/install.php:243
+msgid "Errors encountered creating database tables."
+msgstr "Обнаружены ошибки при создании таблиц базы данных."
+
+#: ../../mod/update_community.php:18 ../../mod/update_network.php:22
+#: ../../mod/update_profile.php:41
+msgid "[Embedded content - reload page to view]"
+msgstr "[Встроенный контент - перезагрузите страницу для просмотра]"
+
+#: ../../mod/match.php:10
+msgid "Profile Match"
+msgstr "Похожие профили"
+
+#: ../../mod/match.php:18
+msgid "No keywords to match. Please add keywords to your default profile."
+msgstr ""
+
+#: ../../mod/match.php:54
+msgid "No matches"
+msgstr "Нет соответствий"
+
+#: ../../mod/lockview.php:39
+msgid "Remote privacy information not available."
+msgstr "Личная информация удаленно недоступна."
+
+#: ../../mod/lockview.php:43
+msgid "Visible to:"
+msgstr "Кто может видеть:"
+
+#: ../../mod/home.php:23
+#, php-format
+msgid "Welcome to %s"
+msgstr "Добро пожаловать на %s!"
+
+#: ../../mod/notifications.php:26
+msgid "Invalid request identifier."
+msgstr "Неверный идентификатор запроса."
+
+#: ../../mod/notifications.php:35 ../../mod/notifications.php:118
+#: ../../mod/notifications.php:162
+msgid "Discard"
+msgstr "Отказаться"
+
+#: ../../mod/notifications.php:47 ../../mod/notifications.php:117
+#: ../../mod/notifications.php:161
+msgid "Ignore"
+msgstr "Игнорировать"
+
+#: ../../mod/notifications.php:74
+msgid "Pending Friend/Connect Notifications"
+msgstr "Ожидающие друзья / Уведомления о подключении"
+
+#: ../../mod/notifications.php:78
+msgid "Show Ignored Requests"
+msgstr "Показать проигнорированные запросы"
+
+#: ../../mod/notifications.php:78
+msgid "Hide Ignored Requests"
+msgstr "Скрыть проигнорированные запросы"
+
+#: ../../mod/notifications.php:105 ../../mod/notifications.php:148
+msgid "Notification type: "
+msgstr "Тип уведомления: "
+
+#: ../../mod/notifications.php:106
+msgid "Friend Suggestion"
+msgstr ""
+
+#: ../../mod/notifications.php:108
+#, php-format
+msgid "suggested by %s"
+msgstr ""
+
+#: ../../mod/notifications.php:114 ../../mod/notifications.php:159
+#: ../../mod/admin.php:466
+msgid "Approve"
+msgstr "Одобрить"
+
+#: ../../mod/notifications.php:133
+msgid "Claims to be known to you: "
+msgstr "Претензии, о которых должно быть вам известно: "
+
+#: ../../mod/notifications.php:133
+msgid "yes"
+msgstr "да"
+
+#: ../../mod/notifications.php:133
+msgid "no"
+msgstr "нет"
+
+#: ../../mod/notifications.php:139
+msgid "Approve as: "
+msgstr "Утвердить как: "
+
+#: ../../mod/notifications.php:140
+msgid "Friend"
+msgstr "Друг"
+
+#: ../../mod/notifications.php:141
+msgid "Fan/Admirer"
+msgstr "Фанат / Поклонник"
+
+#: ../../mod/notifications.php:149
+msgid "Friend/Connect Request"
+msgstr "Запрос в друзья / на подключение"
+
+#: ../../mod/notifications.php:149
+msgid "New Follower"
+msgstr "Новый фолловер"
+
+#: ../../mod/notifications.php:168
+msgid "No notifications."
+msgstr "Нет уведомлений."
+
+#: ../../mod/contacts.php:26
+msgid "Invite Friends"
+msgstr "Пригласить друзей"
+
+#: ../../mod/contacts.php:32
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../../mod/contacts.php:41
+msgid "Find People With Shared Interests"
+msgstr "Найти людей с общими интересами"
+
+#: ../../mod/contacts.php:45
+msgid "Connect/Follow"
+msgstr "Подключиться/Следовать"
+
+#: ../../mod/contacts.php:46
+msgid "Example: bob@example.com, http://example.com/barbara"
+msgstr "Пример: bob@example.com, http://example.com/barbara"
+
+#: ../../mod/contacts.php:47
+msgid "Follow"
+msgstr "Следовать"
+
+#: ../../mod/contacts.php:69 ../../mod/contacts.php:150
+msgid "Could not access contact record."
+msgstr "Не удалось получить доступ к записи контакта."
+
+#: ../../mod/contacts.php:83
+msgid "Could not locate selected profile."
+msgstr "Не удается найти выбранный профиль."
+
+#: ../../mod/contacts.php:114
+msgid "Contact updated."
+msgstr "Контакт обновлен."
+
+#: ../../mod/contacts.php:172
+msgid "Contact has been blocked"
+msgstr "Контакт заблокирован"
+
+#: ../../mod/contacts.php:172
+msgid "Contact has been unblocked"
+msgstr "Контакт разблокирован"
+
+#: ../../mod/contacts.php:186
+msgid "Contact has been ignored"
+msgstr "Контакт проигнорирован"
+
+#: ../../mod/contacts.php:186
+msgid "Contact has been unignored"
+msgstr "У контакта отменено игнорирование"
+
+#: ../../mod/contacts.php:207
+msgid "stopped following"
+msgstr "остановлено следование"
+
+#: ../../mod/contacts.php:226
+msgid "Contact has been removed."
+msgstr "Контакт удален."
+
+#: ../../mod/contacts.php:254 ../../mod/contacts.php:397
+msgid "Mutual Friendship"
+msgstr "Взаимная дружба"
+
+#: ../../mod/contacts.php:258 ../../mod/contacts.php:401
+msgid "is a fan of yours"
+msgstr "является вашим поклонником"
+
+#: ../../mod/contacts.php:263 ../../mod/contacts.php:405
+msgid "you are a fan of"
+msgstr "Вы - поклонник"
+
+#: ../../mod/contacts.php:280
+msgid "Privacy Unavailable"
+msgstr "Конфиденциальность невозможна"
+
+#: ../../mod/contacts.php:281
+msgid "Private communications are not available for this contact."
+msgstr "Личные коммуникации недоступны для этого контакта."
+
+#: ../../mod/contacts.php:284
+msgid "Never"
+msgstr "Никогда"
+
+#: ../../mod/contacts.php:288
+msgid "(Update was successful)"
+msgstr "(Обновление было успешным)"
+
+#: ../../mod/contacts.php:288
+msgid "(Update was not successful)"
+msgstr "(Обновление не удалось)"
+
+#: ../../mod/contacts.php:291
+msgid "Suggest friends"
+msgstr ""
+
+#: ../../mod/contacts.php:295
+msgid "Contact Editor"
+msgstr "Редактор контакта"
+
+#: ../../mod/contacts.php:297
+msgid "Profile Visibility"
+msgstr "Видимость профиля"
+
+#: ../../mod/contacts.php:298
+#, php-format
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
+msgstr ""
+"Пожалуйста, выберите профиль, который вы хотите отображать %s, когда "
+"просмотр вашего профиля безопасен."
+
+#: ../../mod/contacts.php:299
+msgid "Contact Information / Notes"
+msgstr "Контактная информация / Заметки"
+
+#: ../../mod/contacts.php:300
+msgid "Online Reputation"
+msgstr "Репутация в онлайне"
+
+#: ../../mod/contacts.php:301
+msgid ""
+"Occasionally your friends may wish to inquire about this person's online "
+"legitimacy."
+msgstr ""
+"Иногда ваши друзья, возможно, захотят узнать о легитимности в онлайне этого "
+"человека."
+
+#: ../../mod/contacts.php:302
+msgid ""
+"You may help them choose whether or not to interact with this person by "
+"providing a <em>reputation</em> to guide them."
+msgstr ""
+"Вы можете помочь им решить, следует ли общаться с этим человеком, предлагая "
+"<em>репутацию</em> для ознакомления."
+
+#: ../../mod/contacts.php:303
+msgid ""
+"Please take a moment to elaborate on this selection if you feel it could be "
+"helpful to others."
+msgstr ""
+"Пожалуйста, найдите время, чтобы остановиться на этом выборе, если вы "
+"чувствуете, что можете быть полезным для других."
+
+#: ../../mod/contacts.php:304 ../../mod/contacts.php:421
+#: ../../mod/viewcontacts.php:61
+#, php-format
+msgid "Visit %s's profile [%s]"
+msgstr ""
+
+#: ../../mod/contacts.php:305
+msgid "Block/Unblock contact"
+msgstr "Блокировать / Разблокировать контакт"
+
+#: ../../mod/contacts.php:306
+msgid "Ignore contact"
+msgstr "Игнорировать контакт"
+
+#: ../../mod/contacts.php:307
+msgid "Repair contact URL settings"
+msgstr "Восстановить установки URL контакта"
+
+#: ../../mod/contacts.php:308
+msgid "Repair contact URL settings (WARNING: Advanced)"
+msgstr "Восстановить установки URL контакта (ВНИМАНИЕ: Расширено)"
+
+#: ../../mod/contacts.php:309
+msgid "View conversations"
+msgstr "Просмотр общения"
+
+#: ../../mod/contacts.php:312
+msgid "Delete contact"
+msgstr "Удалить контакт"
+
+#: ../../mod/contacts.php:314
+msgid "Last updated: "
+msgstr "Последнее обновление: "
+
+#: ../../mod/contacts.php:315
+msgid "Update public posts: "
+msgstr "Обновить сообщения для всех: "
+
+#: ../../mod/contacts.php:317 ../../mod/admin.php:701
+msgid "Update now"
+msgstr "Обновить сейчас"
+
+#: ../../mod/contacts.php:320
+msgid "Unblock this contact"
+msgstr "Разблокировать этот контакт"
+
+#: ../../mod/contacts.php:320
+msgid "Block this contact"
+msgstr "Блокировать этот контакт"
+
+#: ../../mod/contacts.php:321
+msgid "Unignore this contact"
+msgstr "Не игнорировать этот контакт"
+
+#: ../../mod/contacts.php:321
+msgid "Ignore this contact"
+msgstr "Игнорировать этот контакт"
+
+#: ../../mod/contacts.php:324
+msgid "Currently blocked"
+msgstr "В настоящее время заблокирован"
+
+#: ../../mod/contacts.php:325
+msgid "Currently ignored"
+msgstr "В настоящее время игнорируется"
+
+#: ../../mod/contacts.php:356 ../../include/nav.php:110
+msgid "Contacts"
+msgstr "Контакты"
+
+#: ../../mod/contacts.php:358
+msgid "Show Blocked Connections"
+msgstr "Показать заблокированные подключения"
+
+#: ../../mod/contacts.php:358
+msgid "Hide Blocked Connections"
+msgstr "Скрыть заблокированные подключения"
+
+#: ../../mod/contacts.php:360 ../../mod/directory.php:55
+msgid "Finding: "
+msgstr "Результат поиска: "
+
+#: ../../mod/contacts.php:361 ../../mod/directory.php:57
+msgid "Find"
+msgstr "Найти"
+
+#: ../../mod/contacts.php:422 ../../include/conversation.php:612
+msgid "Edit contact"
+msgstr "Изменить контакт"
+
+#: ../../mod/lostpass.php:16
+msgid "No valid account found."
+msgstr ""
+
+#: ../../mod/lostpass.php:31
+msgid "Password reset request issued. Check your email."
+msgstr "Запрос на сброс пароля принят. Проверьте вашу электронную почту."
+
+#: ../../mod/lostpass.php:42
+#, php-format
+msgid "Password reset requested at %s"
+msgstr "Запрос на сброс пароля получен %s"
+
+#: ../../mod/lostpass.php:64
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
+msgstr ""
+"Запрос не может быть проверен. (Вы, возможно, ранее представляли его.) "
+"Попытка сброса пароля неудачная."
+
+#: ../../mod/lostpass.php:82 ../../boot.php:654
+msgid "Password Reset"
+msgstr "Сброс пароля"
+
+#: ../../mod/lostpass.php:83
+msgid "Your password has been reset as requested."
+msgstr "Ваш пароль был сброшен по требованию."
+
+#: ../../mod/lostpass.php:84
+msgid "Your new password is"
+msgstr "Ваш новый пароль"
+
+#: ../../mod/lostpass.php:85
+msgid "Save or copy your new password - and then"
+msgstr "Сохраните или скопируйте новый пароль - и затем"
+
+#: ../../mod/lostpass.php:86
+msgid "click here to login"
+msgstr "нажмите здесь для входа"
+
+#: ../../mod/lostpass.php:87
+msgid ""
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
+msgstr ""
+"Ваш пароль может быть изменен на странице <em>Настройки</em> после успешного"
+" входа."
+
+#: ../../mod/lostpass.php:118
+msgid "Forgot your Password?"
+msgstr "Забыли пароль?"
+
+#: ../../mod/lostpass.php:119
+msgid ""
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
+msgstr ""
+"Введите адрес электронной почты и подтвердите, что вы хотите сбросить ваш "
+"пароль. Затем проверьте свою электронную почту для получения дальнейших "
+"инструкций."
+
+#: ../../mod/lostpass.php:120
+msgid "Nickname or Email: "
+msgstr "Ник или E-mail: "
+
+#: ../../mod/lostpass.php:121
+msgid "Reset"
+msgstr "Сброс"
+
+#: ../../mod/settings.php:64
+msgid "Passwords do not match. Password unchanged."
+msgstr "Пароли не совпадают. Пароль не изменен."
+
+#: ../../mod/settings.php:69
+msgid "Empty passwords are not allowed. Password unchanged."
+msgstr "Пустые пароли не допускаются. Пароль не изменен."
+
+#: ../../mod/settings.php:80
+msgid "Password changed."
+msgstr "Пароль изменен."
+
+#: ../../mod/settings.php:82
+msgid "Password update failed. Please try again."
+msgstr "Обновление пароля не удалось. Пожалуйста, попробуйте еще раз."
+
+#: ../../mod/settings.php:161
+msgid "Failed to connect with email account using the settings provided."
+msgstr ""
+
+#: ../../mod/settings.php:188
+msgid " Please use a shorter name."
+msgstr " Пожалуйста, используйте более короткое имя."
+
+#: ../../mod/settings.php:190
+msgid " Name too short."
+msgstr " Имя слишком короткое."
+
+#: ../../mod/settings.php:196
+msgid " Not valid email."
+msgstr " Неверный e-mail."
+
+#: ../../mod/settings.php:198
+msgid " Cannot change to that email."
+msgstr " Невозможно изменить на этот e-mail."
+
+#: ../../mod/settings.php:257 ../../addon/facebook/facebook.php:297
+#: ../../addon/impressum/impressum.php:64 ../../addon/piwik/piwik.php:89
+#: ../../addon/twitter/twitter.php:275
+msgid "Settings updated."
+msgstr "Настройки обновлены."
+
+#: ../../mod/settings.php:311 ../../include/nav.php:108
+msgid "Account settings"
+msgstr ""
+
+#: ../../mod/settings.php:312
+msgid "Plugin settings"
+msgstr ""
+
+#: ../../mod/settings.php:322
+msgid "No Plugin settings configured"
+msgstr "Нет сконфигурированных настроек плагина"
+
+#: ../../mod/settings.php:329 ../../addon/widgets/widgets.php:122
+msgid "Plugin Settings"
+msgstr "Настройки плагина"
+
+#: ../../mod/settings.php:382 ../../mod/admin.php:133 ../../mod/admin.php:443
+msgid "Normal Account"
+msgstr "Обычный аккаунт"
+
+#: ../../mod/settings.php:383
+msgid "This account is a normal personal profile"
+msgstr "Этот аккаунт является обычным персональным профилем"
+
+#: ../../mod/settings.php:386 ../../mod/admin.php:134 ../../mod/admin.php:444
+msgid "Soapbox Account"
+msgstr "Аккаунт Витрина"
+
+#: ../../mod/settings.php:387
+msgid "Automatically approve all connection/friend requests as read-only fans"
+msgstr ""
+"Автоматически одобряются все подключения / запросы в друзья, только для "
+"чтения поклонниками"
+
+#: ../../mod/settings.php:390 ../../mod/admin.php:135 ../../mod/admin.php:445
+msgid "Community/Celebrity Account"
+msgstr "Аккаунт Сообщество / Знаменитость"
+
+#: ../../mod/settings.php:391
+msgid ""
+"Automatically approve all connection/friend requests as read-write fans"
+msgstr ""
+"Автоматически одобряются все подключения / запросы в друзья, для чтения и "
+"записей поклонников"
+
+#: ../../mod/settings.php:394 ../../mod/admin.php:136 ../../mod/admin.php:446
+msgid "Automatic Friend Account"
+msgstr "Аккаунт Автоматический друг"
+
+#: ../../mod/settings.php:395
+msgid "Automatically approve all connection/friend requests as friends"
+msgstr ""
+"Автоматически одобряются все подключения / запросы в друзья, расширяется "
+"список друзей"
+
+#: ../../mod/settings.php:405
+msgid "OpenID:"
+msgstr ""
+
+#: ../../mod/settings.php:405
+msgid "(Optional) Allow this OpenID to login to this account."
+msgstr ""
+
+#: ../../mod/settings.php:415
+msgid "Publish your default profile in your local site directory?"
+msgstr ""
+
+#: ../../mod/settings.php:421
+msgid "Publish your default profile in the global social directory?"
+msgstr ""
+
+#: ../../mod/settings.php:429
+msgid "Hide your contact/friend list from viewers of your default profile?"
+msgstr ""
+
+#: ../../mod/settings.php:433
+msgid "Hide profile details and all your messages from unknown viewers?"
+msgstr "Скрыть детали профиля и все ваши сообщения от неизвестных зрителей?"
+
+#: ../../mod/settings.php:442
+msgid "Profile is <strong>not published</strong>."
+msgstr "Профиль <strong>не публикуется</strong>."
+
+#: ../../mod/settings.php:461 ../../mod/profile_photo.php:196
+msgid "or"
+msgstr "или"
+
+#: ../../mod/settings.php:466
+msgid "Your Identity Address is"
+msgstr "Ваш идентификационный адрес"
+
+#: ../../mod/settings.php:480
+msgid "Account Settings"
+msgstr "Настройки аккаунта"
+
+#: ../../mod/settings.php:487
+msgid "Export Personal Data"
+msgstr "Экспорт личных данных"
+
+#: ../../mod/settings.php:490
+msgid "Password Settings"
+msgstr "Настройка пароля"
+
+#: ../../mod/settings.php:491
+msgid "New Password:"
+msgstr "Новый пароль:"
+
+#: ../../mod/settings.php:492
+msgid "Confirm:"
+msgstr "Подтвердите:"
+
+#: ../../mod/settings.php:492
+msgid "Leave password fields blank unless changing"
+msgstr "Оставьте поля пароля пустыми, если он не изменяется"
+
+#: ../../mod/settings.php:496
+msgid "Basic Settings"
+msgstr "Основные параметры"
+
+#: ../../mod/settings.php:497 ../../include/profile_advanced.php:10
+msgid "Full Name:"
+msgstr "Полное имя:"
+
+#: ../../mod/settings.php:498
+msgid "Email Address:"
+msgstr "Адрес электронной почты:"
+
+#: ../../mod/settings.php:499
+msgid "Your Timezone:"
+msgstr "Ваш часовой пояс:"
+
+#: ../../mod/settings.php:500
+msgid "Default Post Location:"
+msgstr "Местоположение сообщения по умолчанию:"
+
+#: ../../mod/settings.php:501
+msgid "Use Browser Location:"
+msgstr "Использовать определение местоположения браузером:"
+
+#: ../../mod/settings.php:502
+msgid "Display Theme:"
+msgstr "Показать тему:"
+
+#: ../../mod/settings.php:506
+msgid "Security and Privacy Settings"
+msgstr "Параметры безопасности и конфиденциальности"
+
+#: ../../mod/settings.php:508
+msgid "Maximum Friend Requests/Day:"
+msgstr "Максимум запросов в друзья в день:"
+
+#: ../../mod/settings.php:508
+msgid "(to prevent spam abuse)"
+msgstr "(для предотвращения спама)"
+
+#: ../../mod/settings.php:509
+msgid "Default Post Permissions"
+msgstr "По умолчанию разрешения на сообщения"
+
+#: ../../mod/settings.php:510
+msgid "(click to open/close)"
+msgstr "(нажмите, чтобы открыть / закрыть)"
+
+#: ../../mod/settings.php:514
+msgid "Allow friends to post to your profile page:"
+msgstr "Разрешить друзьям оставлять сообщения на странице вашего профиля:"
+
+#: ../../mod/settings.php:515
+msgid "Automatically expire posts after days:"
+msgstr ""
+
+#: ../../mod/settings.php:515
+msgid "If empty, posts will not expire. Expired posts will be deleted"
+msgstr ""
+
+#: ../../mod/settings.php:524
+msgid "Notification Settings"
+msgstr "Настройка уведомлений"
+
+#: ../../mod/settings.php:525
+msgid "Send a notification email when:"
+msgstr "Отправлять уведомление по электронной почте, когда:"
+
+#: ../../mod/settings.php:526
+msgid "You receive an introduction"
+msgstr "Вы получаете краткую информацию"
+
+#: ../../mod/settings.php:527
+msgid "Your introductions are confirmed"
+msgstr "Ваши сообщения с краткой информацией подтверждены"
+
+#: ../../mod/settings.php:528
+msgid "Someone writes on your profile wall"
+msgstr "Кто-то пишет на стене вашего профиля"
+
+#: ../../mod/settings.php:529
+msgid "Someone writes a followup comment"
+msgstr "Кто-то пишет последующий комментарий"
+
+#: ../../mod/settings.php:530
+msgid "You receive a private message"
+msgstr "Вы получаете личное сообщение"
+
+#: ../../mod/settings.php:534
+msgid "Email/Mailbox Setup"
+msgstr "Настройка Email / почтового ящика"
+
+#: ../../mod/settings.php:535
+msgid ""
+"If you wish to communicate with email contacts using this service "
+"(optional), please specify how to connect to your mailbox."
+msgstr ""
+"Если вы хотите общаться с Email контактами, используя этот сервис (по "
+"желанию), пожалуйста, уточните, как подключиться к вашему почтовому ящику."
+
+#: ../../mod/settings.php:536
+msgid "Last successful email check:"
+msgstr ""
+
+#: ../../mod/settings.php:537
+msgid "Email access is disabled on this site."
+msgstr "Email доступ отключен на этом сайте."
+
+#: ../../mod/settings.php:538
+msgid "IMAP server name:"
+msgstr "Имя IMAP сервера:"
+
+#: ../../mod/settings.php:539
+msgid "IMAP port:"
+msgstr "Порт IMAP:"
+
+#: ../../mod/settings.php:540
+msgid "Security:"
+msgstr ""
+
+#: ../../mod/settings.php:540
+msgid "None"
+msgstr ""
+
+#: ../../mod/settings.php:541
+msgid "Email login name:"
+msgstr "Email логин:"
+
+#: ../../mod/settings.php:542
+msgid "Email password:"
+msgstr "Email пароль:"
+
+#: ../../mod/settings.php:543
+msgid "Reply-to address:"
+msgstr ""
+
+#: ../../mod/settings.php:544
+msgid "Send public posts to all email contacts:"
+msgstr "Отправлять открытые сообщения на все контакты электронной почты:"
+
+#: ../../mod/settings.php:549
+msgid "Advanced Page Settings"
+msgstr "Дополнительные параметры страницы"
+
+#: ../../mod/manage.php:37
+#, php-format
+msgid "Welcome back %s"
+msgstr "С возвращением, %s"
+
+#: ../../mod/manage.php:87
+msgid "Manage Identities and/or Pages"
+msgstr "Управление идентификацией и / или страницами"
+
+#: ../../mod/manage.php:90
+msgid ""
+"(Toggle between different identities or community/group pages which share "
+"your account details.)"
+msgstr ""
+"(Переключение между различными идентификациями или страницами сообществ / "
+"групп, которые делают публичными данные своего аккаунта.)"
+
+#: ../../mod/manage.php:92
+msgid "Select an identity to manage: "
+msgstr "Выберите идентификацию для управления: "
+
+#: ../../mod/network.php:27
+msgid "View Conversations"
+msgstr ""
+
+#: ../../mod/network.php:29
+msgid "View New Items"
+msgstr ""
+
+#: ../../mod/network.php:35
+msgid "View Any Items"
+msgstr ""
+
+#: ../../mod/network.php:43
+msgid "View Starred Items"
+msgstr ""
+
+#: ../../mod/network.php:94
+#, php-format
+msgid "Warning: This group contains %s member from an insecure network."
+msgid_plural ""
+"Warning: This group contains %s members from an insecure network."
+msgstr[0] "Внимание: Эта группа содержит %s участника с незащищенной сети."
+msgstr[1] "Внимание: Эта группа содержит %s участников с незащищенной сети."
+msgstr[2] "Внимание: Эта группа содержит %s участников с незащищенной сети."
+
+#: ../../mod/network.php:97
+msgid "Private messages to this group are at risk of public disclosure."
+msgstr "Личные сообщения к этой группе находятся под угрозой обнародования."
+
+#: ../../mod/network.php:164
+msgid "No such group"
+msgstr "Нет такой группы"
+
+#: ../../mod/network.php:175
+msgid "Group is empty"
+msgstr "Группа пуста"
+
+#: ../../mod/network.php:180
+msgid "Group: "
+msgstr "Группа: "
+
+#: ../../mod/network.php:190
+msgid "Contact: "
+msgstr "Контакт: "
+
+#: ../../mod/network.php:192
+msgid "Private messages to this person are at risk of public disclosure."
+msgstr "Личные сообщения этому человеку находятся под угрозой обнародования."
+
+#: ../../mod/network.php:197
+msgid "Invalid contact."
+msgstr "Недопустимый контакт."
+
+#: ../../mod/notes.php:74
+msgid "Save"
+msgstr "Сохранить"
+
+#: ../../mod/newmember.php:6
+msgid "Welcome to Friendika"
+msgstr ""
+
+#: ../../mod/newmember.php:8
+msgid "New Member Checklist"
+msgstr ""
+
+#: ../../mod/newmember.php:12
+msgid ""
+"We would like to offer some tips and links to help make your experience "
+"enjoyable. Click any item to visit the relevant page."
+msgstr ""
+
+#: ../../mod/newmember.php:16
+msgid ""
+"On your <em>Settings</em> page -  change your initial password. Also make a "
+"note of your Identity Address. This will be useful in making friends."
+msgstr ""
+
+#: ../../mod/newmember.php:18
+msgid ""
+"Review the other settings, particularly the privacy settings. An unpublished"
+" directory listing is like having an unlisted phone number. In general, you "
+"should probably publish your listing - unless all of your friends and "
+"potential friends know exactly how to find you."
+msgstr ""
+
+#: ../../mod/newmember.php:20
+msgid ""
+"Upload a profile photo if you have not done so already. Studies have shown "
+"that people with real photos of themselves are ten times more likely to make"
+" friends than people who do not."
+msgstr ""
+
+#: ../../mod/newmember.php:23
+msgid ""
+"Authorise the Facebook Connector if you currently have a Facebook account "
+"and we will (optionally) import all your Facebook friends and conversations."
+msgstr ""
+
+#: ../../mod/newmember.php:28
+msgid ""
+"Enter your email access information on your Settings page if you wish to "
+"import and interact with friends or mailing lists from your email INBOX"
+msgstr ""
+
+#: ../../mod/newmember.php:30
+msgid ""
+"Edit your <strong>default</strong> profile to your liking. Review the "
+"settings for hiding your list of friends and hiding the profile from unknown"
+" visitors."
+msgstr ""
+
+#: ../../mod/newmember.php:32
+msgid ""
+"Set some public keywords for your default profile which describe your "
+"interests. We may be able to find other people with similar interests and "
+"suggest friendships."
+msgstr ""
+
+#: ../../mod/newmember.php:34
+msgid ""
+"Your Contacts page is your gateway to managing friendships and connecting "
+"with friends on other networks. Typically you enter their address or site "
+"URL in the <em>Connect</em> dialog."
+msgstr ""
+
+#: ../../mod/newmember.php:36
+msgid ""
+"The Directory page lets you find other people in this network or other "
+"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on "
+"their profile page. Provide your own Identity Address if requested."
+msgstr ""
+
+#: ../../mod/newmember.php:38
+msgid ""
+"Once you have made some friends, organize them into private conversation "
+"groups from the sidebar of your Contacts page and then you can interact with"
+" each group privately on your Network page."
+msgstr ""
+
+#: ../../mod/newmember.php:40
+msgid ""
+"Our <strong>help</strong> pages may be consulted for detail on other program"
+" features and resources."
+msgstr ""
+
+#: ../../mod/attach.php:8
+msgid "Item not available."
+msgstr "Пункт не доступен."
+
+#: ../../mod/attach.php:20
+msgid "Item was not found."
+msgstr "Пункт не был найден."
+
+#: ../../mod/group.php:27
+msgid "Group created."
+msgstr "Группа создана."
+
+#: ../../mod/group.php:33
+msgid "Could not create group."
+msgstr "Не удается создать группу."
+
+#: ../../mod/group.php:43 ../../mod/group.php:123
+msgid "Group not found."
+msgstr "Группа не найдена."
+
+#: ../../mod/group.php:56
+msgid "Group name changed."
+msgstr "Название группы изменено."
+
+#: ../../mod/group.php:67 ../../mod/profperm.php:19 ../../index.php:265
+msgid "Permission denied"
+msgstr "Доступ запрещен"
+
+#: ../../mod/group.php:82
+msgid "Create a group of contacts/friends."
+msgstr "Создать группу контактов / друзей."
+
+#: ../../mod/group.php:83 ../../mod/group.php:166
+msgid "Group Name: "
+msgstr "Название группы: "
+
+#: ../../mod/group.php:98
+msgid "Group removed."
+msgstr "Группа удалена."
+
+#: ../../mod/group.php:100
+msgid "Unable to remove group."
+msgstr "Не удается удалить группу."
+
+#: ../../mod/group.php:164 ../../mod/profperm.php:105
+msgid "Click on a contact to add or remove."
+msgstr "Нажмите на контакт, чтобы добавить или удалить."
+
+#: ../../mod/group.php:165
+msgid "Group Editor"
+msgstr "Редактор группы"
+
+#: ../../mod/group.php:180
+msgid "Members"
+msgstr "Участники"
+
+#: ../../mod/group.php:195
+msgid "All Contacts"
+msgstr "Все контакты"
+
+#: ../../mod/profperm.php:25 ../../mod/profperm.php:55
+msgid "Invalid profile identifier."
+msgstr "Недопустимый идентификатор профиля."
+
+#: ../../mod/profperm.php:101
+msgid "Profile Visibility Editor"
+msgstr "Редактор видимости профиля"
+
+#: ../../mod/profperm.php:114
+msgid "Visible To"
+msgstr "Видимый для"
+
+#: ../../mod/profperm.php:128
+msgid "All Contacts (with secure profile access)"
+msgstr "Все контакты (с безопасным доступом к профилю)"
+
+#: ../../mod/viewcontacts.php:25 ../../include/text.php:555
+msgid "View Contacts"
+msgstr "Просмотр контактов"
+
+#: ../../mod/viewcontacts.php:40
+msgid "No contacts."
+msgstr "Нет контактов."
+
+#: ../../mod/register.php:53
+msgid "An invitation is required."
+msgstr ""
+
+#: ../../mod/register.php:58
+msgid "Invitation could not be verified."
+msgstr ""
+
+#: ../../mod/register.php:66
+msgid "Invalid OpenID url"
+msgstr "Неверный URL OpenID"
+
+#: ../../mod/register.php:81
+msgid "Please enter the required information."
+msgstr "Пожалуйста, введите необходимую информацию."
+
+#: ../../mod/register.php:95
+msgid "Please use a shorter name."
+msgstr "Пожалуйста, используйте более короткое имя."
+
+#: ../../mod/register.php:97
+msgid "Name too short."
+msgstr "Имя слишком короткое."
+
+#: ../../mod/register.php:112
+msgid "That doesn't appear to be your full (First Last) name."
+msgstr "Кажется, что это ваше неполное (Имя Фамилия) имя."
+
+#: ../../mod/register.php:117
+msgid "Your email domain is not among those allowed on this site."
+msgstr ""
+"Домен вашего адреса электронной почты не относится к числу разрешенных на "
+"этом сайте."
+
+#: ../../mod/register.php:120
+msgid "Not a valid email address."
+msgstr "Неверный адрес электронной почты."
+
+#: ../../mod/register.php:130
+msgid "Cannot use that email."
+msgstr "Нельзя использовать этот Email."
+
+#: ../../mod/register.php:136
+msgid ""
+"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
+"must also begin with a letter."
+msgstr ""
+"Ваш \"ник\" может содержать только \"a-z\", \"0-9\", \"-\", и \"_\", а также"
+" должен начинаться с буквы."
+
+#: ../../mod/register.php:142 ../../mod/register.php:243
+msgid "Nickname is already registered. Please choose another."
+msgstr "Такой ник уже зарегистрирован. Пожалуйста, выберите другой."
+
+#: ../../mod/register.php:161
+msgid "SERIOUS ERROR: Generation of security keys failed."
+msgstr "СЕРЬЕЗНАЯ ОШИБКА: генерация ключей безопасности не удалась."
+
+#: ../../mod/register.php:229
+msgid "An error occurred during registration. Please try again."
+msgstr "Ошибка при регистрации. Пожалуйста, попробуйте еще раз."
+
+#: ../../mod/register.php:265
+msgid "An error occurred creating your default profile. Please try again."
+msgstr ""
+"Ошибка создания вашего профиля по умолчанию. Пожалуйста, попробуйте еще раз."
+
+#: ../../mod/register.php:367 ../../mod/regmod.php:52
+#, php-format
+msgid "Registration details for %s"
+msgstr "Подробности регистрации для %s"
+
+#: ../../mod/register.php:375
+msgid ""
+"Registration successful. Please check your email for further instructions."
+msgstr ""
+"Регистрация успешна. Пожалуйста, проверьте свою электронную почту для "
+"получения дальнейших инструкций."
+
+#: ../../mod/register.php:379
+msgid "Failed to send email message. Here is the message that failed."
+msgstr ""
+"Невозможно отправить сообщение электронной почтой. Вот сообщение, которое не"
+" удалось."
+
+#: ../../mod/register.php:384
+msgid "Your registration can not be processed."
+msgstr "Ваша регистрация не может быть обработана."
+
+#: ../../mod/register.php:421
+#, php-format
+msgid "Registration request at %s"
+msgstr "Запрос на регистрацию на %s"
+
+#: ../../mod/register.php:430
+msgid "Your registration is pending approval by the site owner."
+msgstr "Ваша регистрация в ожидании одобрения владельцем сайта."
+
+#: ../../mod/register.php:479
+msgid ""
+"You may (optionally) fill in this form via OpenID by supplying your OpenID "
+"and clicking 'Register'."
+msgstr ""
+"Вы можете (по желанию), заполнить эту форму с помощью OpenID, поддерживая "
+"ваш OpenID и нажав клавишу \"Регистрация\"."
+
+#: ../../mod/register.php:480
+msgid ""
+"If you are not familiar with OpenID, please leave that field blank and fill "
+"in the rest of the items."
+msgstr ""
+"Если вы не знакомы с OpenID, пожалуйста, оставьте это поле пустым и "
+"заполните остальные элементы."
+
+#: ../../mod/register.php:481
+msgid "Your OpenID (optional): "
+msgstr "Ваш OpenID (необязательно):"
+
+#: ../../mod/register.php:495
+msgid "Include your profile in member directory?"
+msgstr "Включить ваш профиль в каталог участников?"
+
+#: ../../mod/register.php:511
+msgid "Membership on this site is by invitation only."
+msgstr ""
+
+#: ../../mod/register.php:512
+msgid "Your invitation ID: "
+msgstr ""
+
+#: ../../mod/register.php:515 ../../mod/admin.php:299
+msgid "Registration"
+msgstr "Регистрация"
+
+#: ../../mod/register.php:523
+msgid "Your Full Name (e.g. Joe Smith): "
+msgstr "Ваше полное имя (например, Joe Smith): "
+
+#: ../../mod/register.php:524
+msgid "Your Email Address: "
+msgstr "Ваш адрес электронной почты: "
+
+#: ../../mod/register.php:525
+msgid ""
+"Choose a profile nickname. This must begin with a text character. Your "
+"profile address on this site will then be "
+"'<strong>nickname@$sitename</strong>'."
+msgstr ""
+"Выбор ник профиля. Он должен начинаться с буквы. Адрес вашего профиля на "
+"данном сайте будет в этом случае '<strong>nickname@$sitename</strong>'."
+
+#: ../../mod/register.php:526
+msgid "Choose a nickname: "
+msgstr "Выберите ник: "
+
+#: ../../mod/register.php:529 ../../include/nav.php:59 ../../boot.php:637
+msgid "Register"
+msgstr "Регистрация"
+
+#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:954
+#: ../../include/diaspora.php:446 ../../include/conversation.php:26
+#: ../../include/conversation.php:35
+msgid "status"
+msgstr "статус"
+
+#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:958
+#: ../../include/diaspora.php:463 ../../include/conversation.php:43
+#, php-format
+msgid "%1$s likes %2$s's %3$s"
+msgstr "%1$s нравится %3$s от %2$s "
+
+#: ../../mod/like.php:129 ../../include/diaspora.php:465
+#: ../../include/conversation.php:46
+#, php-format
+msgid "%1$s doesn't like %2$s's %3$s"
+msgstr "%1$s не нравится %3$s от %2$s "
+
+#: ../../mod/friendika.php:42
+msgid "This is Friendika version"
+msgstr "Это версия Friendika"
+
+#: ../../mod/friendika.php:43
+msgid "running at web location"
+msgstr "работает на веб-узле"
+
+#: ../../mod/friendika.php:45
+msgid ""
+"Shared content within the Friendika network is provided under the <a "
+"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
+"Attribution 3.0 license</a>"
+msgstr ""
+"Общий контент в сети Friendika предоставляется по лицензии <a "
+"href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons "
+"Attribution 3.0</a>"
+
+#: ../../mod/friendika.php:47
+msgid ""
+"Please visit <a "
+"href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn "
+"more about the Friendika project."
+msgstr ""
+"Пожалуйста, посетите <a "
+"href=\"http://project.friendika.com\">Project.Friendika.com</a>, чтобы "
+"узнать больше о проекте Friendika."
+
+#: ../../mod/friendika.php:49
+msgid "Bug reports and issues: please visit"
+msgstr "Отчеты об ошибках и проблемы: пожалуйста, посетите"
+
+#: ../../mod/friendika.php:50
+msgid ""
+"Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - "
+"dot com"
+msgstr ""
+"Предложения, похвалы, пожертвования и т.д. - пожалуйста, напишите Email "
+"\"Info\" на Friendika - dot com"
+
+#: ../../mod/friendika.php:55
+msgid "Installed plugins/addons/apps"
+msgstr "Установленные плагины / добавки / приложения"
+
+#: ../../mod/friendika.php:63
+msgid "No installed plugins/addons/apps"
+msgstr "Нет установленных плагинов / добавок / приложений"
+
+#: ../../mod/regmod.php:61
+msgid "Account approved."
+msgstr "Аккаунт утвержден."
+
+#: ../../mod/regmod.php:93
+#, php-format
+msgid "Registration revoked for %s"
+msgstr "Регистрация отменена для %s"
+
+#: ../../mod/regmod.php:105
+msgid "Please login."
+msgstr "Пожалуйста, войдите с паролем."
+
+#: ../../mod/item.php:81
+msgid "Unable to locate original post."
+msgstr "Не удалось найти оригинальный пост."
+
+#: ../../mod/item.php:196
+msgid "Empty post discarded."
+msgstr "Пустое сообщение отбрасывается."
+
+#: ../../mod/item.php:296 ../../mod/message.php:93
+#: ../../mod/wall_upload.php:81 ../../mod/wall_upload.php:90
+#: ../../mod/wall_upload.php:97
+msgid "Wall Photos"
+msgstr "Фото стены"
+
+#: ../../mod/item.php:623 ../../mod/item.php:668 ../../mod/item.php:691
+#: ../../mod/item.php:734 ../../mod/dfrn_notify.php:293
+#: ../../mod/dfrn_notify.php:503 ../../mod/dfrn_notify.php:548
+#: ../../mod/dfrn_notify.php:634 ../../mod/dfrn_notify.php:677
+msgid "noreply"
+msgstr "без ответа"
+
+#: ../../mod/item.php:667 ../../mod/item.php:733 ../../mod/dfrn_notify.php:676
+msgid "Administrator@"
+msgstr "Администратор @"
+
+#: ../../mod/item.php:670 ../../mod/dfrn_notify.php:550
+#: ../../mod/dfrn_notify.php:679
+#, php-format
+msgid "%s commented on an item at %s"
+msgstr "%s оставил/а/ комментарий на %s"
+
+#: ../../mod/item.php:736
+#, php-format
+msgid "%s posted to your profile wall at %s"
+msgstr "% S. написал/а/ на стене вашего профиля на %s"
+
+#: ../../mod/item.php:765
+msgid "System error. Post not saved."
+msgstr "Системная ошибка. Сообщение не сохранено."
+
+#: ../../mod/item.php:784
+#, php-format
+msgid ""
+"This message was sent to you by %s, a member of the Friendika social "
+"network."
+msgstr ""
+"Это письмо было отправлено вам от %s, участника социальной сети Friendika."
+
+#: ../../mod/item.php:786
+#, php-format
+msgid "You may visit them online at %s"
+msgstr "Вы можете посетить их в онлайне на %s"
+
+#: ../../mod/item.php:787
+msgid ""
+"Please contact the sender by replying to this post if you do not wish to "
+"receive these messages."
+msgstr ""
+"Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не "
+"хотите получать эти сообщения."
+
+#: ../../mod/item.php:789
+#, php-format
+msgid "%s posted an update."
+msgstr "%s отправил/а/ обновление."
+
+#: ../../mod/profile_photo.php:28
+msgid "Image uploaded but image cropping failed."
+msgstr "Изображение загружено, но обрезка изображения не удалась."
+
+#: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68
+#: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:248
+#, php-format
+msgid "Image size reduction [%s] failed."
+msgstr "Уменьшение размера изображения [%s] не удалось."
+
+#: ../../mod/profile_photo.php:95
+msgid "Unable to process image"
+msgstr "Не удается обработать изображение"
+
+#: ../../mod/profile_photo.php:109 ../../mod/wall_upload.php:56
+#, php-format
+msgid "Image exceeds size limit of %d"
+msgstr "Изображение превышает предельный размер %d"
+
+#: ../../mod/profile_photo.php:193
+msgid "Upload File:"
+msgstr "Загрузить файл:"
+
+#: ../../mod/profile_photo.php:194
+msgid "Upload Profile Photo"
+msgstr "Загрузить фото профиля"
+
+#: ../../mod/profile_photo.php:195
+msgid "Upload"
+msgstr "Загрузить"
+
+#: ../../mod/profile_photo.php:196
+msgid "skip this step"
+msgstr "пропустить этот шаг"
+
+#: ../../mod/profile_photo.php:196
+msgid "select a photo from your photo albums"
+msgstr "выберите фото из ваших фотоальбомов"
+
+#: ../../mod/profile_photo.php:209
+msgid "Crop Image"
+msgstr "Обрезать изображение"
+
+#: ../../mod/profile_photo.php:210
+msgid "Please adjust the image cropping for optimum viewing."
+msgstr "Пожалуйста, настройте обрезку изображения для оптимального просмотра."
+
+#: ../../mod/profile_photo.php:211
+msgid "Done Editing"
+msgstr "Редактирование выполнено"
+
+#: ../../mod/profile_photo.php:239
+msgid "Image uploaded successfully."
+msgstr "Изображение загружено успешно."
+
+#: ../../mod/hcard.php:11 ../../mod/profile.php:11 ../../boot.php:792
+msgid "No profile"
+msgstr "Нет профиля"
+
+#: ../../mod/removeme.php:42 ../../mod/removeme.php:45
+msgid "Remove My Account"
+msgstr "Удалить мой аккаунт"
+
+#: ../../mod/removeme.php:43
+msgid ""
+"This will completely remove your account. Once this has been done it is not "
+"recoverable."
+msgstr ""
+"Это позволит полностью удалить ваш аккаунт. Как только это будет сделано, "
+"аккаунт восстановлению не подлежит."
+
+#: ../../mod/removeme.php:44
+msgid "Please enter your password for verification:"
+msgstr "Пожалуйста, введите свой пароль для проверки:"
+
+#: ../../mod/message.php:18
+msgid "No recipient selected."
+msgstr "Не выбран получатель."
+
+#: ../../mod/message.php:23
+msgid "[no subject]"
+msgstr "[без темы]"
+
+#: ../../mod/message.php:34
+msgid "Unable to locate contact information."
+msgstr "Не удалось найти контактную информацию."
+
+#: ../../mod/message.php:102
+msgid "Message sent."
+msgstr "Сообщение отправлено."
+
+#: ../../mod/message.php:105
+msgid "Message could not be sent."
+msgstr "Сообщение не может быть отправлено."
+
+#: ../../mod/message.php:125 ../../include/nav.php:102
+msgid "Messages"
+msgstr "Сообщения"
+
+#: ../../mod/message.php:126
+msgid "Inbox"
+msgstr "Входящие"
+
+#: ../../mod/message.php:127
+msgid "Outbox"
+msgstr "Исходящие"
+
+#: ../../mod/message.php:128
+msgid "New Message"
+msgstr "Новое сообщение"
+
+#: ../../mod/message.php:142
+msgid "Message deleted."
+msgstr "Сообщение удалено."
+
+#: ../../mod/message.php:158
+msgid "Conversation removed."
+msgstr "История общения удалена."
+
+#: ../../mod/message.php:172 ../../include/conversation.php:699
+msgid "Please enter a link URL:"
+msgstr "Пожалуйста, введите URL ссылки:"
+
+#: ../../mod/message.php:180
+msgid "Send Private Message"
+msgstr "Отправить личное сообщение"
+
+#: ../../mod/message.php:181 ../../mod/message.php:315
+msgid "To:"
+msgstr "Кому:"
+
+#: ../../mod/message.php:182 ../../mod/message.php:316
+msgid "Subject:"
+msgstr "Тема:"
+
+#: ../../mod/message.php:185 ../../mod/message.php:319
+#: ../../mod/invite.php:101
+msgid "Your message:"
+msgstr "Ваше сообщение:"
+
+#: ../../mod/message.php:224
+msgid "No messages."
+msgstr "Нет сообщений."
+
+#: ../../mod/message.php:237
+msgid "Delete conversation"
+msgstr "Удалить историю общения"
+
+#: ../../mod/message.php:240
+msgid "D, d M Y - g:i A"
+msgstr "D, d M Y - g:i A"
+
+#: ../../mod/message.php:267
+msgid "Message not available."
+msgstr "Сообщение не доступно."
+
+#: ../../mod/message.php:304
+msgid "Delete message"
+msgstr "Удалить сообщение"
+
+#: ../../mod/message.php:314
+msgid "Send Reply"
+msgstr "Отправить ответ"
+
+#: ../../mod/admin.php:66 ../../mod/admin.php:297
+msgid "Site"
+msgstr ""
+
+#: ../../mod/admin.php:67 ../../mod/admin.php:460 ../../mod/admin.php:472
+msgid "Users"
+msgstr ""
+
+#: ../../mod/admin.php:68 ../../mod/admin.php:549 ../../mod/admin.php:586
+msgid "Plugins"
+msgstr ""
+
+#: ../../mod/admin.php:69
+msgid "Update"
+msgstr ""
+
+#: ../../mod/admin.php:83 ../../mod/admin.php:651
+msgid "Logs"
+msgstr ""
+
+#: ../../mod/admin.php:88
+msgid "User registrations waiting for confirmation"
+msgstr ""
+
+#: ../../mod/admin.php:118 ../../mod/admin.php:502 ../../mod/display.php:25
+#: ../../mod/display.php:112 ../../include/items.php:1842
+msgid "Item not found."
+msgstr "Пункт не найден."
+
+#: ../../mod/admin.php:151 ../../mod/admin.php:296 ../../mod/admin.php:459
+#: ../../mod/admin.php:548 ../../mod/admin.php:585 ../../mod/admin.php:650
+msgid "Administration"
+msgstr ""
+
+#: ../../mod/admin.php:152
+msgid "Summary"
+msgstr ""
+
+#: ../../mod/admin.php:153
+msgid "Registered users"
+msgstr ""
+
+#: ../../mod/admin.php:155
+msgid "Pending registrations"
+msgstr ""
+
+#: ../../mod/admin.php:156
+msgid "Version"
+msgstr ""
+
+#: ../../mod/admin.php:158
+msgid "Active plugins"
+msgstr ""
+
+#: ../../mod/admin.php:245
+msgid "Site settings updated."
+msgstr ""
+
+#: ../../mod/admin.php:289
+msgid "Closed"
+msgstr ""
+
+#: ../../mod/admin.php:290
+msgid "Requires approval"
+msgstr ""
+
+#: ../../mod/admin.php:291
+msgid "Open"
+msgstr ""
+
+#: ../../mod/admin.php:300
+msgid "File upload"
+msgstr ""
+
+#: ../../mod/admin.php:301
+msgid "Policies"
+msgstr ""
+
+#: ../../mod/admin.php:302
+msgid "Advanced"
+msgstr ""
+
+#: ../../mod/admin.php:306 ../../addon/statusnet/statusnet.php:459
+msgid "Site name"
+msgstr ""
+
+#: ../../mod/admin.php:307
+msgid "Banner/Logo"
+msgstr ""
+
+#: ../../mod/admin.php:308
+msgid "System language"
+msgstr ""
+
+#: ../../mod/admin.php:309
+msgid "System theme"
+msgstr ""
+
+#: ../../mod/admin.php:311
+msgid "Maximum image size"
+msgstr ""
+
+#: ../../mod/admin.php:313
+msgid "Register policy"
+msgstr ""
+
+#: ../../mod/admin.php:314
+msgid "Register text"
+msgstr ""
+
+#: ../../mod/admin.php:315
+msgid "Allowed friend domains"
+msgstr ""
+
+#: ../../mod/admin.php:316
+msgid "Allowed email domains"
+msgstr ""
+
+#: ../../mod/admin.php:317
+msgid "Block public"
+msgstr ""
+
+#: ../../mod/admin.php:318
+msgid "Force publish"
+msgstr ""
+
+#: ../../mod/admin.php:319
+msgid "Global directory update URL"
+msgstr ""
+
+#: ../../mod/admin.php:321
+msgid "Block multiple registrations"
+msgstr ""
+
+#: ../../mod/admin.php:322
+msgid "OpenID support"
+msgstr ""
+
+#: ../../mod/admin.php:323
+msgid "Gravatar support"
+msgstr ""
+
+#: ../../mod/admin.php:324
+msgid "Fullname check"
+msgstr ""
+
+#: ../../mod/admin.php:325
+msgid "UTF-8 Regular expressions"
+msgstr ""
+
+#: ../../mod/admin.php:326
+msgid "Show Community Page"
+msgstr ""
+
+#: ../../mod/admin.php:327
+msgid "Enable OStatus support"
+msgstr ""
+
+#: ../../mod/admin.php:328
+msgid "Only allow Friendika contacts"
+msgstr ""
+
+#: ../../mod/admin.php:329
+msgid "Verify SSL"
+msgstr ""
+
+#: ../../mod/admin.php:330
+msgid "Proxy user"
+msgstr ""
+
+#: ../../mod/admin.php:331
+msgid "Proxy URL"
+msgstr ""
+
+#: ../../mod/admin.php:332
+msgid "Network timeout"
+msgstr ""
+
+#: ../../mod/admin.php:353
+#, php-format
+msgid "%s user blocked"
+msgid_plural "%s users blocked/unblocked"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../../mod/admin.php:360
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../../mod/admin.php:394
+#, php-format
+msgid "User '%s' deleted"
+msgstr ""
+
+#: ../../mod/admin.php:401
+#, php-format
+msgid "User '%s' unblocked"
+msgstr ""
+
+#: ../../mod/admin.php:401
+#, php-format
+msgid "User '%s' blocked"
+msgstr ""
+
+#: ../../mod/admin.php:462
+msgid "select all"
+msgstr ""
+
+#: ../../mod/admin.php:463
+msgid "User registrations waiting for confirm"
+msgstr "Регистрации пользователей, ожидающие подтверждения"
+
+#: ../../mod/admin.php:464
+msgid "Request date"
+msgstr ""
+
+#: ../../mod/admin.php:464 ../../mod/admin.php:473
+msgid "Email"
+msgstr ""
+
+#: ../../mod/admin.php:465
+msgid "No registrations."
+msgstr "Нет регистраций."
+
+#: ../../mod/admin.php:467
+msgid "Deny"
+msgstr "Отклонить"
+
+#: ../../mod/admin.php:469
+msgid "Block"
+msgstr ""
+
+#: ../../mod/admin.php:470
+msgid "Unblock"
+msgstr ""
+
+#: ../../mod/admin.php:473
+msgid "Register date"
+msgstr ""
+
+#: ../../mod/admin.php:473
+msgid "Last login"
+msgstr ""
+
+#: ../../mod/admin.php:473
+msgid "Last item"
+msgstr ""
+
+#: ../../mod/admin.php:473
+msgid "Account"
+msgstr ""
+
+#: ../../mod/admin.php:475
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: ../../mod/admin.php:476
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: ../../mod/admin.php:512
+#, php-format
+msgid "Plugin %s disabled."
+msgstr ""
+
+#: ../../mod/admin.php:516
+#, php-format
+msgid "Plugin %s enabled."
+msgstr ""
+
+#: ../../mod/admin.php:526
+msgid "Disable"
+msgstr ""
+
+#: ../../mod/admin.php:528
+msgid "Enable"
+msgstr ""
+
+#: ../../mod/admin.php:550
+msgid "Toggle"
+msgstr ""
+
+#: ../../mod/admin.php:551 ../../include/nav.php:108
+msgid "Settings"
+msgstr "Настройки"
+
+#: ../../mod/admin.php:613
+msgid "Log settings updated."
+msgstr ""
+
+#: ../../mod/admin.php:653
+msgid "Clear"
+msgstr ""
+
+#: ../../mod/admin.php:659
+msgid "Debugging"
+msgstr ""
+
+#: ../../mod/admin.php:660
+msgid "Log file"
+msgstr ""
+
+#: ../../mod/admin.php:660
+msgid "Must be writable by web server. Relative to your Friendika index.php."
+msgstr ""
+
+#: ../../mod/admin.php:661
+msgid "Log level"
+msgstr ""
+
+#: ../../mod/admin.php:702
+msgid "Close"
+msgstr ""
+
+#: ../../mod/admin.php:708
+msgid "FTP Host"
+msgstr ""
+
+#: ../../mod/admin.php:709
+msgid "FTP Path"
+msgstr ""
+
+#: ../../mod/admin.php:710
+msgid "FTP User"
+msgstr ""
+
+#: ../../mod/admin.php:711
+msgid "FTP Password"
+msgstr ""
+
+#: ../../mod/profile.php:102 ../../mod/display.php:63
+msgid "Access to this profile has been restricted."
+msgstr "Доступ к этому профилю ограничен."
+
+#: ../../mod/profile.php:133
+msgid "Tips for New Members"
+msgstr ""
+
+#: ../../mod/openid.php:62 ../../mod/openid.php:122 ../../include/auth.php:120
+#: ../../include/auth.php:145 ../../include/auth.php:198
+msgid "Login failed."
+msgstr "Войти не удалось."
+
+#: ../../mod/openid.php:78 ../../include/auth.php:214
+msgid "Welcome "
+msgstr "Добро пожаловать, "
+
+#: ../../mod/openid.php:79 ../../include/auth.php:215
+msgid "Please upload a profile photo."
+msgstr "Пожалуйста, загрузите фотографию профиля."
+
+#: ../../mod/openid.php:82 ../../include/auth.php:218
+msgid "Welcome back "
+msgstr "Добро пожаловать обратно, "
+
+#: ../../mod/follow.php:39
+msgid ""
+"This site is not configured to allow communications with other networks."
+msgstr ""
+
+#: ../../mod/follow.php:40 ../../mod/follow.php:50
+msgid "No compatible communication protocols or feeds were discovered."
+msgstr "Обнаружены несовместимые протоколы связи или каналы."
+
+#: ../../mod/follow.php:48
+msgid "The profile address specified does not provide adequate information."
+msgstr "Указанный адрес профиля не дает адекватной информации."
+
+#: ../../mod/follow.php:52
+msgid "An author or name was not found."
+msgstr "Автор или имя не найдены."
+
+#: ../../mod/follow.php:54
+msgid "No browser URL could be matched to this address."
+msgstr "Нет URL браузера, который соответствует этому адресу."
+
+#: ../../mod/follow.php:61
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
+msgstr "Указанный адрес профиля принадлежит сети, недоступной на этом сайта."
+
+#: ../../mod/follow.php:66
+msgid ""
+"Limited profile. This person will be unable to receive direct/personal "
+"notifications from you."
+msgstr ""
+"Ограниченный профиль. Этот человек не сможет получить прямые / личные "
+"уведомления от вас."
+
+#: ../../mod/follow.php:122
+msgid "Unable to retrieve contact information."
+msgstr "Невозможно получить контактную информацию."
+
+#: ../../mod/follow.php:168
+msgid "following"
+msgstr "следует"
+
+#: ../../mod/display.php:105
+msgid "Item has been removed."
+msgstr "Пункт был удален."
+
+#: ../../mod/dfrn_notify.php:353
+msgid "New mail received at "
+msgstr "Новая почта получена "
+
+#: ../../mod/apps.php:6
+msgid "Applications"
+msgstr "Приложения"
+
+#: ../../mod/apps.php:11
+msgid "No installed applications."
+msgstr ""
+
+#: ../../mod/search.php:26 ../../include/text.php:610 ../../include/nav.php:69
+msgid "Search"
+msgstr "Поиск"
+
+#: ../../mod/profiles.php:21 ../../mod/profiles.php:236
+#: ../../mod/profiles.php:341 ../../mod/dfrn_confirm.php:62
+msgid "Profile not found."
+msgstr "Профиль не найден."
+
+#: ../../mod/profiles.php:28
+msgid "Profile Name is required."
+msgstr "Необходимо имя профиля."
+
+#: ../../mod/profiles.php:198
+msgid "Profile updated."
+msgstr "Профиль обновлен."
+
+#: ../../mod/profiles.php:253
+msgid "Profile deleted."
+msgstr "Профиль удален."
+
+#: ../../mod/profiles.php:269 ../../mod/profiles.php:300
+msgid "Profile-"
+msgstr "Профиль-"
+
+#: ../../mod/profiles.php:288 ../../mod/profiles.php:327
+msgid "New profile created."
+msgstr "Новый профиль создан."
+
+#: ../../mod/profiles.php:306
+msgid "Profile unavailable to clone."
+msgstr "Профиль недоступен для клонирования."
+
+#: ../../mod/profiles.php:353
+msgid "Hide your contact/friend list from viewers of this profile?"
+msgstr "Скрывать ваш список контактов / друзей от посетителей этого профиля?"
+
+#: ../../mod/profiles.php:371
+msgid "Edit Profile Details"
+msgstr "Изменить подробности профиля"
+
+#: ../../mod/profiles.php:373
+msgid "View this profile"
+msgstr "Просмотреть этот профиль"
+
+#: ../../mod/profiles.php:374
+msgid "Create a new profile using these settings"
+msgstr "Создать новый профиль, используя эти настройки"
+
+#: ../../mod/profiles.php:375
+msgid "Clone this profile"
+msgstr "Клонировать этот профиль"
+
+#: ../../mod/profiles.php:376
+msgid "Delete this profile"
+msgstr "Удалить этот профиль"
+
+#: ../../mod/profiles.php:377
+msgid "Profile Name:"
+msgstr "Имя профиля:"
+
+#: ../../mod/profiles.php:378
+msgid "Your Full Name:"
+msgstr "Ваше полное имя:"
+
+#: ../../mod/profiles.php:379
+msgid "Title/Description:"
+msgstr "Заголовок / Описание:"
+
+#: ../../mod/profiles.php:380
+msgid "Your Gender:"
+msgstr "Ваш пол:"
+
+#: ../../mod/profiles.php:381
+#, php-format
+msgid "Birthday (%s):"
+msgstr ""
+
+#: ../../mod/profiles.php:382
+msgid "Street Address:"
+msgstr "Адрес:"
+
+#: ../../mod/profiles.php:383
+msgid "Locality/City:"
+msgstr "Город / Населенный пункт:"
+
+#: ../../mod/profiles.php:384
+msgid "Postal/Zip Code:"
+msgstr "Почтовый индекс:"
+
+#: ../../mod/profiles.php:385
+msgid "Country:"
+msgstr "Страна:"
+
+#: ../../mod/profiles.php:386
+msgid "Region/State:"
+msgstr "Район / Область:"
+
+#: ../../mod/profiles.php:387
+msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
+msgstr "<span class=\"heart\">&hearts;</span> Семейное положение:"
+
+#: ../../mod/profiles.php:388
+msgid "Who: (if applicable)"
+msgstr "Кто: (если применимо)"
+
+#: ../../mod/profiles.php:389
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+msgstr "Примеры: cathy123, Кэти Уильямс, cathy@example.com"
+
+#: ../../mod/profiles.php:390 ../../include/profile_advanced.php:90
+msgid "Sexual Preference:"
+msgstr "Сексуальные предпочтения:"
+
+#: ../../mod/profiles.php:391
+msgid "Homepage URL:"
+msgstr "Адрес домашней странички:"
+
+#: ../../mod/profiles.php:392 ../../include/profile_advanced.php:115
+msgid "Political Views:"
+msgstr "Политические взгляды:"
+
+#: ../../mod/profiles.php:393
+msgid "Religious Views:"
+msgstr "Религиозные взгляды:"
+
+#: ../../mod/profiles.php:394
+msgid "Public Keywords:"
+msgstr "Общественные ключевые слова:"
+
+#: ../../mod/profiles.php:395
+msgid "Private Keywords:"
+msgstr "Личные ключевые слова:"
+
+#: ../../mod/profiles.php:396
+msgid "Example: fishing photography software"
+msgstr "Пример: рыбалка фотографии программное обеспечение"
+
+#: ../../mod/profiles.php:397
+msgid "(Used for suggesting potential friends, can be seen by others)"
+msgstr ""
+"(Используется для предложения потенциальным друзьям, могут увидеть другие)"
+
+#: ../../mod/profiles.php:398
+msgid "(Used for searching profiles, never shown to others)"
+msgstr "(Используется для поиска профилей, никогда не показывается другим)"
+
+#: ../../mod/profiles.php:399
+msgid "Tell us about yourself..."
+msgstr "Расскажите нам о себе ..."
+
+#: ../../mod/profiles.php:400
+msgid "Hobbies/Interests"
+msgstr "Хобби / Интересы"
+
+#: ../../mod/profiles.php:401
+msgid "Contact information and Social Networks"
+msgstr "Контактная информация и социальные сети"
+
+#: ../../mod/profiles.php:402
+msgid "Musical interests"
+msgstr "Музыкальные интересы"
+
+#: ../../mod/profiles.php:403
+msgid "Books, literature"
+msgstr "Книги, литература"
+
+#: ../../mod/profiles.php:404
+msgid "Television"
+msgstr "Телевидение"
+
+#: ../../mod/profiles.php:405
+msgid "Film/dance/culture/entertainment"
+msgstr "Кино / танцы / культура / развлечения"
+
+#: ../../mod/profiles.php:406
+msgid "Love/romance"
+msgstr "Любовь / романтика"
+
+#: ../../mod/profiles.php:407
+msgid "Work/employment"
+msgstr "Работа / занятость"
+
+#: ../../mod/profiles.php:408
+msgid "School/education"
+msgstr "Школа / образование"
+
+#: ../../mod/profiles.php:413
+msgid ""
+"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
+"be visible to anybody using the internet."
+msgstr ""
+"Это ваш <strong>публичный</strong> профиль. <br /> Он <strong>может</strong>"
+" быть виден каждому, используя Интернет."
+
+#: ../../mod/profiles.php:423 ../../mod/directory.php:112
+msgid "Age: "
+msgstr "Возраст: "
+
+#: ../../mod/profiles.php:458 ../../include/nav.php:109
+msgid "Profiles"
+msgstr "Профили"
+
+#: ../../mod/profiles.php:459
+msgid "Change profile photo"
+msgstr "Изменить фото профиля"
+
+#: ../../mod/profiles.php:460
+msgid "Create New Profile"
+msgstr "Создать новый профиль"
+
+#: ../../mod/profiles.php:470
+msgid "Profile Image"
+msgstr "Фото профиля"
+
+#: ../../mod/profiles.php:472
+msgid "visible to everybody"
+msgstr ""
+
+#: ../../mod/profiles.php:473
+msgid "Edit visibility"
+msgstr "Изменить видимость"
+
+#: ../../mod/directory.php:40
+msgid "Global Directory"
+msgstr "Глобальный каталог"
+
+#: ../../mod/directory.php:46
+msgid "Normal site view"
+msgstr "Стандартный вид сайта"
+
+#: ../../mod/directory.php:48
+msgid "View all site entries"
+msgstr "Посмотреть все записи сайта"
+
+#: ../../mod/directory.php:56
+msgid "Site Directory"
+msgstr "Каталог сайта"
+
+#: ../../mod/directory.php:115
+msgid "Gender: "
+msgstr "Пол: "
+
+#: ../../mod/directory.php:141
+msgid "No entries (some entries may be hidden)."
+msgstr "Нет записей (некоторые записи могут быть скрыты)."
+
+#: ../../mod/invite.php:35
+#, php-format
+msgid "%s : Not a valid email address."
+msgstr "%s: Неверный адрес электронной почты."
+
+#: ../../mod/invite.php:59
+#, php-format
+msgid "Please join my network on %s"
+msgstr "Пожалуйста, присоединяйтесь к моей сети на %s"
+
+#: ../../mod/invite.php:69
+#, php-format
+msgid "%s : Message delivery failed."
+msgstr "%s: Доставка сообщения не удалась."
+
+#: ../../mod/invite.php:73
+#, php-format
+msgid "%d message sent."
+msgid_plural "%d messages sent."
+msgstr[0] "%d сообщение отправлено."
+msgstr[1] "%d сообщений отправлено."
+msgstr[2] "%d сообщений отправлено."
+
+#: ../../mod/invite.php:92
+msgid "You have no more invitations available"
+msgstr ""
+
+#: ../../mod/invite.php:99
+msgid "Send invitations"
+msgstr "Отправить приглашения"
+
+#: ../../mod/invite.php:100
+msgid "Enter email addresses, one per line:"
+msgstr "Введите адреса электронной почты, по одному в строке:"
+
+#: ../../mod/invite.php:102
+#, php-format
+msgid "Please join my social network on %s"
+msgstr "Пожалуйста, присоединяйтесь к моей социальной сети на %s"
+
+#: ../../mod/invite.php:103
+msgid "To accept this invitation, please visit:"
+msgstr "Чтобы принять это приглашение, пожалуйста, посетите:"
+
+#: ../../mod/invite.php:104
+msgid "You will need to supply this invitation code: $invite_code"
+msgstr ""
+
+#: ../../mod/invite.php:104
+msgid ""
+"Once you have registered, please connect with me via my profile page at:"
+msgstr ""
+"После того как вы зарегистрировались, пожалуйста, свяжитесь со мной через "
+"мою страницу профиля по адресу:"
+
+#: ../../mod/dfrn_confirm.php:233
+msgid "Response from remote site was not understood."
+msgstr "Ответ от удаленного сайта не был понят."
+
+#: ../../mod/dfrn_confirm.php:242
+msgid "Unexpected response from remote site: "
+msgstr "Неожиданный ответ от удаленного сайта: "
+
+#: ../../mod/dfrn_confirm.php:250
+msgid "Confirmation completed successfully."
+msgstr "Подтверждение успешно завершено."
+
+#: ../../mod/dfrn_confirm.php:252 ../../mod/dfrn_confirm.php:266
+#: ../../mod/dfrn_confirm.php:273
+msgid "Remote site reported: "
+msgstr "Удаленный сайт сообщил: "
+
+#: ../../mod/dfrn_confirm.php:264
+msgid "Temporary failure. Please wait and try again."
+msgstr "Временные неудачи. Подождите и попробуйте еще раз."
+
+#: ../../mod/dfrn_confirm.php:271
+msgid "Introduction failed or was revoked."
+msgstr "Краткая информация ошибочна или была отозвана."
+
+#: ../../mod/dfrn_confirm.php:393
+msgid "Unable to set contact photo."
+msgstr "Не удается установить фото контакта."
+
+#: ../../mod/dfrn_confirm.php:436 ../../include/conversation.php:79
+#, php-format
+msgid "%1$s is now friends with %2$s"
+msgstr "%1$s и %2$s теперь друзья"
+
+#: ../../mod/dfrn_confirm.php:507
+#, php-format
+msgid "No user record found for '%s' "
+msgstr "Не найдено записи пользователя для '%s' "
+
+#: ../../mod/dfrn_confirm.php:517
+msgid "Our site encryption key is apparently messed up."
+msgstr "Наш ключ шифрования сайта, по-видимому, перепутался."
+
+#: ../../mod/dfrn_confirm.php:528
+msgid "Empty site URL was provided or URL could not be decrypted by us."
+msgstr ""
+"Был предоставлен пустой URL сайта ​​или URL не может быть расшифрован нами."
+
+#: ../../mod/dfrn_confirm.php:549
+msgid "Contact record was not found for you on our site."
+msgstr "Запись контакта не найдена для вас на нашем сайте."
+
+#: ../../mod/dfrn_confirm.php:578
+msgid ""
+"The ID provided by your system is a duplicate on our system. It should work "
+"if you try again."
+msgstr ""
+"ID, предложенный вашей системой, является дубликатом в нашей системе. Он "
+"должен работать, если вы повторите попытку."
+
+#: ../../mod/dfrn_confirm.php:589
+msgid "Unable to set your contact credentials on our system."
+msgstr "Не удалось установить ваши учетные данные контакта в нашей системе."
+
+#: ../../mod/dfrn_confirm.php:642
+msgid "Unable to update your contact profile details on our system"
+msgstr "Не удается обновить ваши контактные детали профиля в нашей системе"
+
+#: ../../mod/dfrn_confirm.php:672
+#, php-format
+msgid "Connection accepted at %s"
+msgstr "Подключение принято в %s"
+
+#: ../../addon/facebook/facebook.php:314
+msgid "Facebook disabled"
+msgstr "Facebook недоступен"
+
+#: ../../addon/facebook/facebook.php:319
+msgid "Updating contacts"
+msgstr "Обновление контактов"
+
+#: ../../addon/facebook/facebook.php:328
+msgid "Facebook API key is missing."
+msgstr "Отсутствует ключ Facebook API."
+
+#: ../../addon/facebook/facebook.php:335
+msgid "Facebook Connect"
+msgstr "Facebook Connect"
+
+#: ../../addon/facebook/facebook.php:341
+msgid "Install Facebook connector for this account."
+msgstr "Установить Facebook Connector для этого аккаунта."
+
+#: ../../addon/facebook/facebook.php:348
+msgid "Remove Facebook connector"
+msgstr "Удалить Facebook Connector"
+
+#: ../../addon/facebook/facebook.php:354
+msgid "Post to Facebook by default"
+msgstr "Отправлять на Facebook по умолчанию"
+
+#: ../../addon/facebook/facebook.php:358
+msgid "Link all your Facebook friends and conversations"
+msgstr "Привязать все ваши разговоры и друзей на Facebook"
+
+#: ../../addon/facebook/facebook.php:363
+msgid "Warning: Your Facebook privacy settings can not be imported."
+msgstr ""
+"Внимание: Ваши установки безопасности на Facebook не могут быть "
+"импортированы."
+
+#: ../../addon/facebook/facebook.php:364
+msgid ""
+"Linked Facebook items <strong>may</strong> be publicly visible, depending on"
+" your privacy settings for this website/account."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:419
+msgid "Facebook"
+msgstr "Facebook"
+
+#: ../../addon/facebook/facebook.php:420
+msgid "Facebook Connector Settings"
+msgstr "Настройки Facebook Connector"
+
+#: ../../addon/facebook/facebook.php:434
+msgid "Post to Facebook"
+msgstr "Отправить на Facebook"
+
+#: ../../addon/facebook/facebook.php:507
+msgid ""
+"Post to Facebook cancelled because of multi-network access permission "
+"conflict."
+msgstr ""
+"Отправка на Facebook отменена из-за конфликта разрешений доступа разных "
+"сетей."
+
+#: ../../addon/facebook/facebook.php:580
+msgid "Image: "
+msgstr "Изображение: "
+
+#: ../../addon/facebook/facebook.php:656
+msgid "View on Friendika"
+msgstr "Просмотреть на Friendika"
+
+#: ../../addon/facebook/facebook.php:687
+msgid "Facebook post failed. Queued for retry."
+msgstr ""
+
+#: ../../addon/widgets/widgets.php:53
+msgid "Generate new key"
+msgstr "Сгенерировать новый ключ"
+
+#: ../../addon/widgets/widgets.php:56
+msgid "Widgets key"
+msgstr ""
+
+#: ../../addon/widgets/widgets.php:58
+msgid "Widgets available"
+msgstr ""
+
+#: ../../addon/widgets/widget_friends.php:30
+msgid "Connect on Friendika!"
+msgstr "Подключись на Friendika!"
+
+#: ../../addon/tictac/tictac.php:20
+msgid "Three Dimensional Tic-Tac-Toe"
+msgstr "Трехмерные крестики-нолики"
+
+#: ../../addon/tictac/tictac.php:53
+msgid "3D Tic-Tac-Toe"
+msgstr "3D Tic-Tac-Toe"
+
+#: ../../addon/tictac/tictac.php:58
+msgid "New game"
+msgstr "Новая игра"
+
+#: ../../addon/tictac/tictac.php:59
+msgid "New game with handicap"
+msgstr "Новая игра с гандикапом"
+
+#: ../../addon/tictac/tictac.php:60
+msgid ""
+"Three dimensional tic-tac-toe is just like the traditional game except that "
+"it is played on multiple levels simultaneously. "
+msgstr ""
+"Трехмерная игра в крестики-нолики точно такая же, как традиционная игра, за "
+"исключением того, что она играется на нескольких уровнях одновременно."
+
+#: ../../addon/tictac/tictac.php:61
+msgid ""
+"In this case there are three levels. You win by getting three in a row on "
+"any level, as well as up, down, and diagonally across the different levels."
+msgstr ""
+"В этом случае существуют три уровня. Вы выиграете, поставив три в ряд на "
+"любом уровне, а также вверх, вниз и по диагонали на разных уровнях."
+
+#: ../../addon/tictac/tictac.php:63
+msgid ""
+"The handicap game disables the center position on the middle level because "
+"the player claiming this square often has an unfair advantage."
+msgstr ""
+"Игра с гандикапом отключает центральное положение на среднем уровне, потому "
+"что игрок, занимающий эту площадь, часто имеет несправедливое преимущество."
+
+#: ../../addon/tictac/tictac.php:182
+msgid "You go first..."
+msgstr "Вы хотите первым..."
+
+#: ../../addon/tictac/tictac.php:187
+msgid "I'm going first this time..."
+msgstr "Я буду первым на этот раз..."
+
+#: ../../addon/tictac/tictac.php:193
+msgid "You won!"
+msgstr "Вы выиграли!"
+
+#: ../../addon/tictac/tictac.php:199 ../../addon/tictac/tictac.php:224
+msgid "\"Cat\" game!"
+msgstr "Игра \"Кошка\"!"
+
+#: ../../addon/tictac/tictac.php:222
+msgid "I won!"
+msgstr "Я выиграл!"
+
+#: ../../addon/randplace/randplace.php:170
+msgid "Randplace Settings"
+msgstr "Настройки Случайного места"
+
+#: ../../addon/randplace/randplace.php:172
+msgid "Enable Randplace Plugin"
+msgstr "Включить плагин Случайное место"
+
+#: ../../addon/js_upload/js_upload.php:43
+msgid "Upload a file"
+msgstr "Загрузить файл"
+
+#: ../../addon/js_upload/js_upload.php:44
+msgid "Drop files here to upload"
+msgstr "Перетащите файлы здесь для загрузки"
+
+#: ../../addon/js_upload/js_upload.php:46
+msgid "Failed"
+msgstr "Ошибка"
+
+#: ../../addon/js_upload/js_upload.php:292
+msgid "No files were uploaded."
+msgstr "Нет загруженных файлов."
+
+#: ../../addon/js_upload/js_upload.php:298
+msgid "Uploaded file is empty"
+msgstr "Загруженный файл пустой"
+
+#: ../../addon/js_upload/js_upload.php:321
+msgid "File has an invalid extension, it should be one of "
+msgstr ""
+"Файл имеет недопустимое расширение, оно должно быть одним из следующих "
+
+#: ../../addon/js_upload/js_upload.php:332
+msgid "Upload was cancelled, or server error encountered"
+msgstr "Загрузка была отменена, или произошла ошибка сервера"
+
+#: ../../addon/impressum/impressum.php:25
+msgid "Impressum"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:38
+#: ../../addon/impressum/impressum.php:40
+#: ../../addon/impressum/impressum.php:70
+msgid "Site Owner"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:38
+#: ../../addon/impressum/impressum.php:74
+msgid "Email Address"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:43
+#: ../../addon/impressum/impressum.php:72
+msgid "Postal Address"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:49
+msgid ""
+"The impressum addon needs to be configured!<br />Please add at least the "
+"<tt>owner</tt> variable to your config file. For other variables please "
+"refer to the README file of the addon."
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:71
+msgid "Site Owners Profile"
+msgstr ""
+
+#: ../../addon/impressum/impressum.php:73
+msgid "Notes"
+msgstr ""
+
+#: ../../addon/oembed/oembed.php:30
+msgid "OEmbed settings updated"
+msgstr "OEmbed настройки обновлены"
+
+#: ../../addon/oembed/oembed.php:43
+msgid "Use OEmbed for YouTube videos"
+msgstr ""
+
+#: ../../addon/oembed/oembed.php:71
+msgid "URL to embed:"
+msgstr "URL для встраивания:"
+
+#: ../../addon/statusnet/statusnet.php:133
+msgid "Post to StatusNet"
+msgstr "Отправить на StatusNet"
+
+#: ../../addon/statusnet/statusnet.php:175
+msgid ""
+"Please contact your site administrator.<br />The provided API URL is not "
+"valid."
+msgstr ""
+"Пожалуйста, обратитесь к администратору сайта. <br /> Предложенный URL API "
+"недействителен."
+
+#: ../../addon/statusnet/statusnet.php:203
+msgid "We could not contact the StatusNet API with the Path you entered."
+msgstr "Мы не смогли связаться с API StatusNet с маршрутом, который вы ввели."
+
+#: ../../addon/statusnet/statusnet.php:230
+msgid "StatusNet settings updated."
+msgstr "Настройки StatusNet обновлены."
+
+#: ../../addon/statusnet/statusnet.php:253
+msgid "StatusNet Posting Settings"
+msgstr "Настройка отправки сообщений на StatusNet"
+
+#: ../../addon/statusnet/statusnet.php:267
+msgid "Globally Available StatusNet OAuthKeys"
+msgstr "Глобально доступные StatusNet OAuthKeys"
+
+#: ../../addon/statusnet/statusnet.php:268
+msgid ""
+"There are preconfigured OAuth key pairs for some StatusNet servers "
+"available. If you are useing one of them, please use these credentials. If "
+"not feel free to connect to any other StatusNet instance (see below)."
+msgstr ""
+"Есть предварительно сконфигурированные OAuth пары ключей для некоторых "
+"серверов StatusNet. Если вы используете один из них, пожалуйста, используйте"
+" эти учетные данные. Если нет, не стесняйтесь подключиться к любому другому "
+"экземпляру StatusNet (см. ниже)."
+
+#: ../../addon/statusnet/statusnet.php:276
+msgid "Provide your own OAuth Credentials"
+msgstr "Укажите свои собственные полномочия OAuth"
+
+#: ../../addon/statusnet/statusnet.php:277
+msgid ""
+"No consumer key pair for StatusNet found. Register your Friendika Account as"
+" an desktop client on your StatusNet account, copy the consumer key pair "
+"here and enter the API base root.<br />Before you register your own OAuth "
+"key pair ask the administrator if there is already a key pair for this "
+"Friendika installation at your favorited StatusNet installation."
+msgstr ""
+"Не найдено пары ключей для StatusNet. Зарегистрируйте ваш аккаунт Friendika "
+"счета как для клиент настольного ПК на вашем аккаунте StatusNet, скопируйте "
+"пару ключей покупателя здесь и введите корень базы API. <br /> Перед тем, "
+"как вы зарегистрируете свою собственную пару ключей OAuth, спросите "
+"администратора, может уже есть пара ключей для этой инсталляции Friendika в "
+"вашей избранной установке StatusNet."
+
+#: ../../addon/statusnet/statusnet.php:279
+msgid "OAuth Consumer Key"
+msgstr "OAuth Consumer Key"
+
+#: ../../addon/statusnet/statusnet.php:282
+msgid "OAuth Consumer Secret"
+msgstr "OAuth Consumer Secret"
+
+#: ../../addon/statusnet/statusnet.php:285
+msgid "Base API Path (remember the trailing /)"
+msgstr "Путь базы API (помните о слеше /)"
+
+#: ../../addon/statusnet/statusnet.php:306
+msgid ""
+"To connect to your StatusNet account click the button below to get a "
+"security code from StatusNet which you have to copy into the input box below"
+" and submit the form. Only your <strong>public</strong> posts will be posted"
+" to StatusNet."
+msgstr ""
+"Чтобы подключиться к StatusNet аккаунту, нажмите на кнопку ниже, чтобы "
+"получить код безопасности от StatusNet, который нужно скопировать в поле "
+"ввода ниже, и отправить форму. Только ваши <strong>публичные "
+"сообщения</strong> будут отправляться на StatusNet."
+
+#: ../../addon/statusnet/statusnet.php:307
+msgid "Log in with StatusNet"
+msgstr "Войдите со StatusNet"
+
+#: ../../addon/statusnet/statusnet.php:309
+msgid "Copy the security code from StatusNet here"
+msgstr "Скопируйте код безопасности от StatusNet здесь"
+
+#: ../../addon/statusnet/statusnet.php:315
+msgid "Cancel Connection Process"
+msgstr "Отмена процесса подключения"
+
+#: ../../addon/statusnet/statusnet.php:317
+msgid "Current StatusNet API is"
+msgstr "Текущим StatusNet API является"
+
+#: ../../addon/statusnet/statusnet.php:318
+msgid "Cancel StatusNet Connection"
+msgstr "Отмена StatusNet подключения"
+
+#: ../../addon/statusnet/statusnet.php:329 ../../addon/twitter/twitter.php:180
+msgid "Currently connected to: "
+msgstr "В настоящее время соединены с: "
+
+#: ../../addon/statusnet/statusnet.php:330
+msgid ""
+"If enabled all your <strong>public</strong> postings can be posted to the "
+"associated StatusNet account. You can choose to do so by default (here) or "
+"for every posting separately in the posting options when writing the entry."
+msgstr ""
+
+#: ../../addon/statusnet/statusnet.php:332
+msgid "Allow posting to StatusNet"
+msgstr "Разрешить отправку на StatusNet"
+
+#: ../../addon/statusnet/statusnet.php:335
+msgid "Send public postings to StatusNet by default"
+msgstr "Отправлять публичные сообщения на StatusNet по умолчанию"
+
+#: ../../addon/statusnet/statusnet.php:340 ../../addon/twitter/twitter.php:191
+msgid "Clear OAuth configuration"
+msgstr "Очистить конфигурацию OAuth"
+
+#: ../../addon/statusnet/statusnet.php:460
+msgid "API URL"
+msgstr "API URL"
+
+#: ../../addon/statusnet/statusnet.php:461
+msgid "Consumer Secret"
+msgstr "Consumer Secret"
+
+#: ../../addon/statusnet/statusnet.php:462
+msgid "Consumer Key"
+msgstr "Consumer Key"
+
+#: ../../addon/piwik/piwik.php:77
+msgid "Piwik Base URL"
+msgstr ""
+
+#: ../../addon/piwik/piwik.php:78
+msgid "Site ID"
+msgstr ""
+
+#: ../../addon/piwik/piwik.php:79
+msgid "Show opt-out cookie link?"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:70
+msgid "Post to Twitter"
+msgstr "Отправить в Твиттер"
+
+#: ../../addon/twitter/twitter.php:115
+msgid "Twitter settings updated."
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:137
+msgid "Twitter Posting Settings"
+msgstr "Настройка отправки сообщений в Твиттер"
+
+#: ../../addon/twitter/twitter.php:144
+msgid ""
+"No consumer key pair for Twitter found. Please contact your site "
+"administrator."
+msgstr ""
+"Не найдено пары потребительских ключей для Твиттера. Пожалуйста, обратитесь "
+"к администратору сайта."
+
+#: ../../addon/twitter/twitter.php:163
+msgid ""
+"At this Friendika instance the Twitter plugin was enabled but you have not "
+"yet connected your account to your Twitter account. To do so click the "
+"button below to get a PIN from Twitter which you have to copy into the input"
+" box below and submit the form. Only your <strong>public</strong> posts will"
+" be posted to Twitter."
+msgstr ""
+"В этой установке Friendika плагин Твиттер был включен, но вы еще не "
+"подключили ваш аккаунт к аккаунту Твиттер. Для этого нажмите на кнопку ниже,"
+" чтобы получить PIN-код из Твиттера, который нужно скопировать в поле ввода "
+"ниже, и отправить форму. Только ваши <strong>публичные сообщения</strong> "
+"будут размещены на Твиттере."
+
+#: ../../addon/twitter/twitter.php:164
+msgid "Log in with Twitter"
+msgstr "Войдите с Твиттером"
+
+#: ../../addon/twitter/twitter.php:166
+msgid "Copy the PIN from Twitter here"
+msgstr "Скопируйте PIN с Твиттера здесь"
+
+#: ../../addon/twitter/twitter.php:181
+msgid ""
+"If enabled all your <strong>public</strong> postings can be posted to the "
+"associated Twitter account. You can choose to do so by default (here) or for"
+" every posting separately in the posting options when writing the entry."
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:183
+msgid "Allow posting to Twitter"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:186
+msgid "Send public postings to Twitter by default"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:282
+msgid "Consumer key"
+msgstr ""
+
+#: ../../addon/twitter/twitter.php:283
+msgid "Consumer secret"
+msgstr ""
+
+#: ../../include/profile_advanced.php:23 ../../boot.php:880
+msgid "Gender:"
+msgstr "Пол:"
+
+#: ../../include/profile_advanced.php:36 ../../include/items.php:1137
+msgid "Birthday:"
+msgstr "День рождения:"
+
+#: ../../include/profile_advanced.php:45
+msgid "j F, Y"
+msgstr "j F, Y"
+
+#: ../../include/profile_advanced.php:46
+msgid "j F"
+msgstr "j F"
+
+#: ../../include/profile_advanced.php:59
+msgid "Age:"
+msgstr "Возраст:"
+
+#: ../../include/profile_advanced.php:70
+msgid "<span class=\"heart\">&hearts;</span> Status:"
+msgstr "<span class=\"heart\">&hearts;</span> Статус:"
+
+#: ../../include/profile_advanced.php:103 ../../boot.php:886
+msgid "Homepage:"
+msgstr "Домашняя страничка:"
+
+#: ../../include/profile_advanced.php:127
+msgid "Religion:"
+msgstr "Религия:"
+
+#: ../../include/profile_advanced.php:138
+msgid "About:"
+msgstr "Немного о себе:"
+
+#: ../../include/profile_advanced.php:150
+msgid "Hobbies/Interests:"
+msgstr "Хобби / Интересы:"
+
+#: ../../include/profile_advanced.php:162
+msgid "Contact information and Social Networks:"
+msgstr "Контактная информация и социальные сети:"
+
+#: ../../include/profile_advanced.php:174
+msgid "Musical interests:"
+msgstr "Музыкальные интересы:"
+
+#: ../../include/profile_advanced.php:186
+msgid "Books, literature:"
+msgstr "Книги, литература:"
+
+#: ../../include/profile_advanced.php:198
+msgid "Television:"
+msgstr "Телевидение:"
+
+#: ../../include/profile_advanced.php:210
+msgid "Film/dance/culture/entertainment:"
+msgstr "Кино / Танцы / Культура / Развлечения:"
+
+#: ../../include/profile_advanced.php:222
+msgid "Love/Romance:"
+msgstr "Любовь / Романтика:"
+
+#: ../../include/profile_advanced.php:234
+msgid "Work/employment:"
+msgstr "Работа / Занятость:"
+
+#: ../../include/profile_advanced.php:246
+msgid "School/education:"
+msgstr "Школа / Образование:"
+
+#: ../../include/contact_selectors.php:32
+msgid "Unknown | Not categorised"
+msgstr "Неизвестно | Не определено"
+
+#: ../../include/contact_selectors.php:33
+msgid "Block immediately"
+msgstr "Блокировать немедленно"
+
+#: ../../include/contact_selectors.php:34
+msgid "Shady, spammer, self-marketer"
+msgstr "Тролль, спаммер, рассылает рекламу"
+
+#: ../../include/contact_selectors.php:35
+msgid "Known to me, but no opinion"
+msgstr "Известные мне, но нет определенного мнения"
+
+#: ../../include/contact_selectors.php:36
+msgid "OK, probably harmless"
+msgstr "Хорошо, наверное, безвредные"
+
+#: ../../include/contact_selectors.php:37
+msgid "Reputable, has my trust"
+msgstr "Уважаемые, есть мое доверие"
+
+#: ../../include/contact_selectors.php:55
+msgid "Frequently"
+msgstr "Часто"
+
+#: ../../include/contact_selectors.php:56
+msgid "Hourly"
+msgstr "Раз в час"
+
+#: ../../include/contact_selectors.php:57
+msgid "Twice daily"
+msgstr "Два раза в день"
+
+#: ../../include/contact_selectors.php:58
+msgid "Daily"
+msgstr "Ежедневно"
+
+#: ../../include/contact_selectors.php:59
+msgid "Weekly"
+msgstr "Еженедельно"
+
+#: ../../include/contact_selectors.php:60
+msgid "Monthly"
+msgstr "Ежемесячно"
+
+#: ../../include/profile_selectors.php:6
+msgid "Male"
+msgstr "Мужчина"
+
+#: ../../include/profile_selectors.php:6
+msgid "Female"
+msgstr "Женщина"
+
+#: ../../include/profile_selectors.php:6
+msgid "Currently Male"
+msgstr "В настоящее время мужчина"
+
+#: ../../include/profile_selectors.php:6
+msgid "Currently Female"
+msgstr "В настоящее время женщина"
+
+#: ../../include/profile_selectors.php:6
+msgid "Mostly Male"
+msgstr "В основном мужчина"
+
+#: ../../include/profile_selectors.php:6
+msgid "Mostly Female"
+msgstr "В основном женщина"
+
+#: ../../include/profile_selectors.php:6
+msgid "Transgender"
+msgstr "Транссексуал"
+
+#: ../../include/profile_selectors.php:6
+msgid "Intersex"
+msgstr "Интерсексуал"
+
+#: ../../include/profile_selectors.php:6
+msgid "Transsexual"
+msgstr "Транссексуал"
+
+#: ../../include/profile_selectors.php:6
+msgid "Hermaphrodite"
+msgstr "Гермафродит"
+
+#: ../../include/profile_selectors.php:6
+msgid "Neuter"
+msgstr "Средний род"
+
+#: ../../include/profile_selectors.php:6
+msgid "Non-specific"
+msgstr "Не определен"
+
+#: ../../include/profile_selectors.php:6
+msgid "Other"
+msgstr "Другой"
+
+#: ../../include/profile_selectors.php:6
+msgid "Undecided"
+msgstr "Не решено"
+
+#: ../../include/profile_selectors.php:19
+msgid "Males"
+msgstr "Мужчины"
+
+#: ../../include/profile_selectors.php:19
+msgid "Females"
+msgstr "Женщины"
+
+#: ../../include/profile_selectors.php:19
+msgid "Gay"
+msgstr "Гей"
+
+#: ../../include/profile_selectors.php:19
+msgid "Lesbian"
+msgstr "Лесбиянка"
+
+#: ../../include/profile_selectors.php:19
+msgid "No Preference"
+msgstr "Без предпочтений"
+
+#: ../../include/profile_selectors.php:19
+msgid "Bisexual"
+msgstr "Бисексуал"
+
+#: ../../include/profile_selectors.php:19
+msgid "Autosexual"
+msgstr "Автосексуал"
+
+#: ../../include/profile_selectors.php:19
+msgid "Abstinent"
+msgstr "Воздержанный"
+
+#: ../../include/profile_selectors.php:19
+msgid "Virgin"
+msgstr "Девственница"
+
+#: ../../include/profile_selectors.php:19
+msgid "Deviant"
+msgstr "Девиант"
+
+#: ../../include/profile_selectors.php:19
+msgid "Fetish"
+msgstr "Фетиш"
+
+#: ../../include/profile_selectors.php:19
+msgid "Oodles"
+msgstr "Групповой"
+
+#: ../../include/profile_selectors.php:19
+msgid "Nonsexual"
+msgstr "Нет интереса к сексу"
+
+#: ../../include/profile_selectors.php:33
+msgid "Single"
+msgstr "Без пары"
+
+#: ../../include/profile_selectors.php:33
+msgid "Lonely"
+msgstr "Пока никого нет"
+
+#: ../../include/profile_selectors.php:33
+msgid "Available"
+msgstr "Ищу спутника"
+
+#: ../../include/profile_selectors.php:33
+msgid "Unavailable"
+msgstr "Не ищу никого"
+
+#: ../../include/profile_selectors.php:33
+msgid "Dating"
+msgstr "Для знакомства"
+
+#: ../../include/profile_selectors.php:33
+msgid "Unfaithful"
+msgstr "Изменяю супругу"
+
+#: ../../include/profile_selectors.php:33
+msgid "Sex Addict"
+msgstr "Люблю секс"
+
+#: ../../include/profile_selectors.php:33
+msgid "Friends"
+msgstr "Друзья"
+
+#: ../../include/profile_selectors.php:33
+msgid "Friends/Benefits"
+msgstr "Друзья / Предпочтения"
+
+#: ../../include/profile_selectors.php:33
+msgid "Casual"
+msgstr "Случайные связи"
+
+#: ../../include/profile_selectors.php:33
+msgid "Engaged"
+msgstr "Есть спутник"
+
+#: ../../include/profile_selectors.php:33
+msgid "Married"
+msgstr "Женат / Замужем"
+
+#: ../../include/profile_selectors.php:33
+msgid "Partners"
+msgstr "Партнеры"
+
+#: ../../include/profile_selectors.php:33
+msgid "Cohabiting"
+msgstr "Сожительствую с человеком"
+
+#: ../../include/profile_selectors.php:33
+msgid "Happy"
+msgstr "Счастлив/а/"
+
+#: ../../include/profile_selectors.php:33
+msgid "Not Looking"
+msgstr "Не ищу"
+
+#: ../../include/profile_selectors.php:33
+msgid "Swinger"
+msgstr "Свинг"
+
+#: ../../include/profile_selectors.php:33
+msgid "Betrayed"
+msgstr "Преданный"
+
+#: ../../include/profile_selectors.php:33
+msgid "Separated"
+msgstr "Разделенный"
+
+#: ../../include/profile_selectors.php:33
+msgid "Unstable"
+msgstr "Нестабильный"
+
+#: ../../include/profile_selectors.php:33
+msgid "Divorced"
+msgstr "Разведенный"
+
+#: ../../include/profile_selectors.php:33
+msgid "Widowed"
+msgstr "Овдовевший"
+
+#: ../../include/profile_selectors.php:33
+msgid "Uncertain"
+msgstr "Неопределенный"
+
+#: ../../include/profile_selectors.php:33
+msgid "Complicated"
+msgstr "Сложный"
+
+#: ../../include/profile_selectors.php:33
+msgid "Don't care"
+msgstr "Не беспокоить"
+
+#: ../../include/profile_selectors.php:33
+msgid "Ask me"
+msgstr "Спросите меня"
+
+#: ../../include/event.php:11
+msgid "l F d, Y \\@ g:i A"
+msgstr ""
+
+#: ../../include/event.php:17
+msgid "Starts:"
+msgstr ""
+
+#: ../../include/event.php:27
+msgid "Finishes:"
+msgstr ""
+
+#: ../../include/text.php:229
+msgid "prev"
+msgstr "пред."
+
+#: ../../include/text.php:231
+msgid "first"
+msgstr "первый"
+
+#: ../../include/text.php:260
+msgid "last"
+msgstr "последний"
+
+#: ../../include/text.php:263
+msgid "next"
+msgstr "след."
+
+#: ../../include/text.php:542
+msgid "No contacts"
+msgstr "Нет контактов"
+
+#: ../../include/text.php:550
+#, php-format
+msgid "%d Contact"
+msgid_plural "%d Contacts"
+msgstr[0] "%d контакт"
+msgstr[1] "%d контактов"
+msgstr[2] "%d контактов"
+
+#: ../../include/text.php:711
+msgid "Monday"
+msgstr "Понедельник"
+
+#: ../../include/text.php:711
+msgid "Tuesday"
+msgstr "Вторник"
+
+#: ../../include/text.php:711
+msgid "Wednesday"
+msgstr "Среда"
+
+#: ../../include/text.php:711
+msgid "Thursday"
+msgstr "Четверг"
+
+#: ../../include/text.php:711
+msgid "Friday"
+msgstr "Пятница"
+
+#: ../../include/text.php:711
+msgid "Saturday"
+msgstr "Суббота"
+
+#: ../../include/text.php:711
+msgid "Sunday"
+msgstr "Воскресенье"
+
+#: ../../include/text.php:715
+msgid "January"
+msgstr "Январь"
+
+#: ../../include/text.php:715
+msgid "February"
+msgstr "Февраль"
+
+#: ../../include/text.php:715
+msgid "March"
+msgstr "Март"
+
+#: ../../include/text.php:715
+msgid "April"
+msgstr "Апрель"
+
+#: ../../include/text.php:715
+msgid "May"
+msgstr "Май"
+
+#: ../../include/text.php:715
+msgid "June"
+msgstr "Июнь"
+
+#: ../../include/text.php:715
+msgid "July"
+msgstr "Июль"
+
+#: ../../include/text.php:715
+msgid "August"
+msgstr "Август"
+
+#: ../../include/text.php:715
+msgid "September"
+msgstr "Сентябрь"
+
+#: ../../include/text.php:715
+msgid "October"
+msgstr "Октябрь"
+
+#: ../../include/text.php:715
+msgid "November"
+msgstr "Ноябрь"
+
+#: ../../include/text.php:715
+msgid "December"
+msgstr "Декабрь"
+
+#: ../../include/text.php:778
+msgid "bytes"
+msgstr "байт"
+
+#: ../../include/text.php:861
+msgid "Select an alternate language"
+msgstr ""
+
+#: ../../include/diaspora.php:309
+msgid "Sharing notification from Diaspora network"
+msgstr "Делиться уведомлениями из сети Diaspora"
+
+#: ../../include/oembed.php:95
+msgid "Embedding disabled"
+msgstr "Встраивание отключено"
+
+#: ../../include/group.php:146
+msgid "Create a new group"
+msgstr "Создать новую группу"
+
+#: ../../include/group.php:147
+msgid "Everybody"
+msgstr "Все"
+
+#: ../../include/nav.php:41 ../../boot.php:667
+msgid "Logout"
+msgstr "Выход"
+
+#: ../../include/nav.php:41
+msgid "End this session"
+msgstr ""
+
+#: ../../include/nav.php:44 ../../boot.php:645 ../../boot.php:651
+msgid "Login"
+msgstr "Вход"
+
+#: ../../include/nav.php:44
+msgid "Sign in"
+msgstr ""
+
+#: ../../include/nav.php:55 ../../include/nav.php:93
+msgid "Home"
+msgstr "Главная"
+
+#: ../../include/nav.php:55
+msgid "Home Page"
+msgstr ""
+
+#: ../../include/nav.php:59
+msgid "Create an account"
+msgstr ""
+
+#: ../../include/nav.php:64
+msgid "Help and documentation"
+msgstr ""
+
+#: ../../include/nav.php:67
+msgid "Apps"
+msgstr "Приложения"
+
+#: ../../include/nav.php:67
+msgid "Addon applications, utilities, games"
+msgstr ""
+
+#: ../../include/nav.php:69
+msgid "Search site content"
+msgstr ""
+
+#: ../../include/nav.php:79
+msgid "Conversations on this site"
+msgstr ""
+
+#: ../../include/nav.php:81
+msgid "Directory"
+msgstr "Каталог"
+
+#: ../../include/nav.php:81
+msgid "People directory"
+msgstr ""
+
+#: ../../include/nav.php:91
+msgid "Network"
+msgstr "Сеть"
+
+#: ../../include/nav.php:91
+msgid "Conversations from your friends"
+msgstr ""
+
+#: ../../include/nav.php:93
+msgid "Your posts and conversations"
+msgstr ""
+
+#: ../../include/nav.php:99
+msgid "Notifications"
+msgstr "Уведомления"
+
+#: ../../include/nav.php:99
+msgid "Friend requests"
+msgstr ""
+
+#: ../../include/nav.php:102
+msgid "Private mail"
+msgstr ""
+
+#: ../../include/nav.php:105
+msgid "Manage"
+msgstr "Управлять"
+
+#: ../../include/nav.php:105
+msgid "Manage other pages"
+msgstr ""
+
+#: ../../include/nav.php:109
+msgid "Manage/edit profiles"
+msgstr ""
+
+#: ../../include/nav.php:110
+msgid "Manage/edit friends and contacts"
+msgstr ""
+
+#: ../../include/nav.php:117
+msgid "Admin"
+msgstr ""
+
+#: ../../include/nav.php:117
+msgid "Site setup and configuration"
+msgstr ""
+
+#: ../../include/auth.php:27
+msgid "Logged out."
+msgstr "Выход из системы."
+
+#: ../../include/datetime.php:44 ../../include/datetime.php:46
+msgid "Miscellaneous"
+msgstr "Разное"
+
+#: ../../include/datetime.php:105 ../../include/datetime.php:237
+msgid "year"
+msgstr "год"
+
+#: ../../include/datetime.php:110 ../../include/datetime.php:238
+msgid "month"
+msgstr "месяц"
+
+#: ../../include/datetime.php:115 ../../include/datetime.php:240
+msgid "day"
+msgstr "день"
+
+#: ../../include/datetime.php:228
+msgid "never"
+msgstr ""
+
+#: ../../include/datetime.php:234
+msgid "less than a second ago"
+msgstr "менее секунды назад"
+
+#: ../../include/datetime.php:237
+msgid "years"
+msgstr "лет"
+
+#: ../../include/datetime.php:238
+msgid "months"
+msgstr "месяцев"
+
+#: ../../include/datetime.php:239
+msgid "week"
+msgstr "неделя"
+
+#: ../../include/datetime.php:239
+msgid "weeks"
+msgstr "недель"
+
+#: ../../include/datetime.php:240
+msgid "days"
+msgstr "дней"
+
+#: ../../include/datetime.php:241
+msgid "hour"
+msgstr "час"
+
+#: ../../include/datetime.php:241
+msgid "hours"
+msgstr "часов"
+
+#: ../../include/datetime.php:242
+msgid "minute"
+msgstr "минута"
+
+#: ../../include/datetime.php:242
+msgid "minutes"
+msgstr "минут"
+
+#: ../../include/datetime.php:243
+msgid "second"
+msgstr "секунда"
+
+#: ../../include/datetime.php:243
+msgid "seconds"
+msgstr "секунд"
+
+#: ../../include/datetime.php:250
+msgid " ago"
+msgstr " назад"
+
+#: ../../include/poller.php:418
+msgid "From: "
+msgstr "От: "
+
+#: ../../include/bbcode.php:116
+msgid "Image/photo"
+msgstr "Изображение / Фото"
+
+#: ../../include/dba.php:31
+#, php-format
+msgid "Cannot locate DNS info for database server '%s'"
+msgstr "Не могу найти информацию для DNS-сервера базы данных '%s'"
+
+#: ../../include/acl_selectors.php:279
+msgid "Visible to everybody"
+msgstr "Видимо всем"
+
+#: ../../include/acl_selectors.php:280
+msgid "show"
+msgstr ""
+
+#: ../../include/acl_selectors.php:281
+msgid "don't show"
+msgstr ""
+
+#: ../../include/notifier.php:465
+msgid "(no subject)"
+msgstr "(без темы)"
+
+#: ../../include/items.php:1526
+msgid "You have a new follower at "
+msgstr "У вас есть новый фолловер на "
+
+#: ../../include/conversation.php:23
+msgid "event"
+msgstr ""
+
+#: ../../include/conversation.php:213 ../../include/conversation.php:488
+#: ../../include/conversation.php:489
+#, php-format
+msgid "View %s's profile"
+msgstr "Просмотреть профиль %s"
+
+#: ../../include/conversation.php:222 ../../include/conversation.php:501
+#, php-format
+msgid "%s from %s"
+msgstr "%s от %s"
+
+#: ../../include/conversation.php:230
+msgid "View in context"
+msgstr "Смотреть в контексте"
+
+#: ../../include/conversation.php:301
+msgid "See more posts like this"
+msgstr "Просмотреть другие сообщения, похожие на это"
+
+#: ../../include/conversation.php:329
+#, php-format
+msgid "See all %d comments"
+msgstr "Просмотреть все %d комментариев"
+
+#: ../../include/conversation.php:427
+msgid "Select"
+msgstr "Выберите"
+
+#: ../../include/conversation.php:429
+msgid "toggle star status"
+msgstr "переключить статус"
+
+#: ../../include/conversation.php:490
+msgid "to"
+msgstr "к"
+
+#: ../../include/conversation.php:491
+msgid "Wall-to-Wall"
+msgstr "Стена-на-Стену"
+
+#: ../../include/conversation.php:492
+msgid "via Wall-To-Wall:"
+msgstr "через Стена-на-Стену:"
+
+#: ../../include/conversation.php:534
+msgid "Delete Selected Items"
+msgstr "Удалить выбранные позиции"
+
+#: ../../include/conversation.php:608
+msgid "View status"
+msgstr "Просмотреть статус"
+
+#: ../../include/conversation.php:609
+msgid "View profile"
+msgstr "Просмотреть профиль"
+
+#: ../../include/conversation.php:610
+msgid "View photos"
+msgstr "Просмотреть фото"
+
+#: ../../include/conversation.php:611
+msgid "View recent"
+msgstr "Просмотреть последние"
+
+#: ../../include/conversation.php:613
+msgid "Send PM"
+msgstr "Отправить ЛС"
+
+#: ../../include/conversation.php:663
+#, php-format
+msgid "%s likes this."
+msgstr "%s нравится это."
+
+#: ../../include/conversation.php:663
+#, php-format
+msgid "%s doesn't like this."
+msgstr "%s не нравится это."
+
+#: ../../include/conversation.php:667
+#, php-format
+msgid "<span  %1$s>%2$d people</span> like this."
+msgstr "<span  %1$s>%2$d чел.</span> нравится это."
+
+#: ../../include/conversation.php:669
+#, php-format
+msgid "<span  %1$s>%2$d people</span> don't like this."
+msgstr "<span  %1$s>%2$d чел.</span> не нравится это."
+
+#: ../../include/conversation.php:675
+msgid "and"
+msgstr "и"
+
+#: ../../include/conversation.php:678
+#, php-format
+msgid ", and %d other people"
+msgstr ", и %d других чел."
+
+#: ../../include/conversation.php:679
+#, php-format
+msgid "%s like this."
+msgstr "%s нравится это."
+
+#: ../../include/conversation.php:679
+#, php-format
+msgid "%s don't like this."
+msgstr "%s не нравится это."
+
+#: ../../include/conversation.php:698
+msgid "Visible to <strong>everybody</strong>"
+msgstr "Видимое <strong>всем</strong>"
+
+#: ../../include/conversation.php:700
+msgid "Please enter a YouTube link:"
+msgstr "Пожалуйста, введите ссылку YouTube:"
+
+#: ../../include/conversation.php:701
+msgid "Please enter a video(.ogg) link/URL:"
+msgstr "Пожалуйста, введите видео (.ogg) ссылку / URL:"
+
+#: ../../include/conversation.php:702
+msgid "Please enter an audio(.ogg) link/URL:"
+msgstr "Пожалуйста, введите аудио (.ogg) ссылку / URL:"
+
+#: ../../include/conversation.php:703
+msgid "Where are you right now?"
+msgstr "И где вы сейчас?"
+
+#: ../../include/conversation.php:704
+msgid "Enter a title for this item"
+msgstr "Введите название для данного элемента"
+
+#: ../../include/conversation.php:755
+msgid "Set title"
+msgstr "Установить заголовок"
+
+#: ../../boot.php:410
+msgid "Delete this item?"
+msgstr "Удалить этот элемент?"
+
+#: ../../boot.php:636
+msgid "Create a New Account"
+msgstr "Создать новый аккаунт"
+
+#: ../../boot.php:643
+msgid "Nickname or Email address: "
+msgstr "Ник или адрес электронной почты: "
+
+#: ../../boot.php:644
+msgid "Password: "
+msgstr "Пароль: "
+
+#: ../../boot.php:649
+msgid "Nickname/Email/OpenID: "
+msgstr "Ник / Email / OpenID: "
+
+#: ../../boot.php:650
+msgid "Password (if not OpenID): "
+msgstr "Пароль (если не OpenID): "
+
+#: ../../boot.php:653
+msgid "Forgot your password?"
+msgstr "Забыли пароль?"
+
+#: ../../boot.php:853
+msgid "Connect"
+msgstr "Подключиться"
+
+#: ../../boot.php:872
+msgid ", "
+msgstr ", "
+
+#: ../../boot.php:884
+msgid "Status:"
+msgstr "Статус:"
+
+#: ../../boot.php:975
+msgid "g A l F d"
+msgstr "g A l F d"
+
+#: ../../boot.php:993
+msgid "Birthday Reminders"
+msgstr "Напоминания о днях рождения"
+
+#: ../../boot.php:994
+msgid "Birthdays this week:"
+msgstr "Дни рождения на этой неделе:"
+
+#: ../../boot.php:995
+msgid "(Adjusted for local time)"
+msgstr "(С поправкой на местное время)"
+
+#: ../../boot.php:1006
+msgid "[today]"
+msgstr "[сегодня]"
+
+#: ../../index.php:209
+msgid "Not Found"
+msgstr "Не найдено"
+
+#: ../../index.php:210
+msgid "Page not found."
+msgstr "Страница не найдена."
+
+
diff --git a/view/ru/strings.php b/view/ru/strings.php
new file mode 100644 (file)
index 0000000..4578c37
--- /dev/null
@@ -0,0 +1,1043 @@
+<?php
+
+function string_plural_select_ru($n){
+       return ($n%10==1 && $n%100!=11 ? 0 : $n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2);
+}
+;
+$a->strings["Post successful."] = "Успешно добавлено.";
+$a->strings["Contact settings applied."] = "Установки контакта приняты.";
+$a->strings["Contact update failed."] = "Обновление контакта неудачное.";
+$a->strings["Permission denied."] = "Нет разрешения.";
+$a->strings["Contact not found."] = "Контакт не найден.";
+$a->strings["Repair Contact Settings"] = "Восстановить установки контакта";
+$a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working."] = "<strong>ВНИМАНИЕ: Это крайне важно</strong> и если вы введете неверную информацию, ваша связь с этим контактом перестанет работать.";
+$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Пожалуйста, нажмите клавишу вашего браузера 'Back' или 'Назад' <strong>сейчас</strong>, если вы не уверены, что делаете на этой странице.";
+$a->strings["Name"] = "Имя";
+$a->strings["Account Nickname"] = "Ник аккаунта";
+$a->strings["Account URL"] = "URL аккаунта";
+$a->strings["Friend Request URL"] = "URL запроса в друзья";
+$a->strings["Friend Confirm URL"] = "URL подтверждения друга";
+$a->strings["Notification Endpoint URL"] = "URL эндпоинта уведомления";
+$a->strings["Poll/Feed URL"] = "URL опроса/ленты";
+$a->strings["Submit"] = "Подтвердить";
+$a->strings["Help:"] = "Помощь:";
+$a->strings["Help"] = "Помощь";
+$a->strings["File exceeds size limit of %d"] = "Файл превышает предельный размер %d";
+$a->strings["File upload failed."] = "Загрузка файла не удалась.";
+$a->strings["Friend suggestion sent."] = "";
+$a->strings["Suggest Friends"] = "";
+$a->strings["Suggest a friend for %s"] = "";
+$a->strings["Status"] = "Статус";
+$a->strings["Profile"] = "Профиль";
+$a->strings["Photos"] = "Фото";
+$a->strings["Events"] = "";
+$a->strings["Personal Notes"] = "";
+$a->strings["Create New Event"] = "";
+$a->strings["Previous"] = "";
+$a->strings["Next"] = "";
+$a->strings["l, F j"] = "";
+$a->strings["Edit event"] = "";
+$a->strings["link to source"] = "ссылка на источник";
+$a->strings["hour:minute"] = "";
+$a->strings["Event details"] = "";
+$a->strings["Format is %s %s. Starting date and Description are required."] = "";
+$a->strings["Event Starts:"] = "";
+$a->strings["Finish date/time is not known or not relevant"] = "";
+$a->strings["Event Finishes:"] = "";
+$a->strings["Adjust for viewer timezone"] = "";
+$a->strings["Description:"] = "";
+$a->strings["Location:"] = "Местоположение:";
+$a->strings["Share this event"] = "";
+$a->strings["Cancel"] = "Отмена";
+$a->strings["Tag removed"] = "Ключевое слово удалено";
+$a->strings["Remove Item Tag"] = "Удалить ключевое слово";
+$a->strings["Select a tag to remove: "] = "Выберите ключевое слово для удаления: ";
+$a->strings["Remove"] = "Удалить";
+$a->strings["%s welcomes %s"] = "%s приглашает %s";
+$a->strings["Photo Albums"] = "Фотоальбомы";
+$a->strings["Contact Photos"] = "Фотографии контакта";
+$a->strings["everybody"] = "все";
+$a->strings["Contact information unavailable"] = "Контактная информация недоступна";
+$a->strings["Profile Photos"] = "Фотографии профиля";
+$a->strings["Album not found."] = "Альбом не найден.";
+$a->strings["Delete Album"] = "Удалить альбом";
+$a->strings["Delete Photo"] = "Удалить фото";
+$a->strings["was tagged in a"] = "отмечен/а/ в";
+$a->strings["photo"] = "фото";
+$a->strings["by"] = "от";
+$a->strings["Image exceeds size limit of "] = "Размер фото превышает лимит ";
+$a->strings["Image file is empty."] = "";
+$a->strings["Unable to process image."] = "Невозможно обработать фото.";
+$a->strings["Image upload failed."] = "Загрузка фото неудачная.";
+$a->strings["Public access denied."] = "Свободный доступ закрыт.";
+$a->strings["No photos selected"] = "Не выбрано фото.";
+$a->strings["Access to this item is restricted."] = "";
+$a->strings["Upload Photos"] = "Загрузить фото";
+$a->strings["New album name: "] = "Название нового альбома: ";
+$a->strings["or existing album name: "] = "или название существующего альбома: ";
+$a->strings["Permissions"] = "Разрешения";
+$a->strings["Edit Album"] = "Редактировать альбом";
+$a->strings["View Photo"] = "Просмотреть фото";
+$a->strings["Photo not available"] = "Фото недоступно";
+$a->strings["Edit photo"] = "Редактировать фото";
+$a->strings["Use as profile photo"] = "Использовать как фото профиля";
+$a->strings["Private Message"] = "Личное сообщение";
+$a->strings["View Full Size"] = "Просмотреть полный размер";
+$a->strings["Tags: "] = "Ключевые слова: ";
+$a->strings["[Remove any tag]"] = "[Удалить любое ключевое слово]";
+$a->strings["New album name"] = "Название нового альбома";
+$a->strings["Caption"] = "Подпись";
+$a->strings["Add a Tag"] = "Добавить ключевое слово";
+$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Пример: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping";
+$a->strings["I like this (toggle)"] = "Мне нравится это (флаг)";
+$a->strings["I don't like this (toggle)"] = "Мне не нравится это (флаг)";
+$a->strings["Share"] = "Поделиться";
+$a->strings["Please wait"] = "Пожалуйста, подождите";
+$a->strings["This is you"] = "Это вы";
+$a->strings["Comment"] = "Комментарий";
+$a->strings["Delete"] = "Удалить";
+$a->strings["Recent Photos"] = "Последние фото";
+$a->strings["Upload New Photos"] = "Загрузить новые фотографии";
+$a->strings["View Album"] = "Просмотреть альбом";
+$a->strings["Not available."] = "";
+$a->strings["Community"] = "";
+$a->strings["No results."] = "Нет результатов.";
+$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Общий контент покрывается лицензией <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a>.";
+$a->strings["Item not found"] = "Пункт не найден";
+$a->strings["Edit post"] = "Редактировать сообщение";
+$a->strings["Post to Email"] = "Отправить на Email";
+$a->strings["Edit"] = "Редактировать";
+$a->strings["Upload photo"] = "Загрузить фото";
+$a->strings["Attach file"] = "Приложить файл";
+$a->strings["Insert web link"] = "Вставить веб-ссылку";
+$a->strings["Insert YouTube video"] = "Вставить видео YouTube";
+$a->strings["Insert Vorbis [.ogg] video"] = "Вставить Vorbis [.ogg] видео";
+$a->strings["Insert Vorbis [.ogg] audio"] = "Вставить Vorbis [.ogg] аудио";
+$a->strings["Set your location"] = "Задать ваше местоположение";
+$a->strings["Clear browser location"] = "Очистить местоположение браузера";
+$a->strings["Permission settings"] = "Настройки разрешений";
+$a->strings["CC: email addresses"] = "CC: адреса электронной почты";
+$a->strings["Public post"] = "Публичное сообщение";
+$a->strings["Example: bob@example.com, mary@example.com"] = "Пример: bob@example.com, mary@example.com";
+$a->strings["This introduction has already been accepted."] = "Эта краткая информация уже была принята.";
+$a->strings["Profile location is not valid or does not contain profile information."] = "Местоположение профиля является недопустимым или не содержит информацию о профиле.";
+$a->strings["Warning: profile location has no identifiable owner name."] = "Внимание: местоположение профиля не имеет идентифицируемого имени владельца.";
+$a->strings["Warning: profile location has no profile photo."] = "Внимание: местоположение профиля не имеет еще фотографии профиля.";
+$a->strings["%d required parameter was not found at the given location"] = array(
+       0 => "%d требуемый параметр не был найден в заданном месте",
+       1 => "%d требуемые параметры не были найдены в заданном месте",
+       2 => "%d требуемые параметры не были найдены в заданном месте",
+);
+$a->strings["Introduction complete."] = "Краткая информация заполнена.";
+$a->strings["Unrecoverable protocol error."] = "Неисправимая ошибка протокола.";
+$a->strings["Profile unavailable."] = "Профиль недоступен.";
+$a->strings["%s has received too many connection requests today."] = "К %s пришло сегодня слишком много запросов на подключение.";
+$a->strings["Spam protection measures have been invoked."] = "Были применены меры защиты от спама.";
+$a->strings["Friends are advised to please try again in 24 hours."] = "Друзья советуют попробовать еще раз в ближайшие 24 часа.";
+$a->strings["Invalid locator"] = "Недопустимый локатор";
+$a->strings["Unable to resolve your name at the provided location."] = "Не удается установить ваше имя на предложенном местоположении.";
+$a->strings["You have already introduced yourself here."] = "Вы уже ввели информацию о себе здесь.";
+$a->strings["Apparently you are already friends with %s."] = "Похоже, что вы уже друзья с %s.";
+$a->strings["Invalid profile URL."] = "Неверный URL профиля.";
+$a->strings["Disallowed profile URL."] = "Запрещенный URL профиля.";
+$a->strings["Failed to update contact record."] = "Не удалось обновить запись контакта.";
+$a->strings["Your introduction has been sent."] = "Ваша краткая информация отправлена.";
+$a->strings["Please login to confirm introduction."] = "Пожалуйста, войдите с паролем для подтверждения краткой информации.";
+$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Неверно идентифицирован вход. Пожалуйста, войдите в <strong>этот</strong> профиль.";
+$a->strings["Welcome home %s."] = "Добро пожаловать домой, %s!";
+$a->strings["Please confirm your introduction/connection request to %s."] = "Пожалуйста, подтвердите краткую информацию / запрос на подключение к %s.";
+$a->strings["Confirm"] = "Подтвердить";
+$a->strings["[Name Withheld]"] = "[Имя не разглашается]";
+$a->strings["Introduction received at "] = "Краткая информация получена ";
+$a->strings["Administrator"] = "Администратор";
+$a->strings["Friend/Connection Request"] = "Запрос в друзья / на подключение";
+$a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Примеры: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca";
+$a->strings["Please answer the following:"] = "Пожалуйста, ответьте следующее:";
+$a->strings["Does %s know you?"] = "";
+$a->strings["Yes"] = "Да";
+$a->strings["No"] = "Нет";
+$a->strings["Add a personal note:"] = "Добавить личную заметку:";
+$a->strings["Please enter your 'Identity Address' from one of the following supported social networks:"] = "Пожалуйста, введите ваш 'идентификационный адрес' одной из следующих поддерживаемых социальных сетей:";
+$a->strings["Friendika"] = "Friendika";
+$a->strings["StatusNet/Federated Social Web"] = "StatusNet / Federated Social Web";
+$a->strings["Private (secure) network"] = "Частная (защищенная) сеть";
+$a->strings["Public (insecure) network"] = "Общественная (незащищенная) сеть";
+$a->strings["Your Identity Address:"] = "Ваш идентификационный адрес:";
+$a->strings["Submit Request"] = "Отправить запрос";
+$a->strings["Could not create/connect to database."] = "Не удается создать / подключиться к базе данных.";
+$a->strings["Connected to database."] = "Подключено к базе данных.";
+$a->strings["Proceed with Installation"] = "Приступить к установке";
+$a->strings["Your Friendika site database has been installed."] = "Ваша база данных сайта Friendika установлена.";
+$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "ВАЖНО: Вам нужно будет [вручную] установить запланированное задание для регистратора.";
+$a->strings["Please see the file \"INSTALL.txt\"."] = "Пожалуйста, смотрите файл \"INSTALL.txt\".";
+$a->strings["Proceed to registration"] = "Приступить к регистрации";
+$a->strings["Database import failed."] = "Импорт базы данных неудачный.";
+$a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Вам может понадобиться импортировать файл \"database.sql\" вручную с помощью PhpMyAdmin или MySQL.";
+$a->strings["Welcome to Friendika."] = "Добро пожаловать в Friendika!";
+$a->strings["Friendika Social Network"] = "Социальная сеть Friendika";
+$a->strings["Installation"] = "Установка";
+$a->strings["In order to install Friendika we need to know how to connect to your database."] = "";
+$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Пожалуйста, свяжитесь с вашим хостинг-провайдером или администратором сайта, если у вас есть вопросы об этих параметрах.";
+$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "";
+$a->strings["Database Server Name"] = "Имя сервера базы данных";
+$a->strings["Database Login Name"] = "Логин базы данных";
+$a->strings["Database Login Password"] = "Пароль базы данных";
+$a->strings["Database Name"] = "Имя базы данных";
+$a->strings["Please select a default timezone for your website"] = "Пожалуйста, выберите часовой пояс по умолчанию для вашего сайта";
+$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "";
+$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Не удалось найти PATH веб-сервера в установках PHP.";
+$a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "Это необходимо. Пожалуйста, измените файл конфигурации .htconfig.php соответственно.";
+$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Не включено \"register_argc_argv\" в установках PHP.";
+$a->strings["This is required for message delivery to work."] = "Это необходимо для работы доставки сообщений.";
+$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Ошибка: функция \"openssl_pkey_new\" в этой системе не в состоянии генерировать ключи шифрования";
+$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Если вы работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\".";
+$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Ошибка: необходим модуль веб-сервера Apache mod-rewrite, но он не установлен.";
+$a->strings["Error: libCURL PHP module required but not installed."] = "Ошибка: необходим libCURL PHP модуль, но он не установлен.";
+$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Ошибка: необходим PHP модуль GD графики с поддержкой JPEG, но он не установлен.";
+$a->strings["Error: openssl PHP module required but not installed."] = "Ошибка: необходим PHP модуль OpenSSL, но он не установлен.";
+$a->strings["Error: mysqli PHP module required but not installed."] = "Ошибка: необходим PHP модуль MySQLi, но он не установлен.";
+$a->strings["Error: mb_string PHP module required but not installed."] = "";
+$a->strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "Веб-инсталлятору требуется создать файл с именем \". htconfig.php\" в верхней папке веб-сервера, но он не в состоянии это сделать.";
+$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Это наиболее частые параметры разрешений, когда веб-сервер не может записать файлы в папке - даже если вы можете.";
+$a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Пожалуйста, посмотрите документацию вашего сайта или обратитесь к другим за поддержкой, чтобы убедиться, что эта ситуация может быть исправлена.";
+$a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Если нет, вам может потребоваться выполнить установку вручную. Пожалуйста, посмотрите файл \"INSTALL.txt\" для получения инструкций.";
+$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Файл конфигурации базы данных \".htconfig.php\" не могла быть записан. Пожалуйста, используйте приложенный текст, чтобы создать конфигурационный файл в корневом каталоге веб-сервера.";
+$a->strings["Errors encountered creating database tables."] = "Обнаружены ошибки при создании таблиц базы данных.";
+$a->strings["[Embedded content - reload page to view]"] = "[Встроенный контент - перезагрузите страницу для просмотра]";
+$a->strings["Profile Match"] = "Похожие профили";
+$a->strings["No keywords to match. Please add keywords to your default profile."] = "";
+$a->strings["No matches"] = "Нет соответствий";
+$a->strings["Remote privacy information not available."] = "Личная информация удаленно недоступна.";
+$a->strings["Visible to:"] = "Кто может видеть:";
+$a->strings["Welcome to %s"] = "Добро пожаловать на %s!";
+$a->strings["Invalid request identifier."] = "Неверный идентификатор запроса.";
+$a->strings["Discard"] = "Отказаться";
+$a->strings["Ignore"] = "Игнорировать";
+$a->strings["Pending Friend/Connect Notifications"] = "Ожидающие друзья / Уведомления о подключении";
+$a->strings["Show Ignored Requests"] = "Показать проигнорированные запросы";
+$a->strings["Hide Ignored Requests"] = "Скрыть проигнорированные запросы";
+$a->strings["Notification type: "] = "Тип уведомления: ";
+$a->strings["Friend Suggestion"] = "";
+$a->strings["suggested by %s"] = "";
+$a->strings["Approve"] = "Одобрить";
+$a->strings["Claims to be known to you: "] = "Претензии, о которых должно быть вам известно: ";
+$a->strings["yes"] = "да";
+$a->strings["no"] = "нет";
+$a->strings["Approve as: "] = "Утвердить как: ";
+$a->strings["Friend"] = "Друг";
+$a->strings["Fan/Admirer"] = "Фанат / Поклонник";
+$a->strings["Friend/Connect Request"] = "Запрос в друзья / на подключение";
+$a->strings["New Follower"] = "Новый фолловер";
+$a->strings["No notifications."] = "Нет уведомлений.";
+$a->strings["Invite Friends"] = "Пригласить друзей";
+$a->strings["%d invitation available"] = array(
+       0 => "",
+       1 => "",
+       2 => "",
+);
+$a->strings["Find People With Shared Interests"] = "Найти людей с общими интересами";
+$a->strings["Connect/Follow"] = "Подключиться/Следовать";
+$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Пример: bob@example.com, http://example.com/barbara";
+$a->strings["Follow"] = "Следовать";
+$a->strings["Could not access contact record."] = "Не удалось получить доступ к записи контакта.";
+$a->strings["Could not locate selected profile."] = "Не удается найти выбранный профиль.";
+$a->strings["Contact updated."] = "Контакт обновлен.";
+$a->strings["Contact has been blocked"] = "Контакт заблокирован";
+$a->strings["Contact has been unblocked"] = "Контакт разблокирован";
+$a->strings["Contact has been ignored"] = "Контакт проигнорирован";
+$a->strings["Contact has been unignored"] = "У контакта отменено игнорирование";
+$a->strings["stopped following"] = "остановлено следование";
+$a->strings["Contact has been removed."] = "Контакт удален.";
+$a->strings["Mutual Friendship"] = "Взаимная дружба";
+$a->strings["is a fan of yours"] = "является вашим поклонником";
+$a->strings["you are a fan of"] = "Вы - поклонник";
+$a->strings["Privacy Unavailable"] = "Конфиденциальность невозможна";
+$a->strings["Private communications are not available for this contact."] = "Личные коммуникации недоступны для этого контакта.";
+$a->strings["Never"] = "Никогда";
+$a->strings["(Update was successful)"] = "(Обновление было успешным)";
+$a->strings["(Update was not successful)"] = "(Обновление не удалось)";
+$a->strings["Suggest friends"] = "";
+$a->strings["Contact Editor"] = "Редактор контакта";
+$a->strings["Profile Visibility"] = "Видимость профиля";
+$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Пожалуйста, выберите профиль, который вы хотите отображать %s, когда просмотр вашего профиля безопасен.";
+$a->strings["Contact Information / Notes"] = "Контактная информация / Заметки";
+$a->strings["Online Reputation"] = "Репутация в онлайне";
+$a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = "Иногда ваши друзья, возможно, захотят узнать о легитимности в онлайне этого человека.";
+$a->strings["You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them."] = "Вы можете помочь им решить, следует ли общаться с этим человеком, предлагая <em>репутацию</em> для ознакомления.";
+$a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = "Пожалуйста, найдите время, чтобы остановиться на этом выборе, если вы чувствуете, что можете быть полезным для других.";
+$a->strings["Visit %s's profile [%s]"] = "";
+$a->strings["Block/Unblock contact"] = "Блокировать / Разблокировать контакт";
+$a->strings["Ignore contact"] = "Игнорировать контакт";
+$a->strings["Repair contact URL settings"] = "Восстановить установки URL контакта";
+$a->strings["Repair contact URL settings (WARNING: Advanced)"] = "Восстановить установки URL контакта (ВНИМАНИЕ: Расширено)";
+$a->strings["View conversations"] = "Просмотр общения";
+$a->strings["Delete contact"] = "Удалить контакт";
+$a->strings["Last updated: "] = "Последнее обновление: ";
+$a->strings["Update public posts: "] = "Обновить сообщения для всех: ";
+$a->strings["Update now"] = "Обновить сейчас";
+$a->strings["Unblock this contact"] = "Разблокировать этот контакт";
+$a->strings["Block this contact"] = "Блокировать этот контакт";
+$a->strings["Unignore this contact"] = "Не игнорировать этот контакт";
+$a->strings["Ignore this contact"] = "Игнорировать этот контакт";
+$a->strings["Currently blocked"] = "В настоящее время заблокирован";
+$a->strings["Currently ignored"] = "В настоящее время игнорируется";
+$a->strings["Contacts"] = "Контакты";
+$a->strings["Show Blocked Connections"] = "Показать заблокированные подключения";
+$a->strings["Hide Blocked Connections"] = "Скрыть заблокированные подключения";
+$a->strings["Finding: "] = "Результат поиска: ";
+$a->strings["Find"] = "Найти";
+$a->strings["Edit contact"] = "Изменить контакт";
+$a->strings["No valid account found."] = "";
+$a->strings["Password reset request issued. Check your email."] = "Запрос на сброс пароля принят. Проверьте вашу электронную почту.";
+$a->strings["Password reset requested at %s"] = "Запрос на сброс пароля получен %s";
+$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Запрос не может быть проверен. (Вы, возможно, ранее представляли его.) Попытка сброса пароля неудачная.";
+$a->strings["Password Reset"] = "Сброс пароля";
+$a->strings["Your password has been reset as requested."] = "Ваш пароль был сброшен по требованию.";
+$a->strings["Your new password is"] = "Ваш новый пароль";
+$a->strings["Save or copy your new password - and then"] = "Сохраните или скопируйте новый пароль - и затем";
+$a->strings["click here to login"] = "нажмите здесь для входа";
+$a->strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Ваш пароль может быть изменен на странице <em>Настройки</em> после успешного входа.";
+$a->strings["Forgot your Password?"] = "Забыли пароль?";
+$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Введите адрес электронной почты и подтвердите, что вы хотите сбросить ваш пароль. Затем проверьте свою электронную почту для получения дальнейших инструкций.";
+$a->strings["Nickname or Email: "] = "Ник или E-mail: ";
+$a->strings["Reset"] = "Сброс";
+$a->strings["Passwords do not match. Password unchanged."] = "Пароли не совпадают. Пароль не изменен.";
+$a->strings["Empty passwords are not allowed. Password unchanged."] = "Пустые пароли не допускаются. Пароль не изменен.";
+$a->strings["Password changed."] = "Пароль изменен.";
+$a->strings["Password update failed. Please try again."] = "Обновление пароля не удалось. Пожалуйста, попробуйте еще раз.";
+$a->strings["Failed to connect with email account using the settings provided."] = "";
+$a->strings[" Please use a shorter name."] = " Пожалуйста, используйте более короткое имя.";
+$a->strings[" Name too short."] = " Имя слишком короткое.";
+$a->strings[" Not valid email."] = " Неверный e-mail.";
+$a->strings[" Cannot change to that email."] = " Невозможно изменить на этот e-mail.";
+$a->strings["Settings updated."] = "Настройки обновлены.";
+$a->strings["Account settings"] = "";
+$a->strings["Plugin settings"] = "";
+$a->strings["No Plugin settings configured"] = "Нет сконфигурированных настроек плагина";
+$a->strings["Plugin Settings"] = "Настройки плагина";
+$a->strings["Normal Account"] = "Обычный аккаунт";
+$a->strings["This account is a normal personal profile"] = "Этот аккаунт является обычным персональным профилем";
+$a->strings["Soapbox Account"] = "Аккаунт Витрина";
+$a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Автоматически одобряются все подключения / запросы в друзья, только для чтения поклонниками";
+$a->strings["Community/Celebrity Account"] = "Аккаунт Сообщество / Знаменитость";
+$a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Автоматически одобряются все подключения / запросы в друзья, для чтения и записей поклонников";
+$a->strings["Automatic Friend Account"] = "Аккаунт Автоматический друг";
+$a->strings["Automatically approve all connection/friend requests as friends"] = "Автоматически одобряются все подключения / запросы в друзья, расширяется список друзей";
+$a->strings["OpenID:"] = "";
+$a->strings["(Optional) Allow this OpenID to login to this account."] = "";
+$a->strings["Publish your default profile in your local site directory?"] = "";
+$a->strings["Publish your default profile in the global social directory?"] = "";
+$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "";
+$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Скрыть детали профиля и все ваши сообщения от неизвестных зрителей?";
+$a->strings["Profile is <strong>not published</strong>."] = "Профиль <strong>не публикуется</strong>.";
+$a->strings["or"] = "или";
+$a->strings["Your Identity Address is"] = "Ваш идентификационный адрес";
+$a->strings["Account Settings"] = "Настройки аккаунта";
+$a->strings["Export Personal Data"] = "Экспорт личных данных";
+$a->strings["Password Settings"] = "Настройка пароля";
+$a->strings["New Password:"] = "Новый пароль:";
+$a->strings["Confirm:"] = "Подтвердите:";
+$a->strings["Leave password fields blank unless changing"] = "Оставьте поля пароля пустыми, если он не изменяется";
+$a->strings["Basic Settings"] = "Основные параметры";
+$a->strings["Full Name:"] = "Полное имя:";
+$a->strings["Email Address:"] = "Адрес электронной почты:";
+$a->strings["Your Timezone:"] = "Ваш часовой пояс:";
+$a->strings["Default Post Location:"] = "Местоположение сообщения по умолчанию:";
+$a->strings["Use Browser Location:"] = "Использовать определение местоположения браузером:";
+$a->strings["Display Theme:"] = "Показать тему:";
+$a->strings["Security and Privacy Settings"] = "Параметры безопасности и конфиденциальности";
+$a->strings["Maximum Friend Requests/Day:"] = "Максимум запросов в друзья в день:";
+$a->strings["(to prevent spam abuse)"] = "(для предотвращения спама)";
+$a->strings["Default Post Permissions"] = "По умолчанию разрешения на сообщения";
+$a->strings["(click to open/close)"] = "(нажмите, чтобы открыть / закрыть)";
+$a->strings["Allow friends to post to your profile page:"] = "Разрешить друзьям оставлять сообщения на странице вашего профиля:";
+$a->strings["Automatically expire posts after days:"] = "";
+$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "";
+$a->strings["Notification Settings"] = "Настройка уведомлений";
+$a->strings["Send a notification email when:"] = "Отправлять уведомление по электронной почте, когда:";
+$a->strings["You receive an introduction"] = "Вы получаете краткую информацию";
+$a->strings["Your introductions are confirmed"] = "Ваши сообщения с краткой информацией подтверждены";
+$a->strings["Someone writes on your profile wall"] = "Кто-то пишет на стене вашего профиля";
+$a->strings["Someone writes a followup comment"] = "Кто-то пишет последующий комментарий";
+$a->strings["You receive a private message"] = "Вы получаете личное сообщение";
+$a->strings["Email/Mailbox Setup"] = "Настройка Email / почтового ящика";
+$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Если вы хотите общаться с Email контактами, используя этот сервис (по желанию), пожалуйста, уточните, как подключиться к вашему почтовому ящику.";
+$a->strings["Last successful email check:"] = "";
+$a->strings["Email access is disabled on this site."] = "Email доступ отключен на этом сайте.";
+$a->strings["IMAP server name:"] = "Имя IMAP сервера:";
+$a->strings["IMAP port:"] = "Порт IMAP:";
+$a->strings["Security:"] = "";
+$a->strings["None"] = "";
+$a->strings["Email login name:"] = "Email логин:";
+$a->strings["Email password:"] = "Email пароль:";
+$a->strings["Reply-to address:"] = "";
+$a->strings["Send public posts to all email contacts:"] = "Отправлять открытые сообщения на все контакты электронной почты:";
+$a->strings["Advanced Page Settings"] = "Дополнительные параметры страницы";
+$a->strings["Welcome back %s"] = "С возвращением, %s";
+$a->strings["Manage Identities and/or Pages"] = "Управление идентификацией и / или страницами";
+$a->strings["(Toggle between different identities or community/group pages which share your account details.)"] = "(Переключение между различными идентификациями или страницами сообществ / групп, которые делают публичными данные своего аккаунта.)";
+$a->strings["Select an identity to manage: "] = "Выберите идентификацию для управления: ";
+$a->strings["View Conversations"] = "";
+$a->strings["View New Items"] = "";
+$a->strings["View Any Items"] = "";
+$a->strings["View Starred Items"] = "";
+$a->strings["Warning: This group contains %s member from an insecure network."] = array(
+       0 => "Внимание: Эта группа содержит %s участника с незащищенной сети.",
+       1 => "Внимание: Эта группа содержит %s участников с незащищенной сети.",
+       2 => "Внимание: Эта группа содержит %s участников с незащищенной сети.",
+);
+$a->strings["Private messages to this group are at risk of public disclosure."] = "Личные сообщения к этой группе находятся под угрозой обнародования.";
+$a->strings["No such group"] = "Нет такой группы";
+$a->strings["Group is empty"] = "Группа пуста";
+$a->strings["Group: "] = "Группа: ";
+$a->strings["Contact: "] = "Контакт: ";
+$a->strings["Private messages to this person are at risk of public disclosure."] = "Личные сообщения этому человеку находятся под угрозой обнародования.";
+$a->strings["Invalid contact."] = "Недопустимый контакт.";
+$a->strings["Save"] = "Сохранить";
+$a->strings["Welcome to Friendika"] = "";
+$a->strings["New Member Checklist"] = "";
+$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = "";
+$a->strings["On your <em>Settings</em> page -  change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = "";
+$a->strings["Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you."] = "";
+$a->strings["Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not."] = "";
+$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "";
+$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "";
+$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "";
+$a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "";
+$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Connect</em> dialog."] = "";
+$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "";
+$a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "";
+$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "";
+$a->strings["Item not available."] = "Пункт не доступен.";
+$a->strings["Item was not found."] = "Пункт не был найден.";
+$a->strings["Group created."] = "Группа создана.";
+$a->strings["Could not create group."] = "Не удается создать группу.";
+$a->strings["Group not found."] = "Группа не найдена.";
+$a->strings["Group name changed."] = "Название группы изменено.";
+$a->strings["Permission denied"] = "Доступ запрещен";
+$a->strings["Create a group of contacts/friends."] = "Создать группу контактов / друзей.";
+$a->strings["Group Name: "] = "Название группы: ";
+$a->strings["Group removed."] = "Группа удалена.";
+$a->strings["Unable to remove group."] = "Не удается удалить группу.";
+$a->strings["Click on a contact to add or remove."] = "Нажмите на контакт, чтобы добавить или удалить.";
+$a->strings["Group Editor"] = "Редактор группы";
+$a->strings["Members"] = "Участники";
+$a->strings["All Contacts"] = "Все контакты";
+$a->strings["Invalid profile identifier."] = "Недопустимый идентификатор профиля.";
+$a->strings["Profile Visibility Editor"] = "Редактор видимости профиля";
+$a->strings["Visible To"] = "Видимый для";
+$a->strings["All Contacts (with secure profile access)"] = "Все контакты (с безопасным доступом к профилю)";
+$a->strings["View Contacts"] = "Просмотр контактов";
+$a->strings["No contacts."] = "Нет контактов.";
+$a->strings["An invitation is required."] = "";
+$a->strings["Invitation could not be verified."] = "";
+$a->strings["Invalid OpenID url"] = "Неверный URL OpenID";
+$a->strings["Please enter the required information."] = "Пожалуйста, введите необходимую информацию.";
+$a->strings["Please use a shorter name."] = "Пожалуйста, используйте более короткое имя.";
+$a->strings["Name too short."] = "Имя слишком короткое.";
+$a->strings["That doesn't appear to be your full (First Last) name."] = "Кажется, что это ваше неполное (Имя Фамилия) имя.";
+$a->strings["Your email domain is not among those allowed on this site."] = "Домен вашего адреса электронной почты не относится к числу разрешенных на этом сайте.";
+$a->strings["Not a valid email address."] = "Неверный адрес электронной почты.";
+$a->strings["Cannot use that email."] = "Нельзя использовать этот Email.";
+$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Ваш \"ник\" может содержать только \"a-z\", \"0-9\", \"-\", и \"_\", а также должен начинаться с буквы.";
+$a->strings["Nickname is already registered. Please choose another."] = "Такой ник уже зарегистрирован. Пожалуйста, выберите другой.";
+$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "СЕРЬЕЗНАЯ ОШИБКА: генерация ключей безопасности не удалась.";
+$a->strings["An error occurred during registration. Please try again."] = "Ошибка при регистрации. Пожалуйста, попробуйте еще раз.";
+$a->strings["An error occurred creating your default profile. Please try again."] = "Ошибка создания вашего профиля по умолчанию. Пожалуйста, попробуйте еще раз.";
+$a->strings["Registration details for %s"] = "Подробности регистрации для %s";
+$a->strings["Registration successful. Please check your email for further instructions."] = "Регистрация успешна. Пожалуйста, проверьте свою электронную почту для получения дальнейших инструкций.";
+$a->strings["Failed to send email message. Here is the message that failed."] = "Невозможно отправить сообщение электронной почтой. Вот сообщение, которое не удалось.";
+$a->strings["Your registration can not be processed."] = "Ваша регистрация не может быть обработана.";
+$a->strings["Registration request at %s"] = "Запрос на регистрацию на %s";
+$a->strings["Your registration is pending approval by the site owner."] = "Ваша регистрация в ожидании одобрения владельцем сайта.";
+$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Вы можете (по желанию), заполнить эту форму с помощью OpenID, поддерживая ваш OpenID и нажав клавишу \"Регистрация\".";
+$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Если вы не знакомы с OpenID, пожалуйста, оставьте это поле пустым и заполните остальные элементы.";
+$a->strings["Your OpenID (optional): "] = "Ваш OpenID (необязательно):";
+$a->strings["Include your profile in member directory?"] = "Включить ваш профиль в каталог участников?";
+$a->strings["Membership on this site is by invitation only."] = "";
+$a->strings["Your invitation ID: "] = "";
+$a->strings["Registration"] = "Регистрация";
+$a->strings["Your Full Name (e.g. Joe Smith): "] = "Ваше полное имя (например, Joe Smith): ";
+$a->strings["Your Email Address: "] = "Ваш адрес электронной почты: ";
+$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@\$sitename</strong>'."] = "Выбор ник профиля. Он должен начинаться с буквы. Адрес вашего профиля на данном сайте будет в этом случае '<strong>nickname@\$sitename</strong>'.";
+$a->strings["Choose a nickname: "] = "Выберите ник: ";
+$a->strings["Register"] = "Регистрация";
+$a->strings["status"] = "статус";
+$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %3\$s от %2\$s ";
+$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s не нравится %3\$s от %2\$s ";
+$a->strings["This is Friendika version"] = "Это версия Friendika";
+$a->strings["running at web location"] = "работает на веб-узле";
+$a->strings["Shared content within the Friendika network is provided under the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0 license</a>"] = "Общий контент в сети Friendika предоставляется по лицензии <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a>";
+$a->strings["Please visit <a href=\"http://project.friendika.com\">Project.Friendika.com</a> to learn more about the Friendika project."] = "Пожалуйста, посетите <a href=\"http://project.friendika.com\">Project.Friendika.com</a>, чтобы узнать больше о проекте Friendika.";
+$a->strings["Bug reports and issues: please visit"] = "Отчеты об ошибках и проблемы: пожалуйста, посетите";
+$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = "Предложения, похвалы, пожертвования и т.д. - пожалуйста, напишите Email \"Info\" на Friendika - dot com";
+$a->strings["Installed plugins/addons/apps"] = "Установленные плагины / добавки / приложения";
+$a->strings["No installed plugins/addons/apps"] = "Нет установленных плагинов / добавок / приложений";
+$a->strings["Account approved."] = "Аккаунт утвержден.";
+$a->strings["Registration revoked for %s"] = "Регистрация отменена для %s";
+$a->strings["Please login."] = "Пожалуйста, войдите с паролем.";
+$a->strings["Unable to locate original post."] = "Не удалось найти оригинальный пост.";
+$a->strings["Empty post discarded."] = "Пустое сообщение отбрасывается.";
+$a->strings["Wall Photos"] = "Фото стены";
+$a->strings["noreply"] = "без ответа";
+$a->strings["Administrator@"] = "Администратор @";
+$a->strings["%s commented on an item at %s"] = "%s оставил/а/ комментарий на %s";
+$a->strings["%s posted to your profile wall at %s"] = "% S. написал/а/ на стене вашего профиля на %s";
+$a->strings["System error. Post not saved."] = "Системная ошибка. Сообщение не сохранено.";
+$a->strings["This message was sent to you by %s, a member of the Friendika social network."] = "Это письмо было отправлено вам от %s, участника социальной сети Friendika.";
+$a->strings["You may visit them online at %s"] = "Вы можете посетить их в онлайне на %s";
+$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не хотите получать эти сообщения.";
+$a->strings["%s posted an update."] = "%s отправил/а/ обновление.";
+$a->strings["Image uploaded but image cropping failed."] = "Изображение загружено, но обрезка изображения не удалась.";
+$a->strings["Image size reduction [%s] failed."] = "Уменьшение размера изображения [%s] не удалось.";
+$a->strings["Unable to process image"] = "Не удается обработать изображение";
+$a->strings["Image exceeds size limit of %d"] = "Изображение превышает предельный размер %d";
+$a->strings["Upload File:"] = "Загрузить файл:";
+$a->strings["Upload Profile Photo"] = "Загрузить фото профиля";
+$a->strings["Upload"] = "Загрузить";
+$a->strings["skip this step"] = "пропустить этот шаг";
+$a->strings["select a photo from your photo albums"] = "выберите фото из ваших фотоальбомов";
+$a->strings["Crop Image"] = "Обрезать изображение";
+$a->strings["Please adjust the image cropping for optimum viewing."] = "Пожалуйста, настройте обрезку изображения для оптимального просмотра.";
+$a->strings["Done Editing"] = "Редактирование выполнено";
+$a->strings["Image uploaded successfully."] = "Изображение загружено успешно.";
+$a->strings["No profile"] = "Нет профиля";
+$a->strings["Remove My Account"] = "Удалить мой аккаунт";
+$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Это позволит полностью удалить ваш аккаунт. Как только это будет сделано, аккаунт восстановлению не подлежит.";
+$a->strings["Please enter your password for verification:"] = "Пожалуйста, введите свой пароль для проверки:";
+$a->strings["No recipient selected."] = "Не выбран получатель.";
+$a->strings["[no subject]"] = "[без темы]";
+$a->strings["Unable to locate contact information."] = "Не удалось найти контактную информацию.";
+$a->strings["Message sent."] = "Сообщение отправлено.";
+$a->strings["Message could not be sent."] = "Сообщение не может быть отправлено.";
+$a->strings["Messages"] = "Сообщения";
+$a->strings["Inbox"] = "Входящие";
+$a->strings["Outbox"] = "Исходящие";
+$a->strings["New Message"] = "Новое сообщение";
+$a->strings["Message deleted."] = "Сообщение удалено.";
+$a->strings["Conversation removed."] = "История общения удалена.";
+$a->strings["Please enter a link URL:"] = "Пожалуйста, введите URL ссылки:";
+$a->strings["Send Private Message"] = "Отправить личное сообщение";
+$a->strings["To:"] = "Кому:";
+$a->strings["Subject:"] = "Тема:";
+$a->strings["Your message:"] = "Ваше сообщение:";
+$a->strings["No messages."] = "Нет сообщений.";
+$a->strings["Delete conversation"] = "Удалить историю общения";
+$a->strings["D, d M Y - g:i A"] = "D, d M Y - g:i A";
+$a->strings["Message not available."] = "Сообщение не доступно.";
+$a->strings["Delete message"] = "Удалить сообщение";
+$a->strings["Send Reply"] = "Отправить ответ";
+$a->strings["Site"] = "";
+$a->strings["Users"] = "";
+$a->strings["Plugins"] = "";
+$a->strings["Update"] = "";
+$a->strings["Logs"] = "";
+$a->strings["User registrations waiting for confirmation"] = "";
+$a->strings["Item not found."] = "Пункт не найден.";
+$a->strings["Administration"] = "";
+$a->strings["Summary"] = "";
+$a->strings["Registered users"] = "";
+$a->strings["Pending registrations"] = "";
+$a->strings["Version"] = "";
+$a->strings["Active plugins"] = "";
+$a->strings["Site settings updated."] = "";
+$a->strings["Closed"] = "";
+$a->strings["Requires approval"] = "";
+$a->strings["Open"] = "";
+$a->strings["File upload"] = "";
+$a->strings["Policies"] = "";
+$a->strings["Advanced"] = "";
+$a->strings["Site name"] = "";
+$a->strings["Banner/Logo"] = "";
+$a->strings["System language"] = "";
+$a->strings["System theme"] = "";
+$a->strings["Maximum image size"] = "";
+$a->strings["Register policy"] = "";
+$a->strings["Register text"] = "";
+$a->strings["Allowed friend domains"] = "";
+$a->strings["Allowed email domains"] = "";
+$a->strings["Block public"] = "";
+$a->strings["Force publish"] = "";
+$a->strings["Global directory update URL"] = "";
+$a->strings["Block multiple registrations"] = "";
+$a->strings["OpenID support"] = "";
+$a->strings["Gravatar support"] = "";
+$a->strings["Fullname check"] = "";
+$a->strings["UTF-8 Regular expressions"] = "";
+$a->strings["Show Community Page"] = "";
+$a->strings["Enable OStatus support"] = "";
+$a->strings["Only allow Friendika contacts"] = "";
+$a->strings["Verify SSL"] = "";
+$a->strings["Proxy user"] = "";
+$a->strings["Proxy URL"] = "";
+$a->strings["Network timeout"] = "";
+$a->strings["%s user blocked"] = array(
+       0 => "",
+       1 => "",
+       2 => "",
+);
+$a->strings["%s user deleted"] = array(
+       0 => "",
+       1 => "",
+       2 => "",
+);
+$a->strings["User '%s' deleted"] = "";
+$a->strings["User '%s' unblocked"] = "";
+$a->strings["User '%s' blocked"] = "";
+$a->strings["select all"] = "";
+$a->strings["User registrations waiting for confirm"] = "Регистрации пользователей, ожидающие подтверждения";
+$a->strings["Request date"] = "";
+$a->strings["Email"] = "";
+$a->strings["No registrations."] = "Нет регистраций.";
+$a->strings["Deny"] = "Отклонить";
+$a->strings["Block"] = "";
+$a->strings["Unblock"] = "";
+$a->strings["Register date"] = "";
+$a->strings["Last login"] = "";
+$a->strings["Last item"] = "";
+$a->strings["Account"] = "";
+$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "";
+$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "";
+$a->strings["Plugin %s disabled."] = "";
+$a->strings["Plugin %s enabled."] = "";
+$a->strings["Disable"] = "";
+$a->strings["Enable"] = "";
+$a->strings["Toggle"] = "";
+$a->strings["Settings"] = "Настройки";
+$a->strings["Log settings updated."] = "";
+$a->strings["Clear"] = "";
+$a->strings["Debugging"] = "";
+$a->strings["Log file"] = "";
+$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = "";
+$a->strings["Log level"] = "";
+$a->strings["Close"] = "";
+$a->strings["FTP Host"] = "";
+$a->strings["FTP Path"] = "";
+$a->strings["FTP User"] = "";
+$a->strings["FTP Password"] = "";
+$a->strings["Access to this profile has been restricted."] = "Доступ к этому профилю ограничен.";
+$a->strings["Tips for New Members"] = "";
+$a->strings["Login failed."] = "Войти не удалось.";
+$a->strings["Welcome "] = "Добро пожаловать, ";
+$a->strings["Please upload a profile photo."] = "Пожалуйста, загрузите фотографию профиля.";
+$a->strings["Welcome back "] = "Добро пожаловать обратно, ";
+$a->strings["This site is not configured to allow communications with other networks."] = "";
+$a->strings["No compatible communication protocols or feeds were discovered."] = "Обнаружены несовместимые протоколы связи или каналы.";
+$a->strings["The profile address specified does not provide adequate information."] = "Указанный адрес профиля не дает адекватной информации.";
+$a->strings["An author or name was not found."] = "Автор или имя не найдены.";
+$a->strings["No browser URL could be matched to this address."] = "Нет URL браузера, который соответствует этому адресу.";
+$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Указанный адрес профиля принадлежит сети, недоступной на этом сайта.";
+$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Ограниченный профиль. Этот человек не сможет получить прямые / личные уведомления от вас.";
+$a->strings["Unable to retrieve contact information."] = "Невозможно получить контактную информацию.";
+$a->strings["following"] = "следует";
+$a->strings["Item has been removed."] = "Пункт был удален.";
+$a->strings["New mail received at "] = "Новая почта получена ";
+$a->strings["Applications"] = "Приложения";
+$a->strings["No installed applications."] = "";
+$a->strings["Search"] = "Поиск";
+$a->strings["Profile not found."] = "Профиль не найден.";
+$a->strings["Profile Name is required."] = "Необходимо имя профиля.";
+$a->strings["Profile updated."] = "Профиль обновлен.";
+$a->strings["Profile deleted."] = "Профиль удален.";
+$a->strings["Profile-"] = "Профиль-";
+$a->strings["New profile created."] = "Новый профиль создан.";
+$a->strings["Profile unavailable to clone."] = "Профиль недоступен для клонирования.";
+$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Скрывать ваш список контактов / друзей от посетителей этого профиля?";
+$a->strings["Edit Profile Details"] = "Изменить подробности профиля";
+$a->strings["View this profile"] = "Просмотреть этот профиль";
+$a->strings["Create a new profile using these settings"] = "Создать новый профиль, используя эти настройки";
+$a->strings["Clone this profile"] = "Клонировать этот профиль";
+$a->strings["Delete this profile"] = "Удалить этот профиль";
+$a->strings["Profile Name:"] = "Имя профиля:";
+$a->strings["Your Full Name:"] = "Ваше полное имя:";
+$a->strings["Title/Description:"] = "Заголовок / Описание:";
+$a->strings["Your Gender:"] = "Ваш пол:";
+$a->strings["Birthday (%s):"] = "";
+$a->strings["Street Address:"] = "Адрес:";
+$a->strings["Locality/City:"] = "Город / Населенный пункт:";
+$a->strings["Postal/Zip Code:"] = "Почтовый индекс:";
+$a->strings["Country:"] = "Страна:";
+$a->strings["Region/State:"] = "Район / Область:";
+$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Семейное положение:";
+$a->strings["Who: (if applicable)"] = "Кто: (если применимо)";
+$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Примеры: cathy123, Кэти Уильямс, cathy@example.com";
+$a->strings["Sexual Preference:"] = "Сексуальные предпочтения:";
+$a->strings["Homepage URL:"] = "Адрес домашней странички:";
+$a->strings["Political Views:"] = "Политические взгляды:";
+$a->strings["Religious Views:"] = "Религиозные взгляды:";
+$a->strings["Public Keywords:"] = "Общественные ключевые слова:";
+$a->strings["Private Keywords:"] = "Личные ключевые слова:";
+$a->strings["Example: fishing photography software"] = "Пример: рыбалка фотографии программное обеспечение";
+$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Используется для предложения потенциальным друзьям, могут увидеть другие)";
+$a->strings["(Used for searching profiles, never shown to others)"] = "(Используется для поиска профилей, никогда не показывается другим)";
+$a->strings["Tell us about yourself..."] = "Расскажите нам о себе ...";
+$a->strings["Hobbies/Interests"] = "Хобби / Интересы";
+$a->strings["Contact information and Social Networks"] = "Контактная информация и социальные сети";
+$a->strings["Musical interests"] = "Музыкальные интересы";
+$a->strings["Books, literature"] = "Книги, литература";
+$a->strings["Television"] = "Телевидение";
+$a->strings["Film/dance/culture/entertainment"] = "Кино / танцы / культура / развлечения";
+$a->strings["Love/romance"] = "Любовь / романтика";
+$a->strings["Work/employment"] = "Работа / занятость";
+$a->strings["School/education"] = "Школа / образование";
+$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "Это ваш <strong>публичный</strong> профиль. <br /> Он <strong>может</strong> быть виден каждому, используя Интернет.";
+$a->strings["Age: "] = "Возраст: ";
+$a->strings["Profiles"] = "Профили";
+$a->strings["Change profile photo"] = "Изменить фото профиля";
+$a->strings["Create New Profile"] = "Создать новый профиль";
+$a->strings["Profile Image"] = "Фото профиля";
+$a->strings["visible to everybody"] = "";
+$a->strings["Edit visibility"] = "Изменить видимость";
+$a->strings["Global Directory"] = "Глобальный каталог";
+$a->strings["Normal site view"] = "Стандартный вид сайта";
+$a->strings["View all site entries"] = "Посмотреть все записи сайта";
+$a->strings["Site Directory"] = "Каталог сайта";
+$a->strings["Gender: "] = "Пол: ";
+$a->strings["No entries (some entries may be hidden)."] = "Нет записей (некоторые записи могут быть скрыты).";
+$a->strings["%s : Not a valid email address."] = "%s: Неверный адрес электронной почты.";
+$a->strings["Please join my network on %s"] = "Пожалуйста, присоединяйтесь к моей сети на %s";
+$a->strings["%s : Message delivery failed."] = "%s: Доставка сообщения не удалась.";
+$a->strings["%d message sent."] = array(
+       0 => "%d сообщение отправлено.",
+       1 => "%d сообщений отправлено.",
+       2 => "%d сообщений отправлено.",
+);
+$a->strings["You have no more invitations available"] = "";
+$a->strings["Send invitations"] = "Отправить приглашения";
+$a->strings["Enter email addresses, one per line:"] = "Введите адреса электронной почты, по одному в строке:";
+$a->strings["Please join my social network on %s"] = "Пожалуйста, присоединяйтесь к моей социальной сети на %s";
+$a->strings["To accept this invitation, please visit:"] = "Чтобы принять это приглашение, пожалуйста, посетите:";
+$a->strings["You will need to supply this invitation code: \$invite_code"] = "";
+$a->strings["Once you have registered, please connect with me via my profile page at:"] = "После того как вы зарегистрировались, пожалуйста, свяжитесь со мной через мою страницу профиля по адресу:";
+$a->strings["Response from remote site was not understood."] = "Ответ от удаленного сайта не был понят.";
+$a->strings["Unexpected response from remote site: "] = "Неожиданный ответ от удаленного сайта: ";
+$a->strings["Confirmation completed successfully."] = "Подтверждение успешно завершено.";
+$a->strings["Remote site reported: "] = "Удаленный сайт сообщил: ";
+$a->strings["Temporary failure. Please wait and try again."] = "Временные неудачи. Подождите и попробуйте еще раз.";
+$a->strings["Introduction failed or was revoked."] = "Краткая информация ошибочна или была отозвана.";
+$a->strings["Unable to set contact photo."] = "Не удается установить фото контакта.";
+$a->strings["%1\$s is now friends with %2\$s"] = "%1\$s и %2\$s теперь друзья";
+$a->strings["No user record found for '%s' "] = "Не найдено записи пользователя для '%s' ";
+$a->strings["Our site encryption key is apparently messed up."] = "Наш ключ шифрования сайта, по-видимому, перепутался.";
+$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Был предоставлен пустой URL сайта ​​или URL не может быть расшифрован нами.";
+$a->strings["Contact record was not found for you on our site."] = "Запись контакта не найдена для вас на нашем сайте.";
+$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "ID, предложенный вашей системой, является дубликатом в нашей системе. Он должен работать, если вы повторите попытку.";
+$a->strings["Unable to set your contact credentials on our system."] = "Не удалось установить ваши учетные данные контакта в нашей системе.";
+$a->strings["Unable to update your contact profile details on our system"] = "Не удается обновить ваши контактные детали профиля в нашей системе";
+$a->strings["Connection accepted at %s"] = "Подключение принято в %s";
+$a->strings["Facebook disabled"] = "Facebook недоступен";
+$a->strings["Updating contacts"] = "Обновление контактов";
+$a->strings["Facebook API key is missing."] = "Отсутствует ключ Facebook API.";
+$a->strings["Facebook Connect"] = "Facebook Connect";
+$a->strings["Install Facebook connector for this account."] = "Установить Facebook Connector для этого аккаунта.";
+$a->strings["Remove Facebook connector"] = "Удалить Facebook Connector";
+$a->strings["Post to Facebook by default"] = "Отправлять на Facebook по умолчанию";
+$a->strings["Link all your Facebook friends and conversations"] = "Привязать все ваши разговоры и друзей на Facebook";
+$a->strings["Warning: Your Facebook privacy settings can not be imported."] = "Внимание: Ваши установки безопасности на Facebook не могут быть импортированы.";
+$a->strings["Linked Facebook items <strong>may</strong> be publicly visible, depending on your privacy settings for this website/account."] = "";
+$a->strings["Facebook"] = "Facebook";
+$a->strings["Facebook Connector Settings"] = "Настройки Facebook Connector";
+$a->strings["Post to Facebook"] = "Отправить на Facebook";
+$a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = "Отправка на Facebook отменена из-за конфликта разрешений доступа разных сетей.";
+$a->strings["Image: "] = "Изображение: ";
+$a->strings["View on Friendika"] = "Просмотреть на Friendika";
+$a->strings["Facebook post failed. Queued for retry."] = "";
+$a->strings["Generate new key"] = "Сгенерировать новый ключ";
+$a->strings["Widgets key"] = "";
+$a->strings["Widgets available"] = "";
+$a->strings["Connect on Friendika!"] = "Подключись на Friendika!";
+$a->strings["Three Dimensional Tic-Tac-Toe"] = "Трехмерные крестики-нолики";
+$a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe";
+$a->strings["New game"] = "Новая игра";
+$a->strings["New game with handicap"] = "Новая игра с гандикапом";
+$a->strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "Трехмерная игра в крестики-нолики точно такая же, как традиционная игра, за исключением того, что она играется на нескольких уровнях одновременно.";
+$a->strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "В этом случае существуют три уровня. Вы выиграете, поставив три в ряд на любом уровне, а также вверх, вниз и по диагонали на разных уровнях.";
+$a->strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "Игра с гандикапом отключает центральное положение на среднем уровне, потому что игрок, занимающий эту площадь, часто имеет несправедливое преимущество.";
+$a->strings["You go first..."] = "Вы хотите первым...";
+$a->strings["I'm going first this time..."] = "Я буду первым на этот раз...";
+$a->strings["You won!"] = "Вы выиграли!";
+$a->strings["\"Cat\" game!"] = "Игра \"Кошка\"!";
+$a->strings["I won!"] = "Я выиграл!";
+$a->strings["Randplace Settings"] = "Настройки Случайного места";
+$a->strings["Enable Randplace Plugin"] = "Включить плагин Случайное место";
+$a->strings["Upload a file"] = "Загрузить файл";
+$a->strings["Drop files here to upload"] = "Перетащите файлы здесь для загрузки";
+$a->strings["Failed"] = "Ошибка";
+$a->strings["No files were uploaded."] = "Нет загруженных файлов.";
+$a->strings["Uploaded file is empty"] = "Загруженный файл пустой";
+$a->strings["File has an invalid extension, it should be one of "] = "Файл имеет недопустимое расширение, оно должно быть одним из следующих ";
+$a->strings["Upload was cancelled, or server error encountered"] = "Загрузка была отменена, или произошла ошибка сервера";
+$a->strings["Impressum"] = "";
+$a->strings["Site Owner"] = "";
+$a->strings["Email Address"] = "";
+$a->strings["Postal Address"] = "";
+$a->strings["The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon."] = "";
+$a->strings["Site Owners Profile"] = "";
+$a->strings["Notes"] = "";
+$a->strings["OEmbed settings updated"] = "OEmbed настройки обновлены";
+$a->strings["Use OEmbed for YouTube videos"] = "";
+$a->strings["URL to embed:"] = "URL для встраивания:";
+$a->strings["Post to StatusNet"] = "Отправить на StatusNet";
+$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Пожалуйста, обратитесь к администратору сайта. <br /> Предложенный URL API недействителен.";
+$a->strings["We could not contact the StatusNet API with the Path you entered."] = "Мы не смогли связаться с API StatusNet с маршрутом, который вы ввели.";
+$a->strings["StatusNet settings updated."] = "Настройки StatusNet обновлены.";
+$a->strings["StatusNet Posting Settings"] = "Настройка отправки сообщений на StatusNet";
+$a->strings["Globally Available StatusNet OAuthKeys"] = "Глобально доступные StatusNet OAuthKeys";
+$a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance (see below)."] = "Есть предварительно сконфигурированные OAuth пары ключей для некоторых серверов StatusNet. Если вы используете один из них, пожалуйста, используйте эти учетные данные. Если нет, не стесняйтесь подключиться к любому другому экземпляру StatusNet (см. ниже).";
+$a->strings["Provide your own OAuth Credentials"] = "Укажите свои собственные полномочия OAuth";
+$a->strings["No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation."] = "Не найдено пары ключей для StatusNet. Зарегистрируйте ваш аккаунт Friendika счета как для клиент настольного ПК на вашем аккаунте StatusNet, скопируйте пару ключей покупателя здесь и введите корень базы API. <br /> Перед тем, как вы зарегистрируете свою собственную пару ключей OAuth, спросите администратора, может уже есть пара ключей для этой инсталляции Friendika в вашей избранной установке StatusNet.";
+$a->strings["OAuth Consumer Key"] = "OAuth Consumer Key";
+$a->strings["OAuth Consumer Secret"] = "OAuth Consumer Secret";
+$a->strings["Base API Path (remember the trailing /)"] = "Путь базы API (помните о слеше /)";
+$a->strings["To connect to your StatusNet account click the button below to get a security code from StatusNet which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to StatusNet."] = "Чтобы подключиться к StatusNet аккаунту, нажмите на кнопку ниже, чтобы получить код безопасности от StatusNet, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши <strong>публичные сообщения</strong> будут отправляться на StatusNet.";
+$a->strings["Log in with StatusNet"] = "Войдите со StatusNet";
+$a->strings["Copy the security code from StatusNet here"] = "Скопируйте код безопасности от StatusNet здесь";
+$a->strings["Cancel Connection Process"] = "Отмена процесса подключения";
+$a->strings["Current StatusNet API is"] = "Текущим StatusNet API является";
+$a->strings["Cancel StatusNet Connection"] = "Отмена StatusNet подключения";
+$a->strings["Currently connected to: "] = "В настоящее время соединены с: ";
+$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "";
+$a->strings["Allow posting to StatusNet"] = "Разрешить отправку на StatusNet";
+$a->strings["Send public postings to StatusNet by default"] = "Отправлять публичные сообщения на StatusNet по умолчанию";
+$a->strings["Clear OAuth configuration"] = "Очистить конфигурацию OAuth";
+$a->strings["API URL"] = "API URL";
+$a->strings["Consumer Secret"] = "Consumer Secret";
+$a->strings["Consumer Key"] = "Consumer Key";
+$a->strings["Piwik Base URL"] = "";
+$a->strings["Site ID"] = "";
+$a->strings["Show opt-out cookie link?"] = "";
+$a->strings["Post to Twitter"] = "Отправить в Твиттер";
+$a->strings["Twitter settings updated."] = "";
+$a->strings["Twitter Posting Settings"] = "Настройка отправки сообщений в Твиттер";
+$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Не найдено пары потребительских ключей для Твиттера. Пожалуйста, обратитесь к администратору сайта.";
+$a->strings["At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "В этой установке Friendika плагин Твиттер был включен, но вы еще не подключили ваш аккаунт к аккаунту Твиттер. Для этого нажмите на кнопку ниже, чтобы получить PIN-код из Твиттера, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши <strong>публичные сообщения</strong> будут размещены на Твиттере.";
+$a->strings["Log in with Twitter"] = "Войдите с Твиттером";
+$a->strings["Copy the PIN from Twitter here"] = "Скопируйте PIN с Твиттера здесь";
+$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "";
+$a->strings["Allow posting to Twitter"] = "";
+$a->strings["Send public postings to Twitter by default"] = "";
+$a->strings["Consumer key"] = "";
+$a->strings["Consumer secret"] = "";
+$a->strings["Gender:"] = "Пол:";
+$a->strings["Birthday:"] = "День рождения:";
+$a->strings["j F, Y"] = "j F, Y";
+$a->strings["j F"] = "j F";
+$a->strings["Age:"] = "Возраст:";
+$a->strings["<span class=\"heart\">&hearts;</span> Status:"] = "<span class=\"heart\">&hearts;</span> Статус:";
+$a->strings["Homepage:"] = "Домашняя страничка:";
+$a->strings["Religion:"] = "Религия:";
+$a->strings["About:"] = "Немного о себе:";
+$a->strings["Hobbies/Interests:"] = "Хобби / Интересы:";
+$a->strings["Contact information and Social Networks:"] = "Контактная информация и социальные сети:";
+$a->strings["Musical interests:"] = "Музыкальные интересы:";
+$a->strings["Books, literature:"] = "Книги, литература:";
+$a->strings["Television:"] = "Телевидение:";
+$a->strings["Film/dance/culture/entertainment:"] = "Кино / Танцы / Культура / Развлечения:";
+$a->strings["Love/Romance:"] = "Любовь / Романтика:";
+$a->strings["Work/employment:"] = "Работа / Занятость:";
+$a->strings["School/education:"] = "Школа / Образование:";
+$a->strings["Unknown | Not categorised"] = "Неизвестно | Не определено";
+$a->strings["Block immediately"] = "Блокировать немедленно";
+$a->strings["Shady, spammer, self-marketer"] = "Тролль, спаммер, рассылает рекламу";
+$a->strings["Known to me, but no opinion"] = "Известные мне, но нет определенного мнения";
+$a->strings["OK, probably harmless"] = "Хорошо, наверное, безвредные";
+$a->strings["Reputable, has my trust"] = "Уважаемые, есть мое доверие";
+$a->strings["Frequently"] = "Часто";
+$a->strings["Hourly"] = "Раз в час";
+$a->strings["Twice daily"] = "Два раза в день";
+$a->strings["Daily"] = "Ежедневно";
+$a->strings["Weekly"] = "Еженедельно";
+$a->strings["Monthly"] = "Ежемесячно";
+$a->strings["Male"] = "Мужчина";
+$a->strings["Female"] = "Женщина";
+$a->strings["Currently Male"] = "В настоящее время мужчина";
+$a->strings["Currently Female"] = "В настоящее время женщина";
+$a->strings["Mostly Male"] = "В основном мужчина";
+$a->strings["Mostly Female"] = "В основном женщина";
+$a->strings["Transgender"] = "Транссексуал";
+$a->strings["Intersex"] = "Интерсексуал";
+$a->strings["Transsexual"] = "Транссексуал";
+$a->strings["Hermaphrodite"] = "Гермафродит";
+$a->strings["Neuter"] = "Средний род";
+$a->strings["Non-specific"] = "Не определен";
+$a->strings["Other"] = "Другой";
+$a->strings["Undecided"] = "Не решено";
+$a->strings["Males"] = "Мужчины";
+$a->strings["Females"] = "Женщины";
+$a->strings["Gay"] = "Гей";
+$a->strings["Lesbian"] = "Лесбиянка";
+$a->strings["No Preference"] = "Без предпочтений";
+$a->strings["Bisexual"] = "Бисексуал";
+$a->strings["Autosexual"] = "Автосексуал";
+$a->strings["Abstinent"] = "Воздержанный";
+$a->strings["Virgin"] = "Девственница";
+$a->strings["Deviant"] = "Девиант";
+$a->strings["Fetish"] = "Фетиш";
+$a->strings["Oodles"] = "Групповой";
+$a->strings["Nonsexual"] = "Нет интереса к сексу";
+$a->strings["Single"] = "Без пары";
+$a->strings["Lonely"] = "Пока никого нет";
+$a->strings["Available"] = "Ищу спутника";
+$a->strings["Unavailable"] = "Не ищу никого";
+$a->strings["Dating"] = "Для знакомства";
+$a->strings["Unfaithful"] = "Изменяю супругу";
+$a->strings["Sex Addict"] = "Люблю секс";
+$a->strings["Friends"] = "Друзья";
+$a->strings["Friends/Benefits"] = "Друзья / Предпочтения";
+$a->strings["Casual"] = "Случайные связи";
+$a->strings["Engaged"] = "Есть спутник";
+$a->strings["Married"] = "Женат / Замужем";
+$a->strings["Partners"] = "Партнеры";
+$a->strings["Cohabiting"] = "Сожительствую с человеком";
+$a->strings["Happy"] = "Счастлив/а/";
+$a->strings["Not Looking"] = "Не ищу";
+$a->strings["Swinger"] = "Свинг";
+$a->strings["Betrayed"] = "Преданный";
+$a->strings["Separated"] = "Разделенный";
+$a->strings["Unstable"] = "Нестабильный";
+$a->strings["Divorced"] = "Разведенный";
+$a->strings["Widowed"] = "Овдовевший";
+$a->strings["Uncertain"] = "Неопределенный";
+$a->strings["Complicated"] = "Сложный";
+$a->strings["Don't care"] = "Не беспокоить";
+$a->strings["Ask me"] = "Спросите меня";
+$a->strings["l F d, Y \\@ g:i A"] = "";
+$a->strings["Starts:"] = "";
+$a->strings["Finishes:"] = "";
+$a->strings["prev"] = "пред.";
+$a->strings["first"] = "первый";
+$a->strings["last"] = "последний";
+$a->strings["next"] = "след.";
+$a->strings["No contacts"] = "Нет контактов";
+$a->strings["%d Contact"] = array(
+       0 => "%d контакт",
+       1 => "%d контактов",
+       2 => "%d контактов",
+);
+$a->strings["Monday"] = "Понедельник";
+$a->strings["Tuesday"] = "Вторник";
+$a->strings["Wednesday"] = "Среда";
+$a->strings["Thursday"] = "Четверг";
+$a->strings["Friday"] = "Пятница";
+$a->strings["Saturday"] = "Суббота";
+$a->strings["Sunday"] = "Воскресенье";
+$a->strings["January"] = "Январь";
+$a->strings["February"] = "Февраль";
+$a->strings["March"] = "Март";
+$a->strings["April"] = "Апрель";
+$a->strings["May"] = "Май";
+$a->strings["June"] = "Июнь";
+$a->strings["July"] = "Июль";
+$a->strings["August"] = "Август";
+$a->strings["September"] = "Сентябрь";
+$a->strings["October"] = "Октябрь";
+$a->strings["November"] = "Ноябрь";
+$a->strings["December"] = "Декабрь";
+$a->strings["bytes"] = "байт";
+$a->strings["Select an alternate language"] = "";
+$a->strings["Sharing notification from Diaspora network"] = "Делиться уведомлениями из сети Diaspora";
+$a->strings["Embedding disabled"] = "Встраивание отключено";
+$a->strings["Create a new group"] = "Создать новую группу";
+$a->strings["Everybody"] = "Все";
+$a->strings["Logout"] = "Выход";
+$a->strings["End this session"] = "";
+$a->strings["Login"] = "Вход";
+$a->strings["Sign in"] = "";
+$a->strings["Home"] = "Главная";
+$a->strings["Home Page"] = "";
+$a->strings["Create an account"] = "";
+$a->strings["Help and documentation"] = "";
+$a->strings["Apps"] = "Приложения";
+$a->strings["Addon applications, utilities, games"] = "";
+$a->strings["Search site content"] = "";
+$a->strings["Conversations on this site"] = "";
+$a->strings["Directory"] = "Каталог";
+$a->strings["People directory"] = "";
+$a->strings["Network"] = "Сеть";
+$a->strings["Conversations from your friends"] = "";
+$a->strings["Your posts and conversations"] = "";
+$a->strings["Notifications"] = "Уведомления";
+$a->strings["Friend requests"] = "";
+$a->strings["Private mail"] = "";
+$a->strings["Manage"] = "Управлять";
+$a->strings["Manage other pages"] = "";
+$a->strings["Manage/edit profiles"] = "";
+$a->strings["Manage/edit friends and contacts"] = "";
+$a->strings["Admin"] = "";
+$a->strings["Site setup and configuration"] = "";
+$a->strings["Logged out."] = "Выход из системы.";
+$a->strings["Miscellaneous"] = "Разное";
+$a->strings["year"] = "год";
+$a->strings["month"] = "месяц";
+$a->strings["day"] = "день";
+$a->strings["never"] = "";
+$a->strings["less than a second ago"] = "менее секунды назад";
+$a->strings["years"] = "лет";
+$a->strings["months"] = "месяцев";
+$a->strings["week"] = "неделя";
+$a->strings["weeks"] = "недель";
+$a->strings["days"] = "дней";
+$a->strings["hour"] = "час";
+$a->strings["hours"] = "часов";
+$a->strings["minute"] = "минута";
+$a->strings["minutes"] = "минут";
+$a->strings["second"] = "секунда";
+$a->strings["seconds"] = "секунд";
+$a->strings[" ago"] = " назад";
+$a->strings["From: "] = "От: ";
+$a->strings["Image/photo"] = "Изображение / Фото";
+$a->strings["Cannot locate DNS info for database server '%s'"] = "Не могу найти информацию для DNS-сервера базы данных '%s'";
+$a->strings["Visible to everybody"] = "Видимо всем";
+$a->strings["show"] = "";
+$a->strings["don't show"] = "";
+$a->strings["(no subject)"] = "(без темы)";
+$a->strings["You have a new follower at "] = "У вас есть новый фолловер на ";
+$a->strings["event"] = "";
+$a->strings["View %s's profile"] = "Просмотреть профиль %s";
+$a->strings["%s from %s"] = "%s от %s";
+$a->strings["View in context"] = "Смотреть в контексте";
+$a->strings["See more posts like this"] = "Просмотреть другие сообщения, похожие на это";
+$a->strings["See all %d comments"] = "Просмотреть все %d комментариев";
+$a->strings["Select"] = "Выберите";
+$a->strings["toggle star status"] = "переключить статус";
+$a->strings["to"] = "к";
+$a->strings["Wall-to-Wall"] = "Стена-на-Стену";
+$a->strings["via Wall-To-Wall:"] = "через Стена-на-Стену:";
+$a->strings["Delete Selected Items"] = "Удалить выбранные позиции";
+$a->strings["View status"] = "Просмотреть статус";
+$a->strings["View profile"] = "Просмотреть профиль";
+$a->strings["View photos"] = "Просмотреть фото";
+$a->strings["View recent"] = "Просмотреть последние";
+$a->strings["Send PM"] = "Отправить ЛС";
+$a->strings["%s likes this."] = "%s нравится это.";
+$a->strings["%s doesn't like this."] = "%s не нравится это.";
+$a->strings["<span  %1\$s>%2\$d people</span> like this."] = "<span  %1\$s>%2\$d чел.</span> нравится это.";
+$a->strings["<span  %1\$s>%2\$d people</span> don't like this."] = "<span  %1\$s>%2\$d чел.</span> не нравится это.";
+$a->strings["and"] = "и";
+$a->strings[", and %d other people"] = ", и %d других чел.";
+$a->strings["%s like this."] = "%s нравится это.";
+$a->strings["%s don't like this."] = "%s не нравится это.";
+$a->strings["Visible to <strong>everybody</strong>"] = "Видимое <strong>всем</strong>";
+$a->strings["Please enter a YouTube link:"] = "Пожалуйста, введите ссылку YouTube:";
+$a->strings["Please enter a video(.ogg) link/URL:"] = "Пожалуйста, введите видео (.ogg) ссылку / URL:";
+$a->strings["Please enter an audio(.ogg) link/URL:"] = "Пожалуйста, введите аудио (.ogg) ссылку / URL:";
+$a->strings["Where are you right now?"] = "И где вы сейчас?";
+$a->strings["Enter a title for this item"] = "Введите название для данного элемента";
+$a->strings["Set title"] = "Установить заголовок";
+$a->strings["Delete this item?"] = "Удалить этот элемент?";
+$a->strings["Create a New Account"] = "Создать новый аккаунт";
+$a->strings["Nickname or Email address: "] = "Ник или адрес электронной почты: ";
+$a->strings["Password: "] = "Пароль: ";
+$a->strings["Nickname/Email/OpenID: "] = "Ник / Email / OpenID: ";
+$a->strings["Password (if not OpenID): "] = "Пароль (если не OpenID): ";
+$a->strings["Forgot your password?"] = "Забыли пароль?";
+$a->strings["Connect"] = "Подключиться";
+$a->strings[", "] = ", ";
+$a->strings["Status:"] = "Статус:";
+$a->strings["g A l F d"] = "g A l F d";
+$a->strings["Birthday Reminders"] = "Напоминания о днях рождения";
+$a->strings["Birthdays this week:"] = "Дни рождения на этой неделе:";
+$a->strings["(Adjusted for local time)"] = "(С поправкой на местное время)";
+$a->strings["[today]"] = "[сегодня]";
+$a->strings["Not Found"] = "Не найдено";
+$a->strings["Page not found."] = "Страница не найдена.";
index 72246e68c345bd710b1399a88c5714573115240e..616eaf110eb2126efad8c11a6137e1bcf7d1a23c 100644 (file)
@@ -1,45 +1,71 @@
-<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
-       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
-               <div class="wall-item-info" id="wall-item-info-$id">
-                       <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id" 
-                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
-                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
-                               <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
-                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
-                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
-                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
-                                       <ul>
-                                               $item_photo_menu
-                                       </ul>
-                               </div>
-                       </div>
-                       <div class="wall-item-photo-end"></div> 
-                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
-                               $lock
-                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>
-                       </div>
-               </div>
-               <div class="wall-item-author">
-                               <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
-                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+<div class="wall-item-decor">
+       <span class="icon s22 star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span>
+       {{ if $lock }}<span class="icon s22 lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }} 
+       <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+</div>
+<div class="wall-item-container $indent">
+       <div class="wall-item-item">
+               <div class="wall-item-info">
+                       <div class="wall-item-photo-wrapper"
+                               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                               onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                                       <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" alt="$name" />
+                               </a>
+                               <a href="#" rel="#wall-item-photo-menu-$id" class="fakelink wall-item-photo-menu-button icon s16 menu" id="wall-item-photo-menu-button-$id">menu</a>
+                               <ul class="wall-item-menu menu-popup" id="wall-item-photo-menu-$id">
+                               $item_photo_menu
+                               </ul>
                                
-               </div>                  
-               <div class="wall-item-content" id="wall-item-content-$id" >
-                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
-                       <div class="wall-item-title-end"></div>
-                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+                       </div>
+                       <div class="wall-item-location">$location</div> 
                </div>
-               <div class="wall-item-tools" id="wall-item-tools-$id">
-               $drop
+               <div class="wall-item-content">
+                       {{ if $title }}<h2><a href="$plink.href">$title</a></h2>{{ endif }}
+                       $body
                </div>
        </div>
-       <div class="wall-item-wrapper-end"></div>
-
-
-       <div class="wall-item-conv" id="wall-item-conv-$id" >$conv</div>
-
-<div class="wall-item-outside-wrapper-end$indent" ></div>
+       <div class="wall-item-bottom">
+               <div class="wall-item-links">
+                       {{ if $plink }}<a class="icon s16 link" title="$plink.title" href="$plink.href">$plink.title</a>{{ endif }}
+               </div>
+               <div class="wall-item-actions">
+                       <div class="wall-item-actions-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle">$name</span></a> <span class="wall-item-ago">$ago</span>
+                       </div>
+                       
+                       <div class="wall-item-actions-social">
+                       {{ if $star }}
+                               <a href="#" id="star-$id" onclick="dostar($id); return false;"  class="$star.classdo"  title="$star.do">$star.do</a>
+                               <a href="#" id="unstar-$id" onclick="dostar($id); return false;"  class="$star.classundo"  title="$star.undo">$star.undo</a>
+                       {{ endif }}
+                       
+                       {{ if $vote }}
+                               <a href="#" id="like-$id" title="$vote.like.0" onclick="dolike($id,'like'); return false">$vote.like.1</a>
+                               <a href="#" id="dislike-$id" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false">$vote.dislike.1</a>
+                       {{ endif }}
+                                               
+                       {{ if $vote.share }}
+                               <a href="#" id="share-$id" title="$vote.share.0" onclick="jotShare($id); return false">$vote.share.1</a>
+                       {{ endif }}                     
+                       
+                       {{ if $conv }}
+                               <a href='$conv.href' id='context-$id' title='$conv.title'>$conv.title</a>
+                       {{ endif }}
+                       </div>
+                       
+                       <div class="wall-item-actions-tools">
 
+                               {{ if $drop.dropping }}
+                                       <input type="checkbox" title="$drop.select" name="itemselected[]" value="$id" />
+                                       <a href="item/drop/$id" onclick="return confirmDelete();" class="icon delete s16" title="$drop.delete">$drop.delete</a>
+                               {{ endif }}
+                               {{ if $edpost }}
+                                       <a class="icon edit s16" href="$edpost.0" title="$edpost.1"></a>
+                               {{ endif }}
+                       </div>
+                       
+               </div>
+       </div>
 </div>
 
-
index 893fdfbce2287f06a3578c2da33d3686e5e77346..5003ed8ce6f752458401e8701af53e0af36daeb1 100644 (file)
@@ -1,6 +1,6 @@
 
 <div id="profile-tabs-wrapper" >
-       <a href="$account.1" id="profile-tab-status-link" class="profile-tabs" >$account.0</a>
-       <a href="$plugins.1" id="profile-tab-profile-link" class="profile-tabs" >$plugins.0</a>
+       <a href="$account.1" id="profile-tab-status-link" class="profile-tabs button" >$account.0</a>
+       <a href="$plugins.1" id="profile-tab-profile-link" class="profile-tabs button" >$plugins.0</a>
 <div id="profile-tabs-end"></div>
 </div>
index 46c9277546197faf68d8955016355664613e0477..dae5518494b40f10c73b2a10278bf07357b67fbb 100644 (file)
@@ -4,7 +4,7 @@
 <p class="intro-desc">$str_notifytype $notify_type</p>
 <div class="intro-madeby">$madeby</div>
 <div class="intro-fullname" >$fullname</div>
-<a class="intro-url-link" href="$url" ><img class="intro-photo" src="$photo" width="175" height=175" title="$fullname" alt="$fullname" /></a>
+<a class="intro-url-link" href="$url" ><img class="intro-photo lframe" src="$photo" width="175" height=175" title="$fullname" alt="$fullname" /></a>
 <div class="intro-note" >$note</div>
 <div class="intro-wrapper-end"></div>
 <form class="intro-form" action="notifications/$intro_id" method="post">
diff --git a/view/theme/clean/theme.php b/view/theme/clean/theme.php
new file mode 100644 (file)
index 0000000..47b43cf
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'loozah',
+);
diff --git a/view/theme/darkbubble/dbicons.png b/view/theme/darkbubble/dbicons.png
new file mode 100644 (file)
index 0000000..696ef77
Binary files /dev/null and b/view/theme/darkbubble/dbicons.png differ
diff --git a/view/theme/darkbubble/experimental b/view/theme/darkbubble/experimental
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/view/theme/darkbubble/style.css b/view/theme/darkbubble/style.css
new file mode 100644 (file)
index 0000000..9336dc0
--- /dev/null
@@ -0,0 +1,33 @@
+@import url('../testbubble/style.css');
+
+.icon {
+       background-image: url('dbicons.png');
+}
+
+body {
+       background: #000000;
+       color: #dddddd;
+}
+
+.info-message {
+       color: #444444;
+}
+
+#id_openid_url {
+       background: url(../testbubble/login-bg.gif) no-repeat #ffffff;
+       background-position: 0 50%;
+       padding-left: 18px;
+       width: 385px;
+       color: #000000;
+}
+
+.vevent, .eventcal {
+       color: #000000;
+}
+.event-list-date {
+       color: #DDDDDD;
+}
+
+.fortunate {
+       color: #8888FF !important;
+}
\ No newline at end of file
diff --git a/view/theme/darkbubble/theme.php b/view/theme/darkbubble/theme.php
new file mode 100644 (file)
index 0000000..326c98b
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'testbubble',
+);
diff --git a/view/theme/darkness/theme.php b/view/theme/darkness/theme.php
new file mode 100644 (file)
index 0000000..47b43cf
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'loozah',
+);
diff --git a/view/theme/darkzero/theme.php b/view/theme/darkzero/theme.php
new file mode 100644 (file)
index 0000000..338f40c
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'duepuntozero',
+);
index 1555950561a56e94d0cd30105949c16a4fc085c9..79b10fd40c25e6a0b219f437ada690638bce7e1a 100644 (file)
@@ -90,7 +90,7 @@ function initEditor(cb) {
     }
 } // initEditor
 </script>
-<script type="text/javascript" src="include/ajaxupload.js" ></script>
+<script type="text/javascript" src="js/ajaxupload.js" ></script>
 <script>
     var ispublic = '$ispublic';
        $(document).ready(function() {
@@ -163,7 +163,7 @@ function initEditor(cb) {
                if(reply && reply.length) {
                        reply = bin2hex(reply);
                        $('#profile-rotator').show();
-                       $.get('parse_url?url=' + reply, function(data) {
+                       $.get('parse_url?binurl=' + reply, function(data) {
                                tinyMCE.execCommand('mceInsertRawHTML',false,data);
                                $('#profile-rotator').hide();
                        });
index d5e81a925ddd2ff5dbae72d4f9bdc8683143835d..f6bf91ffa26ff008730069c28b2f4d0062ecba7d 100644 (file)
@@ -9,7 +9,7 @@
        </div>
 
        <form id="profile-jot-form" action="$action" method="post" >
-               <input type="hidden" name="type" value="wall" />
+               <input type="hidden" name="type" value="$ptyp" />
                <input type="hidden" name="profile_uid" value="$profile_uid" />
                <input type="hidden" name="return" value="$return_path" />
                <input type="hidden" name="location" id="jot-location" value="$defloc" />
index d1a396f9981d4438eca0144eb9c6a13a85e26acf..f84f4929217c7d234564fc89dae30c37150ca563 100644 (file)
@@ -1,56 +1,57 @@
-$langselector
+<nav>
+  $langselector
 
-<span id="banner">$banner</span>
+  <span id="banner">$banner</span>
 
-<a id="nav-help-link" class="nav-link $nav.help.2" href="$nav.help.0" title="$nav.help.1">$nav.help.1</a>
-{{ if $nav.login }}<a id="nav-login-link" class="nav-link $nav.login.2" href="$nav.login.0" title="$nav.login.1">$nav.login.1</a> {{ endif }}
-<a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0" title="$nav.search.1">$nav.search.1</a>
-<a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0" title="$nav.directory.1">$nav.directory.1</a>
+  <a id="nav-help-link" class="nav-link $nav.help.2" href="$nav.help.0" title="$nav.help.1">$nav.help.1</a>
+  {{ if $nav.login }}<a id="nav-login-link" class="nav-link $nav.login.2" href="$nav.login.0" title="$nav.login.1">$nav.login.1</a> {{ endif }}
+  <a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0" title="$nav.search.1">$nav.search.1</a>
+  <a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0" title="$nav.directory.1">$nav.directory.1</a>
 
-<div id="user-menu" >
-       <a id="user-menu-label" onclick="openClose('user-menu-popup'); return false" href="$nav.home.0">$sitelocation</a>
-    
-    <ul id="user-menu-popup" 
-         onmouseover="if (typeof tmenu != 'undefined') clearTimeout(tmenu); openMenu('user-menu-popup')" 
-         onmouseout="tmenu=setTimeout('closeMenu(\'user-menu-popup\');',200)">
+  <div id="user-menu" >
+         <a id="user-menu-label" onclick="openClose('user-menu-popup'); return false" href="$nav.home.0">$sitelocation</a>
+      
+      <ul id="user-menu-popup" 
+           onmouseover="if (typeof tmenu != 'undefined') clearTimeout(tmenu); openMenu('user-menu-popup')" 
+           onmouseout="tmenu=setTimeout('closeMenu(\'user-menu-popup\');',200)">
 
 
-               {{ if $nav.register }}<li><a id="nav-register-link" class="nav-commlink $nav.register.2" href="$nav.register.0"  title="$nav.register.1">$nav.register.1</a></li>{{ endif }}
-           
-           {{ if $nav.home }}<li><a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0">$nav.home.1</a></li>{{ endif }}
+                 {{ if $nav.register }}<li><a id="nav-register-link" class="nav-commlink $nav.register.2" href="$nav.register.0"  title="$nav.register.1">$nav.register.1</a></li>{{ endif }}
+             
+             {{ if $nav.home }}<li><a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0">$nav.home.1</a></li>{{ endif }}
        
-           {{ if $nav.network }}<li><a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0">$nav.network.1</a></li>{{ endif }}
+             {{ if $nav.network }}<li><a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0">$nav.network.1</a></li>{{ endif }}
        
-            {{ if $nav.community }}
-            <li><a id="nav-community-link" class="nav-commlink $nav.community.2" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a></li>
-            {{ endif }}
+              {{ if $nav.community }}
+              <li><a id="nav-community-link" class="nav-commlink $nav.community.2" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a></li>
+              {{ endif }}
        
-           {{ if $nav.notifications }}<li><a id="nav-notify-link" class="nav-commlink $nav.notifications.2" href="$nav.notifications.0">$nav.notifications.1</a></li>{{ endif }}
-           {{ if $nav.messages }}<li><a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0">$nav.messages.1</a></li>{{ endif }}
-           {{ if $nav.contacts }}<li><a id="nav-contacts-link" class="nav-commlink $nav.contacts.2" href="$nav.contacts.0">$nav.contacts.1</a></li>{{ endif }}
+             {{ if $nav.notifications }}<li><a id="nav-notify-link" class="nav-commlink $nav.notifications.2" href="$nav.notifications.0">$nav.notifications.1</a></li>{{ endif }}
+             {{ if $nav.messages }}<li><a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0">$nav.messages.1</a></li>{{ endif }}
+             {{ if $nav.contacts }}<li><a id="nav-contacts-link" class="nav-commlink $nav.contacts.2" href="$nav.contacts.0">$nav.contacts.1</a></li>{{ endif }}
        
-           {{ if $nav.profiles }}<li><a id="nav-profiles-link" class="nav-commlink nav-sep $nav.profiles.2" href="$nav.profiles.0">$nav.profiles.1</a></li>{{ endif }}
-           {{ if $nav.settings }}<li><a id="nav-settings-link" class="nav-commlink $nav.settings.2" href="$nav.settings.0">$nav.settings.1</a></li>{{ endif }}
-           
-           {{ if $nav.manage }}<li><a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0">$nav.manage.1</a></li>{{ endif }}
+             {{ if $nav.profiles }}<li><a id="nav-profiles-link" class="nav-commlink nav-sep $nav.profiles.2" href="$nav.profiles.0">$nav.profiles.1</a></li>{{ endif }}
+             {{ if $nav.settings }}<li><a id="nav-settings-link" class="nav-commlink $nav.settings.2" href="$nav.settings.0">$nav.settings.1</a></li>{{ endif }}
+             
+             {{ if $nav.manage }}<li><a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0">$nav.manage.1</a></li>{{ endif }}
        
-               {{ if $nav.admin }}<li><a id="nav-admin-link" class="nav-commlink $nav.admin.2" href="$nav.admin.0">$nav.admin.1</a></li>{{ endif }}
+                 {{ if $nav.admin }}<li><a id="nav-admin-link" class="nav-commlink $nav.admin.2" href="$nav.admin.0">$nav.admin.1</a></li>{{ endif }}
        
 
-           {{ if $nav.logout }}<li><a id="nav-logout-link" class="nav-commlink nav-sep $nav.logout.2" href="$nav.logout.0">$nav.logout.1</a></li> {{ endif }}
-    </ul>
+             {{ if $nav.logout }}<li><a id="nav-logout-link" class="nav-commlink nav-sep $nav.logout.2" href="$nav.logout.0">$nav.logout.1</a></li> {{ endif }}
+      </ul>
 
-       <div id="notifications">
-    {{ if $nav.network }}<a id="net-update" class="nav-ajax-update" href="$nav.network.0" title="$nav.network.1"></a>{{ endif }}
-    {{ if $nav.home }}<a id="home-update" class="nav-ajax-update" href="$nav.home.0" title="$nav.home.1"></a>{{ endif }}
-    {{ if $nav.notifications }}<a id="notify-update" class="nav-ajax-update" href="$nav.notifications.0" title="$nav.notifications.1"></a>{{ endif }}
-    {{ if $nav.messages }}<a id="mail-update" class="nav-ajax-update" href="$nav.messages.0" title="$nav.messages.1"></a>{{ endif }}
-       </div>
+         <div id="notifications">
+      {{ if $nav.network }}<a id="net-update" class="nav-ajax-update" href="$nav.network.0" title="$nav.network.1"></a>{{ endif }}
+      {{ if $nav.home }}<a id="home-update" class="nav-ajax-update" href="$nav.home.0" title="$nav.home.1"></a>{{ endif }}
+      {{ if $nav.notifications }}<a id="notify-update" class="nav-ajax-update" href="$nav.notifications.0" title="$nav.notifications.1"></a>{{ endif }}
+      {{ if $nav.messages }}<a id="mail-update" class="nav-ajax-update" href="$nav.messages.0" title="$nav.messages.1"></a>{{ endif }}
+         </div>
 
-</div>
+  </div>
 
 
-{{ if $nav.apps }}<a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0" title="$nav.apps.1">$nav.apps.1</a>{{ endif }}
-
+  {{ if $nav.apps }}<a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0" title="$nav.apps.1">$nav.apps.1</a>{{ endif }}
+</nav>
 
 
diff --git a/view/theme/dispy/photo-menu.jpg b/view/theme/dispy/photo-menu.jpg
new file mode 100644 (file)
index 0000000..fde5eb5
Binary files /dev/null and b/view/theme/dispy/photo-menu.jpg differ
diff --git a/view/theme/dispy/profile_vcard.tpl b/view/theme/dispy/profile_vcard.tpl
new file mode 100644 (file)
index 0000000..b3f5cc5
--- /dev/null
@@ -0,0 +1,47 @@
+<div class="vcard">
+
+       <div class="fn label">$profile.name</div>
+       
+                               
+       
+       {{ if $pdesc }}<div class="title">$profile.pdesc</div>{{ endif }}
+       <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="$profile.photo" alt="$profile.name"></div>
+
+
+
+       {{ if $location }}
+               <dl class="location"><dt class="location-label">$location</dt> 
+               <dd class="adr">
+                       {{ if $profile.address }}<div class="street-address">$profile.address</div>{{ endif }}
+                       <span class="city-state-zip">
+                               <span class="locality">$profile.locality</span>{{ if $profile.locality }}, {{ endif }}
+                               <span class="region">$profile.region</span>
+                               <span class="postal-code">$profile.postal-code</span>
+                       </span>
+                       {{ if $profile.country-name }}<span class="country-name">$profile.country-name</span>{{ endif }}
+               </dd>
+               </dl>
+       {{ endif }}
+
+       {{ if $gender }}<dl class="mf"><dt class="gender-label">$gender</dt> <dd class="x-gender">$profile.gender</dd></dl>{{ endif }}
+       
+       {{ if $profile.pubkey }}<div class="key" style="display:none;">$profile.pubkey</div>{{ endif }}
+
+       {{ if $marital }}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>$marital</dt><dd class="marital-text">$profile.marital</dd></dl>{{ endif }}
+
+       {{ if $homepage }}<dl class="homepage"><dt class="homepage-label">$homepage</dt><dd class="homepage-url"><a href="$profile.homepage" target="external-link">$profile.homepage</a></dd></dl>{{ endif }}
+
+       {{ inc diaspora_vcard.tpl }}{{ endinc }}
+       
+       <div id="profile-extra-links">
+               <ul>
+                       {{ if $connect }}
+                               <li><a id="dfrn-request-link" href="dfrn_request/$profile.nickname">$connect</a></li>
+                       {{ endif }}
+               </ul>
+       </div>
+</div>
+
+$contact_block
+
+
index 39c74ef81784da070e36ca86f1d30fd1317a3a14..3d841ab0809cb35378418663811e6fa13ed326af 100644 (file)
                        <div class="wall-item-photo-end"></div> 
                        <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>
                </div>
-               <div class="wall-item-lock-wrapper">$lock</div>
+               <div class="wall-item-lock-wrapper">
+                       {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                       {{ else }}<div class="wall-item-lock"></div>{{ endif }} 
+               </div>
                <div class="wall-item-tools" id="wall-item-tools-$id">
-               $drop
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
                </div>
                <div class="wall-item-content" id="wall-item-content-$id" >
                        <div class="wall-item-title" id="wall-item-title-$id">$title</div>
@@ -36,5 +43,9 @@
 </div>
 
 <div class="wall-item-outside-wrapper-end$indent" ></div>
-       <div class="wall-item-conv" id="wall-item-conv-$id" >$conv</div>
+       <div class="wall-item-conv" id="wall-item-conv-$id" >
+       {{ if $conv }}
+               <a href='$conv.href' id='context-$id' title='$conv.title'>$conv.title</a>
+       {{ endif }}
+       </div>
 
index e9d11d601f81c4f326cdb0280c718d3bdb09089d..8dc017c9cface26d68f48a838ec9cd54aa9a44d2 100644 (file)
@@ -688,12 +688,17 @@ div[id$="wrapper"] br { clear: left; }
  */
 
 .view-contact-wrapper,
-.contact-entry-wrapper { float: left; margin-right: 20px; margin-bottom: 20px; position: relative;}
+.contact-entry-wrapper { float: left; margin-right: 20px; margin-bottom: 20px; width: 120px; height: 120px; position: relative;}
 .contact-entry-direction-wrapper {position: absolute; top: 20px;}
 .contact-entry-edit-links { position: absolute; top: 60px; }
 .contact-entry-photo {
        margin-left:20px;
 }
+.contact-entry-name { width: 120px; overflow: hidden; }
+.contact-entry-photo {
+       position: relative;
+}
+
 .contact-entry-edit-links .icon {      
        border: 1px solid #babdb6;
     -webkit-border-radius: 3px;
@@ -718,7 +723,36 @@ div[id$="wrapper"] br { clear: left; }
 #contact-edit-last-update-text { margin-bottom: 15px; }
 #contact-edit-last-updated { font-weight: bold; }
 #contact-edit-poll-text { display: inline; }
-#contact-edit-end { clear: both; }
+#contact-edit-end { clear: both; margin-bottom: 65px;}
+
+.contact-photo-menu-button {
+       position: absolute;
+       background-image: url("photo-menu.jpg");
+       background-position: top left; 
+       background-repeat: no-repeat;
+       margin: 0px; padding: 0px;
+       width: 16px;
+       height: 16px;
+       top: 64px; left:0px;
+       overflow: hidden;
+       text-indent: 40px;
+       display: none;
+       
+}
+.contact-photo-menu {
+       width: auto;
+       border: 2px solid #444444;
+       background: #FFFFFF;
+       position: absolute;
+       left: 0px; top: 90px;
+       display: none;
+       z-index: 10000;
+}
+.contact-photo-menu ul { margin:0px; padding: 0px; list-style: none }
+.contact-photo-menu li a { display: block; padding: 2px; }
+.contact-photo-menu li a:hover { color: #FFFFFF; background: #3465A4; text-decoration: none; }
+
+
 
 /**
  *     register, settings & profile forms
@@ -1177,7 +1211,7 @@ footer { display: block; margin: 50px 20%; clear: both; }
        float: left;
        margin: 4px;
 }
-.acl-list-item p { font-size: 10px; margin: 0px; padding: 2px 0px 1px; }
+.acl-list-item p { height: 12px; font-size: 10px; margin: 0px; padding: 2px 0px 1px; overflow: hidden;}
 .acl-list-item a { 
        font-size: 8px;
        display: block;
index 4b8dd571b2076b0cdd21f616054e9a394fbd9d6d..f555ed8132fd201b1bf0f2852bbf7aa193bcfb7e 100644 (file)
                        <div class="wall-item-photo-end"></div>
                        <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>                               
                </div>
-               <div class="wall-item-lock-wrapper">$lock</div>
+               <div class="wall-item-lock-wrapper">
+                       {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                       {{ else }}<div class="wall-item-lock"></div>{{ endif }}
+               </div>
                <div class="wall-item-tools" id="wall-item-tools-$id">
-               $vote
-               $plink
-               $edpost
-               $drop
+                       {{ if $star }}
+                               <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>'
+                       {{ endif }}
+               
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               
                </div>
                <div class="wall-item-content" id="wall-item-content-$id" >
                        <div class="wall-item-title" id="wall-item-title-$id">$title</div>
index 4fe677ab4d3678c7554083c3f351381712f0c9b7..9e6ea40a1805bc0f4a97686a217f97c4b4363aeb 100644 (file)
                        <div class="wall-item-photo-end"></div>
                        <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>                               
                </div>
-               <div class="wall-item-lock-wrapper">$lock</div>
+               <div class="wall-item-lock-wrapper">
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }}
+               </div>
                <div class="wall-item-tools" id="wall-item-tools-$id">
-               $vote
-               $plink
-               $edpost
-               $drop
+                       {{ if $star }}
+                               <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>'
+                       {{ endif }}
+               
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+
                </div>
                <div class="wall-item-content" id="wall-item-content-$id" >
                        <div class="wall-item-title" id="wall-item-title-$id">$title</div>
diff --git a/view/theme/duepuntozero/nav.tpl b/view/theme/duepuntozero/nav.tpl
new file mode 100644 (file)
index 0000000..efc95bd
--- /dev/null
@@ -0,0 +1,51 @@
+<nav>
+       $langselector
+
+       <div id="site-location">$sitelocation</div>
+
+       {{ if $nav.logout }}<a id="nav-logout-link" class="nav-link $nav.logout.2" href="$nav.logout.0" title="$nav.logout.3" >$nav.logout.1</a> {{ endif }}
+       {{ if $nav.login }}<a id="nav-login-link" class="nav-login-link $nav.login.2" href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a> {{ endif }}
+
+       <span id="nav-link-wrapper" >
+
+       {{ if $nav.register }}<a id="nav-register-link" class="nav-commlink $nav.register.2 $sel.register" href="$nav.register.0" title="$nav.register.3" >$nav.register.1</a>{{ endif }}
+               
+       <a id="nav-help-link" class="nav-link $nav.help.2" target="friendika-help" href="$nav.help.0" title="$nav.help.3" >$nav.help.1</a>
+               
+       {{ if $nav.apps }}<a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0" title="$nav.apps.3" >$nav.apps.1</a>{{ endif }}
+
+       <a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0" title="$nav.search.3" >$nav.search.1</a>
+       <a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0" title="$nav.directory.3" >$nav.directory.1</a>
+
+       {{ if $nav.admin }}<a id="nav-admin-link" class="nav-link $nav.admin.2" href="$nav.admin.0" title="$nav.admin.3" >$nav.admin.1</a>{{ endif }}
+
+       {{ if $nav.network }}
+       <a id="nav-network-link" class="nav-commlink $nav.network.2 $sel.network" href="$nav.network.0" title="$nav.network.3" >$nav.network.1</a>
+       <span id="net-update" class="nav-ajax-left"></span>
+       {{ endif }}
+       {{ if $nav.home }}
+       <a id="nav-home-link" class="nav-commlink $nav.home.2 $sel.home" href="$nav.home.0" title="$nav.home.3" >$nav.home.1</a>
+       <span id="home-update" class="nav-ajax-left"></span>
+       {{ endif }}
+       {{ if $nav.community }}
+       <a id="nav-community-link" class="nav-commlink $nav.community.2 $sel.community" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a>
+       {{ endif }}
+       {{ if $nav.notifications }}
+       <a id="nav-notify-link" class="nav-commlink $nav.notifications.2 $sel.notifications" href="$nav.notifications.0" title="$nav.notifications.3" >$nav.notifications.1</a>
+       <span id="intro-update" class="nav-ajax-left"></span>
+       {{ endif }}
+       {{ if $nav.messages }}
+       <a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0 $sel.messages" title="$nav.messages.3" >$nav.messages.1</a>
+       <span id="mail-update" class="nav-ajax-left"></span>
+       {{ endif }}
+
+       {{ if $nav.manage }}<a id="nav-manage-link" class="nav-commlink $nav.manage.2 $sel.manage" href="$nav.manage.0" title="$nav.manage.3">$nav.manage.1</a>{{ endif }}
+
+       {{ if $nav.settings }}<a id="nav-settings-link" class="nav-link $nav.settings.2" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a>{{ endif }}
+       {{ if $nav.profiles }}<a id="nav-profiles-link" class="nav-link $nav.profiles.2" href="$nav.profiles.0" title="$nav.profiles.3" >$nav.profiles.1</a>{{ endif }}
+
+       {{ if $nav.contacts }}<a id="nav-contacts-link" class="nav-link $nav.contacts.2" href="$nav.contacts.0" title="$nav.contacts.3" >$nav.contacts.1</a>{{ endif }}
+       </span>
+       <span id="nav-end"></span>
+       <span id="banner">$banner</span>
+</nav>
diff --git a/view/theme/duepuntozero/profile_vcard.tpl b/view/theme/duepuntozero/profile_vcard.tpl
new file mode 100644 (file)
index 0000000..b3f5cc5
--- /dev/null
@@ -0,0 +1,47 @@
+<div class="vcard">
+
+       <div class="fn label">$profile.name</div>
+       
+                               
+       
+       {{ if $pdesc }}<div class="title">$profile.pdesc</div>{{ endif }}
+       <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="$profile.photo" alt="$profile.name"></div>
+
+
+
+       {{ if $location }}
+               <dl class="location"><dt class="location-label">$location</dt> 
+               <dd class="adr">
+                       {{ if $profile.address }}<div class="street-address">$profile.address</div>{{ endif }}
+                       <span class="city-state-zip">
+                               <span class="locality">$profile.locality</span>{{ if $profile.locality }}, {{ endif }}
+                               <span class="region">$profile.region</span>
+                               <span class="postal-code">$profile.postal-code</span>
+                       </span>
+                       {{ if $profile.country-name }}<span class="country-name">$profile.country-name</span>{{ endif }}
+               </dd>
+               </dl>
+       {{ endif }}
+
+       {{ if $gender }}<dl class="mf"><dt class="gender-label">$gender</dt> <dd class="x-gender">$profile.gender</dd></dl>{{ endif }}
+       
+       {{ if $profile.pubkey }}<div class="key" style="display:none;">$profile.pubkey</div>{{ endif }}
+
+       {{ if $marital }}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>$marital</dt><dd class="marital-text">$profile.marital</dd></dl>{{ endif }}
+
+       {{ if $homepage }}<dl class="homepage"><dt class="homepage-label">$homepage</dt><dd class="homepage-url"><a href="$profile.homepage" target="external-link">$profile.homepage</a></dd></dl>{{ endif }}
+
+       {{ inc diaspora_vcard.tpl }}{{ endinc }}
+       
+       <div id="profile-extra-links">
+               <ul>
+                       {{ if $connect }}
+                               <li><a id="dfrn-request-link" href="dfrn_request/$profile.nickname">$connect</a></li>
+                       {{ endif }}
+               </ul>
+       </div>
+</div>
+
+$contact_block
+
+
diff --git a/view/theme/duepuntozero/search_item.tpl b/view/theme/duepuntozero/search_item.tpl
new file mode 100644 (file)
index 0000000..b4a1c82
--- /dev/null
@@ -0,0 +1,54 @@
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id" 
+                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                                       <ul>
+                                               $item_photo_menu
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="wall-item-photo-end"></div> 
+                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }} 
+                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>
+                       </div>
+               </div>
+               <div class="wall-item-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+                               
+               </div>                  
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+       </div>
+       <div class="wall-item-wrapper-end"></div>
+
+
+       <div class="wall-item-conv" id="wall-item-conv-$id" >
+       {{ if $conv }}
+                       <a href='$conv.href' id='context-$id' title='$conv.title'>$conv.title</a>
+       {{ endif }}
+       </div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+
+</div>
+
+
index 5943e5061722c07dbb5bdaa8fb55c324d5f86dce..4769da8afcb00f8d93ddc3f8f0f7e0e885effa48 100644 (file)
@@ -146,7 +146,7 @@ nav .nav-link {
 }
 
 
-.nav-selected {
+.nav-commlink.selected {
        background-color: #ffffff;
        border-bottom: 1px solid #ffffff;
        color: #000000 !important;
@@ -219,6 +219,20 @@ section {
        margin-right: 1em;
 }
 
+#tabs-wrapper {
+       height: 27px;
+       background-image: url(head.jpg);
+       background-repeat: repeat-x;    
+       background-position: 0px -20px;
+       border-bottom: 1px solid #babdb6;
+}
+.tabs {
+       display:block;
+       float:left;
+       padding: 0.4em;
+       margin-right: 1em;
+}
+
 
 /* footer */
 footer {
@@ -493,6 +507,11 @@ input#dfrn-url {
        margin-bottom: 30px;
 }
 
+#profile-extra-links {
+       clear: both;
+       margin-top: 10px;
+}
+
 #profile-extra-links ul {
        list-style-type: none;
        padding: 0px;
@@ -743,7 +762,8 @@ input#dfrn-url {
 
 .contact-entry-wrapper {
        float: left;
-       width: 180px;
+       width: 120px;
+       height: 120px;
 }
 
 .contact-entry-direction-icon {
@@ -759,7 +779,9 @@ input#dfrn-url {
 }
 .contact-entry-name {
        float: left;
-       margin-left: 30px;
+       margin-left: 0px;
+       width: 120px;
+       overflow: hidden;
 }
 .contact-entry-edit-links {
        margin-top: 6px;
@@ -777,6 +799,7 @@ input#dfrn-url {
 }
 .contact-entry-photo {
        float: left;
+       position: relative;
 }
 .contact-entry-end {
        clear: both;
@@ -784,6 +807,7 @@ input#dfrn-url {
 
 #contact-edit-end {
        clear: both;
+       margin-bottom: 65px;
 }
 
 #fsuggest-desc, #fsuggest-submit-wrapper {
@@ -798,6 +822,9 @@ input#dfrn-url {
        float: left;
        margin-right: 5px;
 }
+#network-bmark-link {
+       margin-top: 10px;
+}
 
 .wall-item-content-wrapper {
        margin-top: 10px;
@@ -1374,6 +1401,12 @@ input#dfrn-url {
        margin-left: 30px;
 }
 
+#contact-edit-nettype {
+       margin-top: 5px;
+       margin-left: 30px;
+}
+
+
 #contact-edit-poll-wrapper {
        margin-left: 50px;
        margin-top: 30px;
@@ -1458,6 +1491,35 @@ input#dfrn-url {
        /*margin-left: 50px;*/
 }
 
+
+.contact-photo-menu-button {
+       position: absolute;
+       background-image: url("photo-menu.jpg");
+       background-position: top left; 
+       background-repeat: no-repeat;
+       margin: 0px; padding: 0px;
+       width: 16px;
+       height: 16px;
+       top: 64px; left:0px;
+       overflow: hidden;
+       text-indent: 40px;
+       display: none;
+       
+}
+.contact-photo-menu {
+       width: auto;
+       border: 2px solid #444444;
+       background: #FFFFFF;
+       position: absolute;
+       left: 0px; top: 90px;
+       display: none;
+       z-index: 10000;
+}
+.contact-photo-menu ul { margin:0px; padding: 0px; list-style: none }
+.contact-photo-menu li a { display: block; padding: 2px; }
+.contact-photo-menu li a:hover { color: #FFFFFF; background: #3465A4; text-decoration: none; }
+
+
 #block-message, #ignore-message {
        margin-top: 20px;
        color: #FF0000;
@@ -1497,6 +1559,8 @@ input#dfrn-url {
        display:block!important;
 }
 
+
+
 #acl-wrapper {
        width: 690px;
        float:left;
@@ -1551,7 +1615,7 @@ input#dfrn-url {
        float: left;
        margin: 4px;
 }
-.acl-list-item p { font-size: 10px; margin: 0px; padding: 2px 0px 1px; }
+.acl-list-item p { height: 12px; font-size: 10px; margin: 0px; padding: 2px 0px 1px; overflow: hidden;}
 .acl-list-item a { 
        font-size: 8px;
        display: block;
@@ -1771,6 +1835,24 @@ a.mail-list-link {
        margin-top: 10px;
 }
 
+#search-save {
+       margin-left: 5px;
+}
+.groupsideedit {
+       margin-right: 10px;
+}
+#saved-search-ul {
+       list-style-type: none;
+}
+.savedsearchdrop, .savedsearchterm {
+       float: left;
+       margin-top: 10px;
+}
+.savedsearchterm {
+       margin-left: 10px;
+}
+
+
 #side-follow-wrapper {
        margin-top: 20px;
 }
@@ -1837,6 +1919,10 @@ a.mail-list-link {
        float: left;
        width: 175px;
 }
+
+#photos-upload-noshare {
+       margin-bottom: 10px;
+}
 #photos-upload-existing-album-text {
        float: left;
        width: 175px;
@@ -2130,6 +2216,9 @@ a.mail-list-link {
        margin-bottom: 5px;
 }
 
+.vcard dl {
+       clear: both;
+}
 
 #birthday-title {
        float: left;
@@ -2377,6 +2466,7 @@ a.mail-list-link {
 }
 
 #crepair-nick-label,
+#crepair-attag-label,
 #crepair-url-label,
 #crepair-request-label,
 #crepair-confirm-label,
@@ -2388,6 +2478,7 @@ a.mail-list-link {
 }
 
 #crepair-nick,
+#crepair-attag,
 #crepair-url,
 #crepair-request,
 #crepair-confirm,
@@ -2686,6 +2777,7 @@ a.mail-list-link {
 .off { background-position: 0px -48px; }
 .starred { background-position: -16px -48px; }
 .unstarred { background-position: -32px -48px; }
+.tagged { background-position: -48px -48px; }
 
 
 .icon.dim { opacity: 0.3;filter:alpha(opacity=30); }
diff --git a/view/theme/duepuntozero/theme.php b/view/theme/duepuntozero/theme.php
new file mode 100644 (file)
index 0000000..ebced7b
--- /dev/null
@@ -0,0 +1,2 @@
+<?php
+$a->theme_info = array();
diff --git a/view/theme/duepuntozero/wall_item.tpl b/view/theme/duepuntozero/wall_item.tpl
new file mode 100644 (file)
index 0000000..d264d39
--- /dev/null
@@ -0,0 +1,69 @@
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id" 
+                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                                       <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" />
+                               </a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                                       <ul>
+                                               $item_photo_menu
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="wall-item-photo-end"></div>
+                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }} 
+                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>                             
+                       </div>
+               </div>
+               <div class="wall-item-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+                               
+               </div>  
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>
+                       {{ endif }}
+                        
+                       {{ if $star }}
+                       <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+       </div>
+       <div class="wall-item-wrapper-end"></div>
+       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+       <div class="wall-item-comment-wrapper" >
+       $comment
+       </div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+</div>
diff --git a/view/theme/duepuntozero/wallwall_item.tpl b/view/theme/duepuntozero/wallwall_item.tpl
new file mode 100644 (file)
index 0000000..aaa5427
--- /dev/null
@@ -0,0 +1,75 @@
+<div class="wall-item-outside-wrapper$indent wallwall" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info wallwall" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$id" >
+                               <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id">
+                               <img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" style="height: 80px; width: 80px;" alt="$owner_name" /></a>
+                       </div>
+                       <div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$wall" /></div>
+                       <div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$id" 
+                               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')"
+                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                    <ul>
+                        $item_photo_menu
+                    </ul>
+                </div>
+
+                       </div>
+                       <div class="wall-item-photo-end"></div>
+                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }} 
+                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>
+                       </div>
+               </div>
+               <div class="wall-item-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a> $to <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a> $vwall<br />
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>                           
+               </div>                  
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>
+                       {{ endif }}
+                        
+                       {{ if $star }}
+                       <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+       </div>  
+       <div class="wall-item-wrapper-end"></div>
+       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+       <div class="wall-item-comment-separator"></div>
+       <div class="wall-item-comment-wrapper" >
+       $comment
+       </div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+</div>
+
diff --git a/view/theme/easterbunny/theme.php b/view/theme/easterbunny/theme.php
new file mode 100644 (file)
index 0000000..338f40c
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'duepuntozero',
+);
diff --git a/view/theme/goldenrod/theme.php b/view/theme/goldenrod/theme.php
new file mode 100644 (file)
index 0000000..47b43cf
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'loozah',
+);
index b20ac5c0db037cf0c621c79cc92f7205cf51ef32..2644e428430fc16b4208b59d1c7d974c7182d54c 100644 (file)
Binary files a/view/theme/greenzero/greenicons.png and b/view/theme/greenzero/greenicons.png differ
diff --git a/view/theme/greenzero/theme.php b/view/theme/greenzero/theme.php
new file mode 100644 (file)
index 0000000..338f40c
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'duepuntozero',
+);
diff --git a/view/theme/loozah/nav.tpl b/view/theme/loozah/nav.tpl
new file mode 100644 (file)
index 0000000..2cd29a7
--- /dev/null
@@ -0,0 +1,51 @@
+<nav>
+       $langselector
+
+       <div id="site-location">$sitelocation</div>
+
+       {{ if $nav.logout }}<a id="nav-logout-link" class="nav-link $nav.logout.2" href="$nav.logout.0" title="$nav.logout.3" >$nav.logout.1</a> {{ endif }}
+       {{ if $nav.login }}<a id="nav-login-link" class="nav-login-link $nav.login.2" href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a> {{ endif }}
+
+       <span id="nav-link-wrapper" >
+
+       {{ if $nav.register }}<a id="nav-register-link" class="nav-commlink $nav.register.2" href="$nav.register.0" title="$nav.register.3" >$nav.register.1</a>{{ endif }}
+               
+       <a id="nav-help-link" class="nav-link $nav.help.2" target="friendika-help" href="$nav.help.0" title="$nav.help.3" >$nav.help.1</a>
+               
+       {{ if $nav.apps }}<a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0" title="$nav.apps.3" >$nav.apps.1</a>{{ endif }}
+
+       <a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0" title="$nav.search.3" >$nav.search.1</a>
+       <a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0" title="$nav.directory.3" >$nav.directory.1</a>
+
+       {{ if $nav.admin }}<a id="nav-admin-link" class="nav-link $nav.admin.2" href="$nav.admin.0" title="$nav.admin.3" >$nav.admin.1</a>{{ endif }}
+
+       {{ if $nav.network }}
+       <a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0" title="$nav.network.3" >$nav.network.1</a>
+       <span id="net-update" class="nav-ajax-left"></span>
+       {{ endif }}
+       {{ if $nav.home }}
+       <a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0" title="$nav.home.3" >$nav.home.1</a>
+       <span id="home-update" class="nav-ajax-left"></span>
+       {{ endif }}
+       {{ if $nav.community }}
+       <a id="nav-community-link" class="nav-commlink $nav.community.2" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a>
+       {{ endif }}
+       {{ if $nav.notifications }}
+       <a id="nav-notify-link" class="nav-commlink $nav.notifications.2" href="$nav.notifications.0" title="$nav.notifications.3" >$nav.notifications.1</a>
+       <span id="notify-update" class="nav-ajax-left"></span>
+       {{ endif }}
+       {{ if $nav.messages }}
+       <a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0" title="$nav.messages.3" >$nav.messages.1</a>
+       <span id="mail-update" class="nav-ajax-left"></span>
+       {{ endif }}
+
+       {{ if $nav.manage }}<a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0" title="$nav.manage.3">$nav.manage.1</a>{{ endif }}
+
+       {{ if $nav.settings }}<a id="nav-settings-link" class="nav-link $nav.settings.2" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a>{{ endif }}
+       {{ if $nav.profiles }}<a id="nav-profiles-link" class="nav-link $nav.profiles.2" href="$nav.profiles.0" title="$nav.profiles.3" >$nav.profiles.1</a>{{ endif }}
+
+       {{ if $nav.contacts }}<a id="nav-contacts-link" class="nav-link $nav.contacts.2" href="$nav.contacts.0" title="$nav.contacts.3" >$nav.contacts.1</a>{{ endif }}
+       </span>
+       <span id="nav-end"></span>
+       <span id="banner">$banner</span>
+</nav>
diff --git a/view/theme/loozah/profile_vcard.tpl b/view/theme/loozah/profile_vcard.tpl
new file mode 100644 (file)
index 0000000..b3f5cc5
--- /dev/null
@@ -0,0 +1,47 @@
+<div class="vcard">
+
+       <div class="fn label">$profile.name</div>
+       
+                               
+       
+       {{ if $pdesc }}<div class="title">$profile.pdesc</div>{{ endif }}
+       <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="$profile.photo" alt="$profile.name"></div>
+
+
+
+       {{ if $location }}
+               <dl class="location"><dt class="location-label">$location</dt> 
+               <dd class="adr">
+                       {{ if $profile.address }}<div class="street-address">$profile.address</div>{{ endif }}
+                       <span class="city-state-zip">
+                               <span class="locality">$profile.locality</span>{{ if $profile.locality }}, {{ endif }}
+                               <span class="region">$profile.region</span>
+                               <span class="postal-code">$profile.postal-code</span>
+                       </span>
+                       {{ if $profile.country-name }}<span class="country-name">$profile.country-name</span>{{ endif }}
+               </dd>
+               </dl>
+       {{ endif }}
+
+       {{ if $gender }}<dl class="mf"><dt class="gender-label">$gender</dt> <dd class="x-gender">$profile.gender</dd></dl>{{ endif }}
+       
+       {{ if $profile.pubkey }}<div class="key" style="display:none;">$profile.pubkey</div>{{ endif }}
+
+       {{ if $marital }}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>$marital</dt><dd class="marital-text">$profile.marital</dd></dl>{{ endif }}
+
+       {{ if $homepage }}<dl class="homepage"><dt class="homepage-label">$homepage</dt><dd class="homepage-url"><a href="$profile.homepage" target="external-link">$profile.homepage</a></dd></dl>{{ endif }}
+
+       {{ inc diaspora_vcard.tpl }}{{ endinc }}
+       
+       <div id="profile-extra-links">
+               <ul>
+                       {{ if $connect }}
+                               <li><a id="dfrn-request-link" href="dfrn_request/$profile.nickname">$connect</a></li>
+                       {{ endif }}
+               </ul>
+       </div>
+</div>
+
+$contact_block
+
+
diff --git a/view/theme/loozah/search_item.tpl b/view/theme/loozah/search_item.tpl
new file mode 100644 (file)
index 0000000..17dc623
--- /dev/null
@@ -0,0 +1,52 @@
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id" 
+                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                                       <ul>
+                                               $item_photo_menu
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="wall-item-photo-end"></div> 
+                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }} 
+                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>
+                       </div>
+               </div>
+               <div class="wall-item-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+                               
+               </div>                  
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+       </div>
+       <div class="wall-item-wrapper-end"></div>
+
+
+       <div class="wall-item-conv" id="wall-item-conv-$id" >
+       {{ if $conv }}<a href='$conv.href' id='context-$id' title='$conv.title'>$conv.title</a>{{ endif }}
+       </div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+
+</div>
+
+
index c58bda5bb37b0b3a09895b894d9349df1a02f6a5..962d08fc075c0e7a9d813ca55a21b8041e81e42c 100644 (file)
@@ -287,6 +287,9 @@ nav {
        margin-bottom: 5px;
 }
 
+.vcard dl {
+       clear: both;
+}
 
 .powered {
        font-size: 0.6em;
@@ -319,6 +322,7 @@ nav {
        float: right;
        margin-left: 0px;
        margin-right: 3px;
+       margin-top: 20px;
        padding: 6px;
        /*border: 2px solid #000000;*/
        background: #D5D5D5;
@@ -340,6 +344,7 @@ nav {
 .nav-ajax-left {
        margin-left: 1px;
        margin-right: 2px;
+       margin-top: 15px;
        float: left;
        font-size: 0.6em;
        font-weight: bold;
@@ -373,6 +378,7 @@ nav {
        float: left;
        margin-left: 3px;
        margin-right: 0px;
+       margin-top: 20px;
        padding: 6px;
        /*border: 2px solid #000000;*/
        background: #D5D5D5;
@@ -400,6 +406,7 @@ nav {
 }
 
 #profile-extra-links {
+       clear: both;
        margin-top: 20px;
        margin-bottom: 20px;
        margin-left: 20px;
@@ -841,7 +848,8 @@ input#dfrn-url {
 
 .contact-entry-wrapper {
        float: left;
-       width: 180px;
+       width: 120px;
+       height: 120px;
 }
 
 .contact-entry-direction-icon {
@@ -857,7 +865,9 @@ input#dfrn-url {
 }
 .contact-entry-name {
        float: left;
-       margin-left: 30px;
+       margin-left: 0px;
+       width: 120px;
+       oveflow: hidden;
 }
 .contact-entry-edit-links {
        margin-top: 6px;
@@ -875,6 +885,7 @@ input#dfrn-url {
 }
 .contact-entry-photo {
        float: left;
+       position: relative;
 }
 .contact-entry-end {
        clear: both;
@@ -882,8 +893,36 @@ input#dfrn-url {
 
 #contact-edit-end {
        clear: both;
-}
-
+       margin-bottom: 65px;
+}
+
+.contact-photo-menu-button {
+       position: absolute;
+       background-image: url("photo-menu.jpg");
+       background-position: top left; 
+       background-repeat: no-repeat;
+       margin: 0px; padding: 0px;
+       width: 16px;
+       height: 16px;
+       top: 64px; left:0px;
+       overflow: hidden;
+       text-indent: 40px;
+       display: none;
+       
+}
+
+.contact-photo-menu {
+       width: 100px;
+       border: 2px solid #444444;
+       background: #FFFFFF;
+       position: absolute;
+       left: 0px; top: 90px;
+       display: none;
+       z-index: 10000;
+}
+.contact-photo-menu ul { margin:0px; padding: 0px; list-style: none }
+.contact-photo-menu li a { display: block; padding: 2px; }
+.contact-photo-menu li a:hover { color: #FFFFFF; background: #3465A4; text-decoration: none; }
 
 #fsuggest-desc, #fsuggest-submit-wrapper {
        margin-top: 15px;
@@ -987,6 +1026,10 @@ input#dfrn-url {
        float: left;
        margin-right: 5px;
 }
+#network-bmark-link {
+       margin-top: 10px;
+}
+
 
 
 .wall-item-info.wallwall {
@@ -1420,6 +1463,11 @@ padding: 5px 10px 0px;
        font-weight: bold;
        margin-left: 30px;
 }
+#contact-edit-nettype {
+       margin-top: 5px;
+       margin-left: 30px;
+}
+
 
 #contact-edit-poll-wrapper {
        margin-left: 50px;
@@ -1546,6 +1594,26 @@ padding: 5px 10px 0px;
        clear: both;
 }
 
+.tabs {
+       padding: 4px;
+       margin-top: 10px;
+       margin-bottom: 10px;
+       margin-right: 5px;
+       /*border: 1px solid #CCC;*/
+       /*background: #F8F8F8;*/
+       font-size: 0.8em;
+       font-weight: bold;
+       background-color: #ECECEC;
+       border: 1px solid #858585;
+}
+.tabs:hover {
+       background-color: #0CBEFE;
+       color: #F5F6FB;
+       border: 1px solid #F5F6FB;
+       /*cursor: pointer;*/
+}
+
+
 .comment-edit-text-empty {
        color: gray;
        height: 30px;
@@ -1631,7 +1699,7 @@ padding: 5px 10px 0px;
        float: left;
        margin: 4px;
 }
-.acl-list-item p { font-size: 10px; margin: 0px; padding: 2px 0px 1px; }
+.acl-list-item p { height: 12px; font-size: 10px; margin: 0px; padding: 2px 0px 1px; overflow: hidden;}
 .acl-list-item a { 
        font-size: 8px;
        display: block;
@@ -1834,6 +1902,25 @@ a.mail-list-link {
        margin-top: 10px;
 }
 
+
+#search-save {
+    margin-left: 5px;
+}
+.groupsideedit {
+    margin-right: 10px;
+}
+#saved-search-ul {
+    list-style-type: none;
+}
+.savedsearchdrop, .savedsearchterm {
+    float: left;
+    margin-top: 10px;
+}
+.savedsearchterm {
+    margin-left: 10px;
+}
+
+
 #side-follow-wrapper {
        margin-top: 20px;
 }
@@ -2347,6 +2434,7 @@ a.mail-list-link {
 }
 
 #crepair-nick-label,
+#crepair-attag-label,
 #crepair-url-label,
 #crepair-request-label,
 #crepair-confirm-label,
@@ -2358,6 +2446,7 @@ a.mail-list-link {
 }
 
 #crepair-nick,
+#crepair-attag,
 #crepair-url,
 #crepair-request,
 #crepair-confirm,
@@ -2368,7 +2457,8 @@ a.mail-list-link {
 }
 
 #netsearch-box {
-       margin-top: 20px;       
+       margin-top: 20px;
+       width: 150px;   
 }
 
 #netsearch-box #search-submit {
@@ -2669,6 +2759,7 @@ a.mail-list-link {
 .off { background-position: 0px -48px; }
 .starred { background-position: -16px -48px; }
 .unstarred { background-position: -32px -48px; }
+.tagged { background-position: -48px -48px; }
 
 .icon.dim { opacity: 0.3;filter:alpha(opacity=30); }
 
diff --git a/view/theme/loozah/wall_item.tpl b/view/theme/loozah/wall_item.tpl
new file mode 100644 (file)
index 0000000..e2b7c9c
--- /dev/null
@@ -0,0 +1,69 @@
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id" 
+                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                                       <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" />
+                               </a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                                       <ul>
+                                               $item_photo_menu
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="wall-item-photo-end"></div>
+                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }}
+                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>                             
+                       </div>
+               </div>
+               <div class="wall-item-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+                               
+               </div>  
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>
+                       {{ endif }}
+                        
+                       {{ if $star }}
+                       <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+       </div>
+       <div class="wall-item-wrapper-end"></div>
+       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+       <div class="wall-item-comment-wrapper" >
+       $comment
+       </div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+</div>
diff --git a/view/theme/loozah/wallwall_item.tpl b/view/theme/loozah/wallwall_item.tpl
new file mode 100644 (file)
index 0000000..aaa5427
--- /dev/null
@@ -0,0 +1,75 @@
+<div class="wall-item-outside-wrapper$indent wallwall" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info wallwall" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$id" >
+                               <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id">
+                               <img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" style="height: 80px; width: 80px;" alt="$owner_name" /></a>
+                       </div>
+                       <div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$wall" /></div>
+                       <div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$id" 
+                               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')"
+                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                    <ul>
+                        $item_photo_menu
+                    </ul>
+                </div>
+
+                       </div>
+                       <div class="wall-item-photo-end"></div>
+                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }} 
+                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>
+                       </div>
+               </div>
+               <div class="wall-item-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a> $to <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a> $vwall<br />
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>                           
+               </div>                  
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>
+                       {{ endif }}
+                        
+                       {{ if $star }}
+                       <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+       </div>  
+       <div class="wall-item-wrapper-end"></div>
+       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+       <div class="wall-item-comment-separator"></div>
+       <div class="wall-item-comment-wrapper" >
+       $comment
+       </div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+</div>
+
diff --git a/view/theme/purplezero/theme.php b/view/theme/purplezero/theme.php
new file mode 100644 (file)
index 0000000..338f40c
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'duepuntozero',
+);
diff --git a/view/theme/quattro/colors.less b/view/theme/quattro/colors.less
new file mode 100644 (file)
index 0000000..564cf6d
--- /dev/null
@@ -0,0 +1,74 @@
+// Quattro Theme LESS file
+
+// "Echo" palette from Inkscape
+@Blue1:rgb(25,174,255);
+@Blue2:rgb(0,132,200);
+@Blue3:rgb(0,92,148);
+@Red1:rgb(255,65,65);
+@Red2:rgb(220,0,0);
+@Red3:rgb(181,0,0);
+@Orange1:rgb(255,255,62);
+@Orange2:rgb(255,153,0);
+@Orange3:rgb(255,102,0);
+@Brown1:rgb(255,192,34);
+@Brown2:rgb(184,129,0);
+@Brown3:rgb(128,77,0);
+@Green1:rgb(204,255,66);
+@Green2:rgb(154,222,0);
+@Green3:rgb(0,145,0);
+@Purple1:rgb(241,202,255);
+@Purple2:rgb(215,108,255);
+@Purple3:rgb(186,0,255);
+@Metalic1:rgb(189,205,212);
+@Metalic2:rgb(158,171,176);
+@Metalic3:rgb(54,78,89);
+@Metalic4:rgb(14,35,46);
+@Grey1:rgb(255,255,255);
+@Grey2:rgb(204,204,204);
+@Grey3:rgb(153,153,153);
+@Grey4:rgb(102,102,102);
+@Grey5:rgb(45,45,45);
+
+
+// Theme colors
+@BodyBackground: @Grey1;
+@BodyColor:    @Grey5;
+
+@Link: @Blue3;
+@LinkHover: @Blue3;
+@LinkVisited: @Blue3;
+
+@Banner: @Grey1;
+
+@NavbarBackground:@Metalic4;
+@NavbarSelectedBg:@Metalic3;
+@NavbarSelectedBorder: @Metalic2;
+@NavbarNotifBg: @Blue1;
+
+@Menu: @Grey5;
+@MenuBg: @Grey1;
+@MenuBorder: @Metalic3;
+@MenuItem: @Grey5;
+@MenuItemHoverBg: @Metalic1;
+@MenuItemSeparator: @Metalic2;
+@MenuEmpty: @Metalic2;
+@MenuItemDetail: @Metalic2;
+
+@AsideBorder: @Metalic1;
+@AsideConnect: @Grey1;
+@AsideConnectBg: @Blue3;
+@AsideConnectHoverBg: @Blue1;
+@VCardLabelColor: @Grey3;
+
+@InfoColor: @Grey1;
+@InfoBackgroundColor: @Metalic3;
+
+@NoticeColor: @Grey1;
+@NoticeBackgroundColor: #511919;
+
+@ThreadBackgroundColor: #f6f7f8;
+
+@CommentBoxEmptyColor: @Grey3;
+@CommentBoxEmptyBorderColor: @Grey3;
+@CommentBoxFullColor: @Grey5;
+@CommentBoxFullBorderColor: @Grey5;
diff --git a/view/theme/quattro/experimental b/view/theme/quattro/experimental
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/view/theme/quattro/icons.less b/view/theme/quattro/icons.less
new file mode 100644 (file)
index 0000000..525ca48
--- /dev/null
@@ -0,0 +1,51 @@
+// Quattro Theme LESS file
+/* icons */
+
+.icons(@size: 22) {
+       &.notify { background-image: url("../../../images/icons/@{size}/notify_off.png"); }
+       &.gear   { background-image: url("../../../images/icons/@{size}/gear.png"); }
+       
+       &.add           { background-image: url("../../../images/icons/@{size}/add.png"); }
+       &.delete        { background-image: url("../../../images/icons/@{size}/delete.png"); }
+       &.edit          { background-image: url("../../../images/icons/@{size}/edit.png"); }
+       &.star          { background-image: url("../../../images/icons/@{size}/star.png"); }
+       &.menu          { background-image: url("../../../images/icons/@{size}/menu.png"); }
+       &.link          { background-image: url("../../../images/icons/@{size}/link.png"); }
+       &.lock          { background-image: url("../../../images/icons/@{size}/lock.png"); }
+       &.unlock        { background-image: url("../../../images/icons/@{size}/unlock.png"); }
+       
+}
+
+
+.icon {
+       background-color: transparent ;
+       background-repeat: no-repeat;
+       background-position: center center;
+       display: block;
+       overflow: hidden;
+       text-indent: -9999px;
+       padding: 1px;
+
+       &.text {
+               text-indent: 0px;
+       }
+
+       &.s10 {
+               width:10px; height: 10px;
+               .icons(10);
+       }
+       &.s16 {
+               width:22px; height: 22px;
+               .icons(16);
+       }
+       &.s22 {
+               width:22px; height: 22px;
+               .icons(22);
+       }
+       &.s48 {
+               width:48px; height: 48px;
+               .icons(48);
+       }
+       
+       
+}
diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less
new file mode 100644 (file)
index 0000000..31a2569
--- /dev/null
@@ -0,0 +1,377 @@
+// Quattro Theme LESS file
+
+/* global */
+body {
+       font-family: Liberation Sans,helvetica,arial,clean,sans-serif;
+       font-size: 12px;
+       background-color: @BodyBackground;
+       color: @BodyColor;
+       margin: 50px 0px 0px 0px;
+       display:table;
+}
+
+.shadow(@x: 0px, @y: 5px){
+   -webkit-box-shadow:@x @y 10px rgba(0, 0, 0, 0.7);
+   -moz-box-shadow:@x @y 10px rgba(0, 0, 0, 0.7);
+   box-shadow:@x @y 10px rgba(0, 0, 0, 0.7);
+}
+
+.rounded(@tr: 5px, @tl: 5px, @bl: 5px, @br: 5px){
+       -moz-border-radius: @arguments;
+       -webkit-border-radius: @arguments;
+       border-radius: @arguments;
+}
+.roundbottom (@radius: 5px){ .rounded(0, 0, @radius, @radius); }
+.roundtop (@radius: 5px){ .rounded(@radius, @radius, 0, 0); }
+
+.opaque(@v: 0.5){
+       opacity: @v;
+       -webkit-transition: all 0.2s ease-in-out;
+       -moz-transition: all 0.2s ease-in-out;
+       -o-transition: all 0.2s ease-in-out;
+       -ms-transition: all 0.2s ease-in-out;
+       transition: all 0.2s ease-in-out;
+}
+
+a, a:link { color: @Link; text-decoration: none; }
+a:visited { color: @LinkVisited; text-decoration: none; }
+a:hover {color: @LinkHover; text-decoration: underline; }
+
+.left { float: left; }
+.right { float: right; }
+.hidden { display: none; }
+
+
+.tool {
+       height: auto; overflow: auto;
+       .label { float: left;}
+       .action { float: right; }
+}
+
+/* popup notifications */
+div.jGrowl div.notice {
+       background: @NoticeBackgroundColor url("../../../images/icons/48/notice.png") no-repeat 5px center;
+       color:  @NoticeColor;
+       padding-left: 58px;
+}
+div.jGrowl div.info {
+       background: @InfoBackgroundColor url("../../../images/icons/48/info.png") no-repeat 5px center;
+       color:  @InfoColor;
+       padding-left: 58px;
+}
+
+
+
+/* header */
+header {
+       position: fixed; left: 43%; right: 43%; top: 0px;
+       margin: 0px; padding: 0px;
+       /*width: 100%; height: 12px; */
+       z-index: 110;
+       color: @Grey1;
+       #site-location {
+               display: none;
+       }
+       
+       #banner {
+               
+           text-align: center;
+               width: 100%;
+               a, a:active, a:visited, a:link, a:hover { color: @Grey1; text-decoration: none; outline: none; vertical-align: bottom; }
+               #logo-img { height: 22px; margin-top:5px;}
+               #logo-text { font-size: 22px }
+       }
+}
+/* nav */
+nav { 
+       width: 100%; height: 32px;
+       position: fixed; left: 0px; top: 0px;
+       padding: 0px;
+       background-color: @NavbarBackground;
+       color: @Grey1;
+       z-index: 100;
+       .shadow(0px, 0px);
+
+               a, a:active, a:visited, a:link, a:hover { color: @Banner; text-decoration: none; outline: none;  }
+
+               ul {
+                       margin: 0px;
+                       padding: 0px 20px;
+                       li { 
+                               list-style: none; 
+                               margin: 0px; padding: 0px;
+                               float: left;
+                               .menu-popup{ left: 0px; right: auto; }
+                       }
+                       
+               }
+
+               .nav-menu-icon {
+                       position: relative;
+                       height: 22px;
+                       padding: 5px;
+                       margin: 0px 10px;
+                       .roundtop();
+                       
+                       &.selected {
+                               background-color: @NavbarSelectedBg;
+                       }
+                       
+                               img { width: 22px; height: 22px; }
+                               .nav-notify { top: 3px; }
+               }
+
+               .nav-menu {
+                       position: relative;
+                       height: 16px;
+                       padding: 5px;
+                       margin: 3px 15px 0px;
+                       font-size: 14px;
+                       border-bottom: 3px solid @NavbarBackground;
+                       &.selected {
+                               border-bottom: 3px solid @NavbarSelectedBorder;
+                       }
+                       
+               }
+
+               .nav-notify {
+                       display: none;
+                       position: absolute;
+                       background-color: @NavbarNotifBg;
+                       .rounded();
+                       font-size: 10px;
+                       padding: 1px 3px;
+                       top: 0px;
+                       right: -10px;
+                       min-width: 15px;
+                       text-align: right;
+                       
+                               &.show{ display: block; }
+               }
+               
+               
+               #nav-help-link,
+               #nav-search-link,
+               #nav-directory-link,
+               #nav-apps-link,
+               #nav-site-linkmenu { 
+                       float: right;
+                       .menu-popup{ right: 0px; left: auto; }
+               }
+       
+               #nav-notifications-linkmenu.on .icon.s22.notify,
+               #nav-notifications-linkmenu.selected .icon.s22.notify { background-image: url("../../../images/icons/22/notify_on.png") }
+               #nav-apps-link.selected { background-color: @NavbarSelectedBg; }
+}
+
+
+ul.menu-popup {
+       position: absolute;
+       display: none;
+       width: 10em;
+       background: @MenuBg;
+       color: @Menu;
+       margin: 0px;
+       padding: 0px;
+       list-style: none;
+       border: 3px solid @MenuBorder;
+       z-index: 100000;
+       
+       .shadow();
+       
+               a { display: block; color: @MenuItem; padding: 5px 10px; text-decoration: none;}
+               a:hover { background-color: @MenuItemHoverBg; }
+               .menu-sep  { border-top: 1px solid @MenuItemSeparator; }
+               li { float: none;  overflow: auto; height: auto; display: block; }
+               li img { float: left; width: 16px; height: 16px; padding-right: 5px;}
+               .empty {
+                       padding: 5px;
+                       text-align: center;
+                       color: @MenuEmpty;
+               }
+               
+}
+
+#nav-notifications-menu {
+       width: 400px;
+       img { float: left; margin-right: 5px; }
+       .contactname { font-weight: bold; }
+       .notif-when { font-size: 10px; color: @MenuItemDetail; display: block; }
+}
+
+
+
+
+/* aside */
+aside { 
+       display: table-cell;
+       width: 200px;
+       padding:0px 10px 0px 20px;
+       border-right: 1px solid @AsideBorder;
+
+       .vcard {
+               .fn { font-size: 16px; font-weight: bold; margin-bottom: 5px; }
+               .title { margin-bottom: 5px; }
+               dl { height: auto; overflow: auto; }
+               dt {float: left; margin-left: 0px; width: 35%; text-align: right; color: @VCardLabelColor; }
+               dd {float: left; margin-left: 4px; width: 60%;}
+       
+       }
+
+       #profile-extra-links {
+               ul { padding: 0px; margin: 0px; }
+               li { padding: 0px; margin: 0px; list-style: none; }
+       }
+
+       #dfrn-request-link {
+               display: block;
+               .rounded();
+               color: @AsideConnect;
+               background: @AsideConnectBg url('../../../images/connect-bg.png') no-repeat left center;
+               font-weight: bold;
+               text-transform:uppercase;
+               padding: 4px 2px 2px 35px;
+               
+               &:hover { text-decoration: none; background-color: @AsideConnectHoverBg; }
+       }
+
+       #profiles-menu { width: 20em; }
+
+}
+
+#contact-block {
+       overflow: auto; height: auto;
+       .contact-block-h4 { float: left; margin: 5px 0px; }
+       .allcontact-link { float: right; margin: 5px 0px; }
+       .contact-block-content {
+               clear: both;
+               overflow: auto; height: auto;
+       }
+       .contact-block-link {
+               float: left;
+               margin: 0px 2px 2px 0px;
+       }
+}
+
+
+
+
+/* section */
+section { 
+       display: table-cell;
+       width: 800px;
+       padding:0px 20px 0px 10px;
+}
+
+/* wall item */
+.tread-wrapper { 
+       background-color: @ThreadBackgroundColor;
+       position: relative;
+       padding: 10px;
+       margin-bottom: 20px;
+}
+.wall-item-decor { position: absolute; left: 790px; top: -10px;  width: 16px;}
+.unstarred { display: none; }
+
+.wall-item-container {
+       display: table;
+       width: 780px;
+       
+       .wall-item-item,
+       .wall-item-bottom { display: table-row; }
+       .wall-item-info {
+               display: table-cell;
+               vertical-align: top;
+               text-align: left;
+               width: 60px;
+               
+               .wall-item-photo-wrapper { position: relative; }
+               .wall-item-photo { width: 48px; height: 48px; }         
+               
+               .wall-item-photo-menu-button {
+                       display: none;
+                       position: absolute;
+                       left: -4px;
+                       top: 28px;
+               }
+               .wall-item-photo-menu { display: none; }
+               
+       } 
+       .wall-item-location {
+               word-wrap: break-word;
+               width: 50px;
+       }
+       .wall-item-content {
+               display: table-cell;
+               font-size: 16px;
+               max-width: 720px;
+               word-wrap: break-word;
+       }
+       .wall-item-content img { max-width: 710px; }
+       .wall-item-links,
+       .wall-item-actions { 
+               display: table-cell; 
+               vertical-align: middle; 
+               
+               .icon {
+                       .opaque(0.5);
+               }
+               .icon:hover  {
+                       .opaque(1.0);
+               }               
+       }
+       
+       .wall-item-ago { padding-right: 40px; }
+       .wall-item-name { font-weight: bold; }
+       
+       .wall-item-actions-author { float: left; width: 20em; margin-top: 0.5em; }
+       .wall-item-actions-social { float: left; margin-top: 0.5em;
+               a { margin-right: 3em; }
+        }
+       .wall-item-actions-tools { float: right; width: 15%; 
+               a { float: right; }
+               input { float: right; }
+       }
+}
+
+
+.wall-item-container.comment {
+       margin-top: 50px;
+       .wall-item-photo { width: 32px; height: 32px; margin-left: 16px;}       
+       .wall-item-photo-menu-button {
+               top: 13px !important;
+               left: 10px !important;
+       }
+       .wall-item-links { padding-left: 12px; }
+}
+
+.wall-item-comment-wrapper {
+       margin: 30px 2em 2em 60px;
+       .comment-edit-photo { display: none; }
+       textarea {      
+               height: 1em; width: 100%; font-size: 10px;
+               color: @CommentBoxEmptyColor;
+               border: 1px solid @CommentBoxEmptyBorderColor;
+               padding:0.3em;
+       }
+       .comment-edit-text-full {
+               font-size: 14px;
+               height: 4em;
+               color: @CommentBoxFullColor;
+               border: 1px solid @CommentBoxFullBorderColor;
+       }
+}
+
+#profile-jot-wrapper {
+       width: 100%;
+       margin: 0px 2em 20px 0px;
+       
+       
+}
+.profile-jot-text {
+       height: 1em; width: 100%; font-size: 10px;
+       color: @CommentBoxEmptyColor;
+       border: 1px solid @CommentBoxEmptyBorderColor;
+       padding:0.3em;
+}
+
diff --git a/view/theme/quattro/style.css b/view/theme/quattro/style.css
new file mode 100644 (file)
index 0000000..f323780
--- /dev/null
@@ -0,0 +1,643 @@
+/**
+ * Fabio Comuni <http://kirgroup.com/profile/fabrixxm>
+ **/
+/* icons */
+.icon {
+  background-color: transparent ;
+  background-repeat: no-repeat;
+  background-position: center center;
+  display: block;
+  overflow: hidden;
+  text-indent: -9999px;
+  padding: 1px;
+}
+.icon.text {
+  text-indent: 0px;
+}
+.icon.s10 {
+  width: 10px;
+  height: 10px;
+}
+.icon.s10.notify {
+  background-image: url("../../../images/icons/10/notify_off.png");
+}
+.icon.s10.gear {
+  background-image: url("../../../images/icons/10/gear.png");
+}
+.icon.s10.add {
+  background-image: url("../../../images/icons/10/add.png");
+}
+.icon.s10.delete {
+  background-image: url("../../../images/icons/10/delete.png");
+}
+.icon.s10.edit {
+  background-image: url("../../../images/icons/10/edit.png");
+}
+.icon.s10.star {
+  background-image: url("../../../images/icons/10/star.png");
+}
+.icon.s10.menu {
+  background-image: url("../../../images/icons/10/menu.png");
+}
+.icon.s10.link {
+  background-image: url("../../../images/icons/10/link.png");
+}
+.icon.s10.lock {
+  background-image: url("../../../images/icons/10/lock.png");
+}
+.icon.s10.unlock {
+  background-image: url("../../../images/icons/10/unlock.png");
+}
+.icon.s16 {
+  width: 22px;
+  height: 22px;
+}
+.icon.s16.notify {
+  background-image: url("../../../images/icons/16/notify_off.png");
+}
+.icon.s16.gear {
+  background-image: url("../../../images/icons/16/gear.png");
+}
+.icon.s16.add {
+  background-image: url("../../../images/icons/16/add.png");
+}
+.icon.s16.delete {
+  background-image: url("../../../images/icons/16/delete.png");
+}
+.icon.s16.edit {
+  background-image: url("../../../images/icons/16/edit.png");
+}
+.icon.s16.star {
+  background-image: url("../../../images/icons/16/star.png");
+}
+.icon.s16.menu {
+  background-image: url("../../../images/icons/16/menu.png");
+}
+.icon.s16.link {
+  background-image: url("../../../images/icons/16/link.png");
+}
+.icon.s16.lock {
+  background-image: url("../../../images/icons/16/lock.png");
+}
+.icon.s16.unlock {
+  background-image: url("../../../images/icons/16/unlock.png");
+}
+.icon.s22 {
+  width: 22px;
+  height: 22px;
+}
+.icon.s22.notify {
+  background-image: url("../../../images/icons/22/notify_off.png");
+}
+.icon.s22.gear {
+  background-image: url("../../../images/icons/22/gear.png");
+}
+.icon.s22.add {
+  background-image: url("../../../images/icons/22/add.png");
+}
+.icon.s22.delete {
+  background-image: url("../../../images/icons/22/delete.png");
+}
+.icon.s22.edit {
+  background-image: url("../../../images/icons/22/edit.png");
+}
+.icon.s22.star {
+  background-image: url("../../../images/icons/22/star.png");
+}
+.icon.s22.menu {
+  background-image: url("../../../images/icons/22/menu.png");
+}
+.icon.s22.link {
+  background-image: url("../../../images/icons/22/link.png");
+}
+.icon.s22.lock {
+  background-image: url("../../../images/icons/22/lock.png");
+}
+.icon.s22.unlock {
+  background-image: url("../../../images/icons/22/unlock.png");
+}
+.icon.s48 {
+  width: 48px;
+  height: 48px;
+}
+.icon.s48.notify {
+  background-image: url("../../../images/icons/48/notify_off.png");
+}
+.icon.s48.gear {
+  background-image: url("../../../images/icons/48/gear.png");
+}
+.icon.s48.add {
+  background-image: url("../../../images/icons/48/add.png");
+}
+.icon.s48.delete {
+  background-image: url("../../../images/icons/48/delete.png");
+}
+.icon.s48.edit {
+  background-image: url("../../../images/icons/48/edit.png");
+}
+.icon.s48.star {
+  background-image: url("../../../images/icons/48/star.png");
+}
+.icon.s48.menu {
+  background-image: url("../../../images/icons/48/menu.png");
+}
+.icon.s48.link {
+  background-image: url("../../../images/icons/48/link.png");
+}
+.icon.s48.lock {
+  background-image: url("../../../images/icons/48/lock.png");
+}
+.icon.s48.unlock {
+  background-image: url("../../../images/icons/48/unlock.png");
+}
+/* global */
+body {
+  font-family: Liberation Sans, helvetica, arial, clean, sans-serif;
+  font-size: 12px;
+  background-color: #ffffff;
+  color: #2d2d2d;
+  margin: 50px 0px 0px 0px;
+  display: table;
+}
+a, a:link {
+  color: #005c94;
+  text-decoration: none;
+}
+a:visited {
+  color: #005c94;
+  text-decoration: none;
+}
+a:hover {
+  color: #005c94;
+  text-decoration: underline;
+}
+.left {
+  float: left;
+}
+.right {
+  float: right;
+}
+.hidden {
+  display: none;
+}
+.tool {
+  height: auto;
+  overflow: auto;
+}
+.tool .label {
+  float: left;
+}
+.tool .action {
+  float: right;
+}
+/* popup notifications */
+div.jGrowl div.notice {
+  background: #511919 url("../../../images/icons/48/notice.png") no-repeat 5px center;
+  color: #ffffff;
+  padding-left: 58px;
+}
+div.jGrowl div.info {
+  background: #364e59 url("../../../images/icons/48/info.png") no-repeat 5px center;
+  color: #ffffff;
+  padding-left: 58px;
+}
+/* header */
+header {
+  position: fixed;
+  left: 43%;
+  right: 43%;
+  top: 0px;
+  margin: 0px;
+  padding: 0px;
+  /*width: 100%; height: 12px; */
+
+  z-index: 110;
+  color: #ffffff;
+}
+header #site-location {
+  display: none;
+}
+header #banner {
+  text-align: center;
+  width: 100%;
+}
+header #banner a,
+header #banner a:active,
+header #banner a:visited,
+header #banner a:link,
+header #banner a:hover {
+  color: #ffffff;
+  text-decoration: none;
+  outline: none;
+  vertical-align: bottom;
+}
+header #banner #logo-img {
+  height: 22px;
+  margin-top: 5px;
+}
+header #banner #logo-text {
+  font-size: 22px;
+}
+/* nav */
+nav {
+  width: 100%;
+  height: 32px;
+  position: fixed;
+  left: 0px;
+  top: 0px;
+  padding: 0px;
+  background-color: #0e232e;
+  color: #ffffff;
+  z-index: 100;
+  -webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7);
+  -moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7);
+  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7);
+}
+nav a,
+nav a:active,
+nav a:visited,
+nav a:link,
+nav a:hover {
+  color: #ffffff;
+  text-decoration: none;
+  outline: none;
+}
+nav ul {
+  margin: 0px;
+  padding: 0px 20px;
+}
+nav ul li {
+  list-style: none;
+  margin: 0px;
+  padding: 0px;
+  float: left;
+}
+nav ul li .menu-popup {
+  left: 0px;
+  right: auto;
+}
+nav .nav-menu-icon {
+  position: relative;
+  height: 22px;
+  padding: 5px;
+  margin: 0px 10px;
+  -moz-border-radius: 5px 5px 0 0;
+  -webkit-border-radius: 5px 5px 0 0;
+  border-radius: 5px 5px 0 0;
+}
+nav .nav-menu-icon.selected {
+  background-color: #364e59;
+}
+nav .nav-menu-icon img {
+  width: 22px;
+  height: 22px;
+}
+nav .nav-menu-icon .nav-notify {
+  top: 3px;
+}
+nav .nav-menu {
+  position: relative;
+  height: 16px;
+  padding: 5px;
+  margin: 3px 15px 0px;
+  font-size: 14px;
+  border-bottom: 3px solid #0e232e;
+}
+nav .nav-menu.selected {
+  border-bottom: 3px solid #9eabb0;
+}
+nav .nav-notify {
+  display: none;
+  position: absolute;
+  background-color: #19aeff;
+  -moz-border-radius: 5px 5px 5px 5px;
+  -webkit-border-radius: 5px 5px 5px 5px;
+  border-radius: 5px 5px 5px 5px;
+  font-size: 10px;
+  padding: 1px 3px;
+  top: 0px;
+  right: -10px;
+  min-width: 15px;
+  text-align: right;
+}
+nav .nav-notify.show {
+  display: block;
+}
+nav #nav-help-link,
+nav #nav-search-link,
+nav #nav-directory-link,
+nav #nav-apps-link,
+nav #nav-site-linkmenu {
+  float: right;
+}
+nav #nav-help-link .menu-popup,
+nav #nav-search-link .menu-popup,
+nav #nav-directory-link .menu-popup,
+nav #nav-apps-link .menu-popup,
+nav #nav-site-linkmenu .menu-popup {
+  right: 0px;
+  left: auto;
+}
+nav #nav-notifications-linkmenu.on .icon.s22.notify, nav #nav-notifications-linkmenu.selected .icon.s22.notify {
+  background-image: url("../../../images/icons/22/notify_on.png");
+}
+nav #nav-apps-link.selected {
+  background-color: #364e59;
+}
+ul.menu-popup {
+  position: absolute;
+  display: none;
+  width: 10em;
+  background: #ffffff;
+  color: #2d2d2d;
+  margin: 0px;
+  padding: 0px;
+  list-style: none;
+  border: 3px solid #364e59;
+  z-index: 100000;
+  -webkit-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7);
+  -moz-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7);
+  box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7);
+}
+ul.menu-popup a {
+  display: block;
+  color: #2d2d2d;
+  padding: 5px 10px;
+  text-decoration: none;
+}
+ul.menu-popup a:hover {
+  background-color: #bdcdd4;
+}
+ul.menu-popup .menu-sep {
+  border-top: 1px solid #9eabb0;
+}
+ul.menu-popup li {
+  float: none;
+  overflow: auto;
+  height: auto;
+  display: block;
+}
+ul.menu-popup li img {
+  float: left;
+  width: 16px;
+  height: 16px;
+  padding-right: 5px;
+}
+ul.menu-popup .empty {
+  padding: 5px;
+  text-align: center;
+  color: #9eabb0;
+}
+#nav-notifications-menu {
+  width: 400px;
+}
+#nav-notifications-menu img {
+  float: left;
+  margin-right: 5px;
+}
+#nav-notifications-menu .contactname {
+  font-weight: bold;
+}
+#nav-notifications-menu .notif-when {
+  font-size: 10px;
+  color: #9eabb0;
+  display: block;
+}
+/* aside */
+aside {
+  display: table-cell;
+  width: 200px;
+  padding: 0px 10px 0px 20px;
+  border-right: 1px solid #bdcdd4;
+}
+aside .vcard .fn {
+  font-size: 16px;
+  font-weight: bold;
+  margin-bottom: 5px;
+}
+aside .vcard .title {
+  margin-bottom: 5px;
+}
+aside .vcard dl {
+  height: auto;
+  overflow: auto;
+}
+aside .vcard dt {
+  float: left;
+  margin-left: 0px;
+  width: 35%;
+  text-align: right;
+  color: #999999;
+}
+aside .vcard dd {
+  float: left;
+  margin-left: 4px;
+  width: 60%;
+}
+aside #profile-extra-links ul {
+  padding: 0px;
+  margin: 0px;
+}
+aside #profile-extra-links li {
+  padding: 0px;
+  margin: 0px;
+  list-style: none;
+}
+aside #dfrn-request-link {
+  display: block;
+  -moz-border-radius: 5px 5px 5px 5px;
+  -webkit-border-radius: 5px 5px 5px 5px;
+  border-radius: 5px 5px 5px 5px;
+  color: #ffffff;
+  background: #005c94 url('../../../images/connect-bg.png') no-repeat left center;
+  font-weight: bold;
+  text-transform: uppercase;
+  padding: 4px 2px 2px 35px;
+}
+aside #dfrn-request-link:hover {
+  text-decoration: none;
+  background-color: #19aeff;
+}
+aside #profiles-menu {
+  width: 20em;
+}
+#contact-block {
+  overflow: auto;
+  height: auto;
+}
+#contact-block .contact-block-h4 {
+  float: left;
+  margin: 5px 0px;
+}
+#contact-block .allcontact-link {
+  float: right;
+  margin: 5px 0px;
+}
+#contact-block .contact-block-content {
+  clear: both;
+  overflow: auto;
+  height: auto;
+}
+#contact-block .contact-block-link {
+  float: left;
+  margin: 0px 2px 2px 0px;
+}
+/* section */
+section {
+  display: table-cell;
+  width: 800px;
+  padding: 0px 20px 0px 10px;
+}
+/* wall item */
+.tread-wrapper {
+  background-color: #f6f7f8;
+  position: relative;
+  padding: 10px;
+  margin-bottom: 20px;
+}
+.wall-item-decor {
+  position: absolute;
+  left: 790px;
+  top: -10px;
+  width: 16px;
+}
+.unstarred {
+  display: none;
+}
+.wall-item-container {
+  display: table;
+  width: 780px;
+}
+.wall-item-container .wall-item-item, .wall-item-container .wall-item-bottom {
+  display: table-row;
+}
+.wall-item-container .wall-item-info {
+  display: table-cell;
+  vertical-align: top;
+  text-align: left;
+  width: 60px;
+}
+.wall-item-container .wall-item-info .wall-item-photo-wrapper {
+  position: relative;
+}
+.wall-item-container .wall-item-info .wall-item-photo {
+  width: 48px;
+  height: 48px;
+}
+.wall-item-container .wall-item-info .wall-item-photo-menu-button {
+  display: none;
+  position: absolute;
+  left: -4px;
+  top: 28px;
+}
+.wall-item-container .wall-item-info .wall-item-photo-menu {
+  display: none;
+}
+.wall-item-container .wall-item-location {
+  word-wrap: break-word;
+  width: 50px;
+}
+.wall-item-container .wall-item-content {
+  display: table-cell;
+  font-size: 16px;
+  max-width: 720px;
+  word-wrap: break-word;
+}
+.wall-item-container .wall-item-content img {
+  max-width: 710px;
+}
+.wall-item-container .wall-item-links, .wall-item-container .wall-item-actions {
+  display: table-cell;
+  vertical-align: middle;
+}
+.wall-item-container .wall-item-links .icon, .wall-item-container .wall-item-actions .icon {
+  opacity: 0.5;
+  -webkit-transition: all 0.2s ease-in-out;
+  -moz-transition: all 0.2s ease-in-out;
+  -o-transition: all 0.2s ease-in-out;
+  -ms-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+}
+.wall-item-container .wall-item-links .icon:hover, .wall-item-container .wall-item-actions .icon:hover {
+  opacity: 1;
+  -webkit-transition: all 0.2s ease-in-out;
+  -moz-transition: all 0.2s ease-in-out;
+  -o-transition: all 0.2s ease-in-out;
+  -ms-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+}
+.wall-item-container .wall-item-ago {
+  padding-right: 40px;
+}
+.wall-item-container .wall-item-name {
+  font-weight: bold;
+}
+.wall-item-container .wall-item-actions-author {
+  float: left;
+  width: 20em;
+  margin-top: 0.5em;
+}
+.wall-item-container .wall-item-actions-social {
+  float: left;
+  margin-top: 0.5em;
+}
+.wall-item-container .wall-item-actions-social a {
+  margin-right: 3em;
+}
+.wall-item-container .wall-item-actions-tools {
+  float: right;
+  width: 15%;
+}
+.wall-item-container .wall-item-actions-tools a {
+  float: right;
+}
+.wall-item-container .wall-item-actions-tools input {
+  float: right;
+}
+.wall-item-container.comment {
+  margin-top: 50px;
+}
+.wall-item-container.comment .wall-item-photo {
+  width: 32px;
+  height: 32px;
+  margin-left: 16px;
+}
+.wall-item-container.comment .wall-item-photo-menu-button {
+  top: 13px !important;
+  left: 10px !important;
+}
+.wall-item-container.comment .wall-item-links {
+  padding-left: 12px;
+}
+.wall-item-comment-wrapper {
+  margin: 30px 2em 2em 60px;
+}
+.wall-item-comment-wrapper .comment-edit-photo {
+  display: none;
+}
+.wall-item-comment-wrapper textarea {
+  height: 1em;
+  width: 100%;
+  font-size: 10px;
+  color: #999999;
+  border: 1px solid #999999;
+  padding: 0.3em;
+}
+.wall-item-comment-wrapper .comment-edit-text-full {
+  font-size: 14px;
+  height: 4em;
+  color: #2d2d2d;
+  border: 1px solid #2d2d2d;
+}
+#profile-jot-wrapper {
+  width: 100%;
+  margin: 0px 2em 20px 0px;
+}
+.profile-jot-text {
+  height: 1em;
+  width: 100%;
+  font-size: 10px;
+  color: #999999;
+  border: 1px solid #999999;
+  padding: 0.3em;
+}
diff --git a/view/theme/quattro/style.less b/view/theme/quattro/style.less
new file mode 100644 (file)
index 0000000..c3dbae7
--- /dev/null
@@ -0,0 +1,14 @@
+/**
+ * Fabio Comuni <http://kirgroup.com/profile/fabrixxm>
+ **/
+// Less file http://lesscss.org/
+// compile with lessc
+// $ lessc style.less > style.css
+
+@import "colors";
+@import "icons";
+@import "quattro";
+
+
+
+
diff --git a/view/theme/shady/theme.php b/view/theme/shady/theme.php
new file mode 100644 (file)
index 0000000..47b43cf
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'loozah',
+);
diff --git a/view/theme/testbubble/calendar.png b/view/theme/testbubble/calendar.png
new file mode 100644 (file)
index 0000000..705a75b
Binary files /dev/null and b/view/theme/testbubble/calendar.png differ
diff --git a/view/theme/testbubble/connect.png b/view/theme/testbubble/connect.png
new file mode 100644 (file)
index 0000000..b76fc13
Binary files /dev/null and b/view/theme/testbubble/connect.png differ
diff --git a/view/theme/testbubble/contact_edit.tpl b/view/theme/testbubble/contact_edit.tpl
new file mode 100644 (file)
index 0000000..9191a36
--- /dev/null
@@ -0,0 +1,67 @@
+
+<h2>$header</h2>
+
+<div id="contact-edit-banner-name">$name</div>
+
+$nettype
+
+<form action="contacts/$contact_id" method="post" >
+<input type="hidden" name="contact_id" value="$contact_id">
+
+<div id="contact-edit-wrapper" >
+
+       <div id="contact-edit-photo-wrapper" >
+               <img id="contact-edit-direction-icon" src="$dir_icon" alt="$alt_text" title="$alt_text" />
+               <div id="contact-edit-photo" class="lframe">
+                       <a href="$url" title="$visit" /><img src="$photo" $sparkle alt="$name" /></a>
+               </div>
+               <div id="contact-edit-photo-end" ></div>
+       </div>
+       <div id="contact-edit-nav-wrapper" >
+
+               <div id="contact-edit-links" >
+                       <a href="contacts/$contact_id/block" class="icon block" id="contact-edit-block-link" title="$block_text"></a>
+                       <a href="contacts/$contact_id/ignore" class="icon no" id="contact-edit-ignore-link" title="$ignore_text"></a>
+                       <a href="crepair/$contact_id" class="icon tools" id="contact-edit-repair" title="$lblcrepair"></a>
+                       <a href="contacts/$contact_id/drop" class="icon drophide" id="contact-edit-drop-link" onclick="return confirmDelete();"  title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></a>
+               </div>
+               <div id="contact-edit-nav-end"></div>
+
+               {{ if $poll_enabled }}
+               <div id="contact-edit-poll-wrapper">
+                       <div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span></div>
+                       <div id="contact-edit-poll-text">$updpub</div>
+                       $poll_interval
+                       <div id="contact-edit-update-now" class="button"><a href="contacts/$contact_id/update" >$udnow</a></div>
+               </div>
+               {{ endif }}
+       </div>
+       <div id="contact-edit-end" ></div>
+
+$insecure
+$blocked
+$ignored
+
+<div id="view-recent-wrapper"><a href="network/?cid=$contact_id" id="contact-view-recent" class="button">$lblrecent</a></div>
+$lblsuggest
+
+<div id="contact-edit-info-wrapper">
+<h4>$lbl_info1</h4>
+<textarea id="contact-edit-info" rows="10" cols="72" name="info" >$info</textarea>
+</div>
+<div id="contact-edit-info-end"></div>
+
+<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
+
+<div id="contact-edit-profile-select-text">
+<h4>$lbl_vis1</h4>
+<p>$lbl_vis2
+</p> 
+</div>
+$profile_select
+<div id="contact-edit-profile-select-end"></div>
+
+<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
+
+</form>
+</div>
diff --git a/view/theme/testbubble/group_drop.tpl b/view/theme/testbubble/group_drop.tpl
new file mode 100644 (file)
index 0000000..f088fc0
--- /dev/null
@@ -0,0 +1,8 @@
+<div class="group-delete-wrapper" id="group-delete-wrapper-$id" >
+       <a href="group/drop/$id" 
+               onclick="return confirmDelete();" 
+               title="$delete" 
+               id="group-delete-icon-$id" 
+               class="drophide group-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" >Delete Group</a>
+</div>
+<div class="group-delete-end"></div>
diff --git a/view/theme/testbubble/group_edit.tpl b/view/theme/testbubble/group_edit.tpl
new file mode 100644 (file)
index 0000000..a8b3f92
--- /dev/null
@@ -0,0 +1,16 @@
+<h2>$title</h2>
+
+
+<div id="group-edit-wrapper" >
+       <form action="group/$gid" id="group-edit-form" method="post" >
+               <div id="group-edit-name-wrapper" >
+                       <label id="group-edit-name-label" for="group-edit-name" >$gname</label>
+                       <input type="text" id="group-edit-name" name="groupname" value="$name" />
+                       <input type="submit" name="submit" value="$submit">
+                       $drop
+               </div>
+               <div id="group-edit-name-end"></div>
+               <div id="group-edit-desc">$desc</div>
+               <div id="group-edit-select-end" ></div>
+       </form>
+</div>
diff --git a/view/theme/testbubble/groups.png b/view/theme/testbubble/groups.png
new file mode 100644 (file)
index 0000000..a65a721
Binary files /dev/null and b/view/theme/testbubble/groups.png differ
diff --git a/view/theme/testbubble/icons.png b/view/theme/testbubble/icons.png
new file mode 100644 (file)
index 0000000..57c4bfb
Binary files /dev/null and b/view/theme/testbubble/icons.png differ
diff --git a/view/theme/testbubble/icons.svg b/view/theme/testbubble/icons.svg
new file mode 100644 (file)
index 0000000..b435ba6
--- /dev/null
@@ -0,0 +1,1442 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="250"
+   height="200"
+   id="svg3403"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:docname="icons.svg"
+   inkscape:export-filename="/home/fabio/public_html/friendika/view/theme/dispy/icons.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3405">
+    <filter
+       color-interpolation-filters="sRGB"
+       inkscape:collect="always"
+       id="filter4064">
+      <feBlend
+         inkscape:collect="always"
+         mode="lighten"
+         in2="BackgroundImage"
+         id="feBlend4066" />
+    </filter>
+    <inkscape:path-effect
+       effect="gears"
+       id="path-effect4050"
+       is_visible="true"
+       teeth="10"
+       phi="10" />
+    <inkscape:path-effect
+       effect="gears"
+       id="path-effect3436"
+       is_visible="true"
+       teeth="10"
+       phi="10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.9899495"
+     inkscape:cx="43.010429"
+     inkscape:cy="-67.661177"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-global="false"
+     inkscape:window-width="1534"
+     inkscape:window-height="1067"
+     inkscape:window-x="104"
+     inkscape:window-y="63"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4016"
+       empspacing="5"
+       visible="true"
+       enabled="false"
+       snapvisiblegridlinesonly="false"
+       spacingx="20px"
+       spacingy="20px"
+       dotted="false"
+       units="px"
+       originx="50px"
+       originy="200px" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid4018"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="false"
+       color="#ff0000"
+       opacity="0.1254902"
+       empcolor="#ff0000"
+       empopacity="0.25098039"
+       originy="200px"
+       spacingx="22px"
+       spacingy="22px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3408">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Livello 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-852.36218)">
+    <rect
+       style="fill:#2e3436;fill-opacity:1;stroke:none;display:inline"
+       id="rect4007"
+       width="44"
+       height="132"
+       x="1.5883562e-17"
+       y="852.36218"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <g
+       id="ico_dir"
+       transform="matrix(0.43114968,0,0,0.43114968,-178.47604,867.63556)"
+       style="stroke:#888a85;display:inline"
+       inkscape:label="#g3846">
+      <rect
+         ry="6"
+         rx="6"
+         y="18.790752"
+         x="417.14285"
+         height="44.285713"
+         width="44.285713"
+         id="rect3820"
+         style="fill:none;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#2e3436;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 449.12191,27.281249 c -2.07646,0 -3.76352,1.688406 -3.76352,3.766518 0,2.078113 1.68706,3.766518 3.76352,3.766518 2.07646,0 3.76351,-1.688405 3.76351,-3.766518 0,-2.078112 -1.68705,-3.766518 -3.76351,-3.766518 z m 0,7.533036 c -5.23267,0 -9.47459,5.783883 -9.47459,12.932589 0,0.201529 0.0196,0.406525 0.0264,0.605804 l 18.89654,0 c 0.007,-0.199279 0.0264,-0.404275 0.0264,-0.605804 0,-7.148706 -4.24192,-12.932589 -9.47459,-12.932589 z"
+         id="path3830" />
+      <path
+         id="path3832"
+         d="m 431.26477,26.924106 c -2.07646,0 -3.76352,1.688406 -3.76352,3.766518 0,2.078113 1.68706,3.766518 3.76352,3.766518 2.07646,0 3.76351,-1.688405 3.76351,-3.766518 0,-2.078112 -1.68705,-3.766518 -3.76351,-3.766518 z m 0,7.533036 c -5.23267,0 -9.47459,5.783883 -9.47459,12.932589 0,0.201529 0.0196,0.406525 0.0264,0.605804 l 18.89654,0 c 0.007,-0.199279 0.0264,-0.404275 0.0264,-0.605804 0,-7.148706 -4.24192,-12.932589 -9.47459,-12.932589 z"
+         style="fill:#2e3436;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3822"
+         d="M 439.46875,29.78125 C 437.00319,29.78125 435,31.784443 435,34.25 c 0,2.465557 2.00319,4.46875 4.46875,4.46875 2.46556,0 4.46875,-2.003193 4.46875,-4.46875 0,-2.465557 -2.00319,-4.46875 -4.46875,-4.46875 z m 0,8.9375 c -6.2132,0 -11.25,6.862234 -11.25,15.34375 0,0.239102 0.0233,0.482318 0.0313,0.71875 l 22.4375,0 c 0.008,-0.236432 0.0313,-0.479648 0.0313,-0.71875 0,-8.481516 -5.0368,-15.34375 -11.25,-15.34375 z"
+         style="fill:#2e3436;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       id="ico_search"
+       transform="matrix(0.43114968,0,0,0.43114968,-201.41936,889.63556)"
+       style="stroke:#888a85;display:inline"
+       inkscape:label="#g3852">
+      <rect
+         style="fill:none;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3837"
+         width="44.285713"
+         height="44.285713"
+         x="470.35715"
+         y="18.790752"
+         rx="6"
+         ry="6" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3839"
+         d="m 477.97758,26.469174 c -3.64342,3.88426 -3.47037,9.984211 0.41389,13.627637 3.52011,3.301856 8.87059,3.441123 12.55302,0.54905 -0.17428,0.682501 0.0188,1.431563 0.57086,1.949383 l 13.7666,12.913032 c 0.80813,0.75802 2.06896,0.717682 2.82698,-0.09044 l 0.68414,-0.729357 c 0.75802,-0.808126 0.71768,-2.06896 -0.0904,-2.82698 l -13.7666,-12.913032 c -0.55205,-0.51782 -1.31192,-0.66264 -1.98188,-0.445086 2.65077,-3.859767 2.16978,-9.190402 -1.35033,-12.492258 -3.88426,-3.643426 -9.9828,-3.426204 -13.62623,0.458055 z"
+         style="fill:#2e3436;fill-opacity:1;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         transform="translate(-0.21428562,-0.35714286)"
+         d="m 492.49999,33.612183 c 0,4.043513 -3.27792,7.321428 -7.32143,7.321428 -4.04352,0 -7.32143,-3.277915 -7.32143,-7.321428 0,-4.043514 3.27791,-7.321429 7.32143,-7.321429 4.04351,0 7.32143,3.277915 7.32143,7.321429 z"
+         sodipodi:ry="7.3214288"
+         sodipodi:rx="7.3214288"
+         sodipodi:cy="33.612183"
+         sodipodi:cx="485.17856"
+         id="path3844"
+         style="fill:#2e3436;fill-opacity:1;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+    </g>
+    <g
+       inkscape:label="#g3852"
+       style="stroke:#888a85;display:inline"
+       transform="matrix(0.43114968,0,0,0.43114968,-201.41936,845.63556)"
+       id="ico_logout">
+      <rect
+         ry="6"
+         rx="6"
+         y="18.790752"
+         x="470.35715"
+         height="44.285713"
+         width="44.285713"
+         id="rect3995"
+         style="fill:none;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:#555753;fill-opacity:1;stroke:#888a85;stroke-width:2.31938004"
+         d="M 504.69787,28.735741 480.30214,53.131477"
+         id="path4003"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4005"
+         d="M 504.69787,53.131473 480.30214,28.735746"
+         style="fill:#555753;fill-opacity:1;stroke:#888a85;stroke-width:2.31938004" />
+    </g>
+    <g
+       inkscape:label="#g3846"
+       style="stroke:#d3d7cf;display:inline"
+       transform="matrix(0.43114968,0,0,0.43114968,-156.47604,867.63556)"
+       id="ico_dir_on">
+      <rect
+         style="fill:none;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect4011"
+         width="44.285713"
+         height="44.285713"
+         x="417.14285"
+         y="18.790752"
+         rx="6"
+         ry="6" />
+      <path
+         id="path4013"
+         d="m 449.12191,27.281249 c -2.07646,0 -3.76352,1.688406 -3.76352,3.766518 0,2.078113 1.68706,3.766518 3.76352,3.766518 2.07646,0 3.76351,-1.688405 3.76351,-3.766518 0,-2.078112 -1.68705,-3.766518 -3.76351,-3.766518 z m 0,7.533036 c -5.23267,0 -9.47459,5.783883 -9.47459,12.932589 0,0.201529 0.0196,0.406525 0.0264,0.605804 l 18.89654,0 c 0.007,-0.199279 0.0264,-0.404275 0.0264,-0.605804 0,-7.148706 -4.24192,-12.932589 -9.47459,-12.932589 z"
+         style="fill:#2e3436;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#2e3436;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 431.26477,26.924106 c -2.07646,0 -3.76352,1.688406 -3.76352,3.766518 0,2.078113 1.68706,3.766518 3.76352,3.766518 2.07646,0 3.76351,-1.688405 3.76351,-3.766518 0,-2.078112 -1.68705,-3.766518 -3.76351,-3.766518 z m 0,7.533036 c -5.23267,0 -9.47459,5.783883 -9.47459,12.932589 0,0.201529 0.0196,0.406525 0.0264,0.605804 l 18.89654,0 c 0.007,-0.199279 0.0264,-0.404275 0.0264,-0.605804 0,-7.148706 -4.24192,-12.932589 -9.47459,-12.932589 z"
+         id="path4015" />
+      <path
+         style="fill:#2e3436;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="M 439.46875,29.78125 C 437.00319,29.78125 435,31.784443 435,34.25 c 0,2.465557 2.00319,4.46875 4.46875,4.46875 2.46556,0 4.46875,-2.003193 4.46875,-4.46875 0,-2.465557 -2.00319,-4.46875 -4.46875,-4.46875 z m 0,8.9375 c -6.2132,0 -11.25,6.862234 -11.25,15.34375 0,0.239102 0.0233,0.482318 0.0313,0.71875 l 22.4375,0 c 0.008,-0.236432 0.0313,-0.479648 0.0313,-0.71875 0,-8.481516 -5.0368,-15.34375 -11.25,-15.34375 z"
+         id="path4017"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       inkscape:label="#g3852"
+       style="stroke:#d3d7cf;display:inline"
+       transform="matrix(0.43114968,0,0,0.43114968,-179.41936,889.63556)"
+       id="ico_search_on">
+      <rect
+         ry="6"
+         rx="6"
+         y="18.790752"
+         x="470.35715"
+         height="44.285713"
+         width="44.285713"
+         id="rect4021"
+         style="fill:none;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:#2e3436;fill-opacity:1;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 477.97758,26.469174 c -3.64342,3.88426 -3.47037,9.984211 0.41389,13.627637 3.52011,3.301856 8.87059,3.441123 12.55302,0.54905 -0.17428,0.682501 0.0188,1.431563 0.57086,1.949383 l 13.7666,12.913032 c 0.80813,0.75802 2.06896,0.717682 2.82698,-0.09044 l 0.68414,-0.729357 c 0.75802,-0.808126 0.71768,-2.06896 -0.0904,-2.82698 l -13.7666,-12.913032 c -0.55205,-0.51782 -1.31192,-0.66264 -1.98188,-0.445086 2.65077,-3.859767 2.16978,-9.190402 -1.35033,-12.492258 -3.88426,-3.643426 -9.9828,-3.426204 -13.62623,0.458055 z"
+         id="path4023"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#2e3436;fill-opacity:1;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path4025"
+         sodipodi:cx="485.17856"
+         sodipodi:cy="33.612183"
+         sodipodi:rx="7.3214288"
+         sodipodi:ry="7.3214288"
+         d="m 492.49999,33.612183 c 0,4.043513 -3.27792,7.321428 -7.32143,7.321428 -4.04352,0 -7.32143,-3.277915 -7.32143,-7.321428 0,-4.043514 3.27791,-7.321429 7.32143,-7.321429 4.04351,0 7.32143,3.277915 7.32143,7.321429 z"
+         transform="translate(-0.21428562,-0.35714286)" />
+    </g>
+    <g
+       id="ico_logout_on"
+       transform="matrix(0.43114968,0,0,0.43114968,-179.41936,845.63556)"
+       style="stroke:#d3d7cf;display:inline"
+       inkscape:label="#g3852">
+      <rect
+         style="fill:none;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect4029"
+         width="44.285713"
+         height="44.285713"
+         x="470.35715"
+         y="18.790752"
+         rx="6"
+         ry="6" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4031"
+         d="M 504.69787,28.735741 480.30214,53.131477"
+         style="fill:#555753;fill-opacity:1;stroke:#d3d7cf;stroke-width:2.31938004" />
+      <path
+         style="fill:#555753;fill-opacity:1;stroke:#d3d7cf;stroke-width:2.31938004"
+         d="M 504.69787,53.131473 480.30214,28.735746"
+         id="path4033"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       inkscape:label="#g3852"
+       style="stroke:#888a85;display:inline;filter:url(#filter4064)"
+       transform="matrix(0.43114968,0,0,0.43114968,-201.41936,911.63556)"
+       id="g4040">
+      <rect
+         ry="6"
+         rx="6"
+         y="18.790752"
+         x="470.35715"
+         height="44.285713"
+         width="44.285713"
+         id="rect4042"
+         style="fill:none;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:#2e3436;fill-opacity:1;stroke:#888a85;stroke-width:1.66475451;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m 484.90604,52.679071 c 0,0 -0.72327,1.028211 -2.88202,1.697409 -0.63474,-0.494653 -1.23439,-1.034334 -1.79294,-1.613646 0.43889,-2.217071 1.3855,-3.044283 1.3855,-3.044283 l 2.04237,-1.648571 c -0.73879,-0.915258 -1.3342,-1.946011 -1.75793,-3.043257 l -2.44847,0.945549 c 0,0 -1.18951,0.40671 -3.32932,-0.320779 -0.22277,-0.773276 -0.39067,-1.56235 -0.50204,-2.359331 1.65823,-1.535673 2.91028,-1.648499 2.91028,-1.648499 l 2.62132,-0.133248 c -0.0597,-1.174706 0.0645,-2.358577 0.36658,-3.495332 l -2.53663,-0.674208 c 0,0 -1.20139,-0.37014 -2.50493,-2.216441 0.2743,-0.756533 0.60227,-1.4936 0.98062,-2.20383 2.24419,-0.267701 3.32343,0.376954 3.32343,0.376954 l 2.19901,1.432971 c 0.64217,-0.985455 1.43848,-1.870246 2.35108,-2.612309 l -1.65589,-2.03644 c 0,0 -0.75438,-1.005609 -0.72373,-3.265497 0.66659,-0.45082 1.36515,-0.854347 2.08871,-1.206542 1.97294,1.102524 2.46715,2.258424 2.46715,2.258424 l 0.93675,2.451844 c 1.09876,-0.419794 2.26306,-0.667544 3.43754,-0.731472 l -0.14265,-2.620822 c 0,0 -0.0192,-1.25697 1.3339,-3.067245 0.80426,0.02709 1.6066,0.111239 2.39899,0.251604 0.94809,2.051624 0.66849,3.277254 0.66849,3.277254 l -0.6833,2.534196 c 1.13566,0.306213 2.22322,0.790136 3.21097,1.428761 l 1.42508,-2.204138 c 0,0 0.72327,-1.028211 2.88202,-1.697409 0.63474,0.494653 1.23439,1.034334 1.79294,1.613646 -0.43889,2.217071 -1.3855,3.044283 -1.3855,3.044283 l -2.04237,1.648571 c 0.73879,0.915258 1.3342,1.946011 1.75793,3.043257 l 2.44847,-0.945549 c 0,0 1.18951,-0.40671 3.32932,0.320779 0.22277,0.773276 0.39067,1.56235 0.50204,2.359331 -1.65823,1.535673 -2.91028,1.648499 -2.91028,1.648499 l -2.62132,0.133248 c 0.0597,1.174706 -0.0645,2.358577 -0.36658,3.495332 l 2.53663,0.674208 c 0,0 1.20139,0.37014 2.50493,2.216441 -0.2743,0.756533 -0.60227,1.4936 -0.98062,2.20383 -2.24419,0.267701 -3.32343,-0.376954 -3.32343,-0.376954 l -2.19901,-1.432971 c -0.64217,0.985455 -1.43848,1.870246 -2.35108,2.612309 l 1.65589,2.03644 c 0,0 0.75438,1.005609 0.72373,3.265497 -0.66659,0.45082 -1.36515,0.854347 -2.08871,1.206542 -1.97294,-1.102524 -2.46715,-2.258424 -2.46715,-2.258424 l -0.93675,-2.451844 c -1.09876,0.419794 -2.26306,0.667544 -3.43754,0.731472 l 0.14265,2.620822 c 0,0 0.0192,1.25697 -1.3339,3.067245 -0.80426,-0.02709 -1.6066,-0.111239 -2.39899,-0.251604 -0.94809,-2.051624 -0.66849,-3.277254 -0.66849,-3.277254 l 0.6833,-2.534196 c -1.13566,-0.306213 -2.22322,-0.790136 -3.21097,-1.428761 l -1.42508,2.204138"
+         id="path4048"
+         inkscape:connector-curvature="0"
+         inkscape:path-effect="#path-effect4050"
+         inkscape:original-d="M 484.55417,49.762303 492.5,40.933609 504.27158,48.879434" />
+    </g>
+    <g
+       id="g4068"
+       transform="matrix(0.43114968,0,0,0.43114968,-179.41936,911.63556)"
+       style="stroke:#d3d7cf;display:inline;filter:url(#filter4064)"
+       inkscape:label="#g3852">
+      <rect
+         style="fill:none;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect4070"
+         width="44.285713"
+         height="44.285713"
+         x="470.35715"
+         y="18.790752"
+         rx="6"
+         ry="6" />
+      <path
+         inkscape:original-d="M 484.55417,49.762303 492.5,40.933609 504.27158,48.879434"
+         inkscape:path-effect="#path-effect4050"
+         inkscape:connector-curvature="0"
+         id="path4072"
+         d="m 484.90604,52.679071 c 0,0 -0.72327,1.028211 -2.88202,1.697409 -0.63474,-0.494653 -1.23439,-1.034334 -1.79294,-1.613646 0.43889,-2.217071 1.3855,-3.044283 1.3855,-3.044283 l 2.04237,-1.648571 c -0.73879,-0.915258 -1.3342,-1.946011 -1.75793,-3.043257 l -2.44847,0.945549 c 0,0 -1.18951,0.40671 -3.32932,-0.320779 -0.22277,-0.773276 -0.39067,-1.56235 -0.50204,-2.359331 1.65823,-1.535673 2.91028,-1.648499 2.91028,-1.648499 l 2.62132,-0.133248 c -0.0597,-1.174706 0.0645,-2.358577 0.36658,-3.495332 l -2.53663,-0.674208 c 0,0 -1.20139,-0.37014 -2.50493,-2.216441 0.2743,-0.756533 0.60227,-1.4936 0.98062,-2.20383 2.24419,-0.267701 3.32343,0.376954 3.32343,0.376954 l 2.19901,1.432971 c 0.64217,-0.985455 1.43848,-1.870246 2.35108,-2.612309 l -1.65589,-2.03644 c 0,0 -0.75438,-1.005609 -0.72373,-3.265497 0.66659,-0.45082 1.36515,-0.854347 2.08871,-1.206542 1.97294,1.102524 2.46715,2.258424 2.46715,2.258424 l 0.93675,2.451844 c 1.09876,-0.419794 2.26306,-0.667544 3.43754,-0.731472 l -0.14265,-2.620822 c 0,0 -0.0192,-1.25697 1.3339,-3.067245 0.80426,0.02709 1.6066,0.111239 2.39899,0.251604 0.94809,2.051624 0.66849,3.277254 0.66849,3.277254 l -0.6833,2.534196 c 1.13566,0.306213 2.22322,0.790136 3.21097,1.428761 l 1.42508,-2.204138 c 0,0 0.72327,-1.028211 2.88202,-1.697409 0.63474,0.494653 1.23439,1.034334 1.79294,1.613646 -0.43889,2.217071 -1.3855,3.044283 -1.3855,3.044283 l -2.04237,1.648571 c 0.73879,0.915258 1.3342,1.946011 1.75793,3.043257 l 2.44847,-0.945549 c 0,0 1.18951,-0.40671 3.32932,0.320779 0.22277,0.773276 0.39067,1.56235 0.50204,2.359331 -1.65823,1.535673 -2.91028,1.648499 -2.91028,1.648499 l -2.62132,0.133248 c 0.0597,1.174706 -0.0645,2.358577 -0.36658,3.495332 l 2.53663,0.674208 c 0,0 1.20139,0.37014 2.50493,2.216441 -0.2743,0.756533 -0.60227,1.4936 -0.98062,2.20383 -2.24419,0.267701 -3.32343,-0.376954 -3.32343,-0.376954 l -2.19901,-1.432971 c -0.64217,0.985455 -1.43848,1.870246 -2.35108,2.612309 l 1.65589,2.03644 c 0,0 0.75438,1.005609 0.72373,3.265497 -0.66659,0.45082 -1.36515,0.854347 -2.08871,1.206542 -1.97294,-1.102524 -2.46715,-2.258424 -2.46715,-2.258424 l -0.93675,-2.451844 c -1.09876,0.419794 -2.26306,0.667544 -3.43754,0.731472 l 0.14265,2.620822 c 0,0 0.0192,1.25697 -1.3339,3.067245 -0.80426,-0.02709 -1.6066,-0.111239 -2.39899,-0.251604 -0.94809,-2.051624 -0.66849,-3.277254 -0.66849,-3.277254 l 0.6833,-2.534196 c -1.13566,-0.306213 -2.22322,-0.790136 -3.21097,-1.428761 l -1.42508,2.204138"
+         style="fill:#2e3436;fill-opacity:1;stroke:#d3d7cf;stroke-width:1.66475451;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    </g>
+    <g
+       id="g4074"
+       transform="matrix(0.43114968,0,0,0.43114968,-201.41936,933.6356)"
+       style="stroke:#888a85;display:inline;filter:url(#filter4064)"
+       inkscape:label="#g3852">
+      <rect
+         style="fill:none;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect4076"
+         width="44.285713"
+         height="44.285713"
+         x="470.35715"
+         y="18.790752"
+         rx="6"
+         ry="6" />
+      <path
+         style="fill:#2e3436;fill-opacity:1;stroke:#888a85;stroke-width:0.79446769;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+         d="m 871.875,46.1875 c -1.86715,0.0095 -3.39179,1.39545 -3.65625,3.1875 -0.13267,-0.238038 -0.39472,-0.407705 -0.6875,-0.40625 L 860.21875,49 c -0.42864,0.0022 -0.75216,0.352585 -0.75,0.78125 l 0,0.375 c 0.002,0.428643 0.35273,0.783324 0.78125,0.78125 l 0.71875,0 c -0.017,0.04029 -0.0313,0.109644 -0.0313,0.15625 l 0,1.90625 c 0,0.186425 0.15733,0.34375 0.34375,0.34375 l 0.9375,0 c 0.18642,0 0.34375,-0.157325 0.34375,-0.34375 l 0,-1.90625 c 0,-0.04661 -0.0143,-0.115964 -0.0313,-0.15625 l 1.25,0 c -0.017,0.04029 -0.0313,0.109644 -0.0313,0.15625 l 0,1.90625 c 0,0.186425 0.15733,0.34375 0.34375,0.34375 l 0.9375,0 c 0.18642,0 0.34375,-0.157325 0.34375,-0.34375 l 0,-1.90625 c 0,-0.05736 -0.006,-0.140333 -0.0313,-0.1875 l 2.1875,0 c 0.29284,-0.0015 0.55725,-0.166865 0.6875,-0.40625 0.28274,1.789274 1.85161,3.165775 3.71875,3.15625 2.0603,-0.01052 3.69802,-1.720959 3.6875,-3.78125 -0.0105,-2.060291 -1.68969,-3.698024 -3.75,-3.6875 z"
+         transform="matrix(2.3193801,0,0,2.3193801,-1519.671,-74.824492)"
+         id="path3839-4"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       inkscape:label="#g3852"
+       style="stroke:#d3d7cf;display:inline;filter:url(#filter4064)"
+       transform="matrix(0.43114968,0,0,0.43114968,-179.41936,933.6356)"
+       id="g4106">
+      <rect
+         ry="6"
+         rx="6"
+         y="18.790752"
+         x="470.35715"
+         height="44.285713"
+         width="44.285713"
+         id="rect4108"
+         style="fill:none;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path4110"
+         transform="matrix(2.3193801,0,0,2.3193801,-1519.671,-74.824492)"
+         d="m 871.875,46.1875 c -1.86715,0.0095 -3.39179,1.39545 -3.65625,3.1875 -0.13267,-0.238038 -0.39472,-0.407705 -0.6875,-0.40625 L 860.21875,49 c -0.42864,0.0022 -0.75216,0.352585 -0.75,0.78125 l 0,0.375 c 0.002,0.428643 0.35273,0.783324 0.78125,0.78125 l 0.71875,0 c -0.017,0.04029 -0.0313,0.109644 -0.0313,0.15625 l 0,1.90625 c 0,0.186425 0.15733,0.34375 0.34375,0.34375 l 0.9375,0 c 0.18642,0 0.34375,-0.157325 0.34375,-0.34375 l 0,-1.90625 c 0,-0.04661 -0.0143,-0.115964 -0.0313,-0.15625 l 1.25,0 c -0.017,0.04029 -0.0313,0.109644 -0.0313,0.15625 l 0,1.90625 c 0,0.186425 0.15733,0.34375 0.34375,0.34375 l 0.9375,0 c 0.18642,0 0.34375,-0.157325 0.34375,-0.34375 l 0,-1.90625 c 0,-0.05736 -0.006,-0.140333 -0.0313,-0.1875 l 2.1875,0 c 0.29284,-0.0015 0.55725,-0.166865 0.6875,-0.40625 0.28274,1.789274 1.85161,3.165775 3.71875,3.15625 2.0603,-0.01052 3.69802,-1.720959 3.6875,-3.78125 -0.0105,-2.060291 -1.68969,-3.698024 -3.75,-3.6875 z"
+         style="fill:#2e3436;fill-opacity:1;stroke:#d3d7cf;stroke-width:0.79446769;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g4031-9"
+       transform="matrix(0.45818575,0.68148541,-0.68148541,0.45818575,-2.7897502,485.71067)"
+       style="display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <path
+         sodipodi:type="arc"
+         style="fill:#555753;fill-opacity:1;stroke:none"
+         id="path4002-3"
+         sodipodi:cx="559.67499"
+         sodipodi:cy="21.754047"
+         sodipodi:rx="0.88388348"
+         sodipodi:ry="0.88388348"
+         d="m 560.55887,21.754047 c 0,0.488156 -0.39573,0.883884 -0.88388,0.883884 -0.48816,0 -0.88389,-0.395728 -0.88389,-0.883884 0,-0.488155 0.39573,-0.883883 0.88389,-0.883883 0.48815,0 0.88388,0.395728 0.88388,0.883883 z"
+         transform="matrix(2.8,0,0,2.8,-999.63682,-35.444974)" />
+      <path
+         transform="matrix(2.1,0,0,2.1,-600.17454,-24.194616)"
+         d="m 560.55887,21.754047 c 0,0.488156 -0.39573,0.883884 -0.88388,0.883884 -0.48816,0 -0.88389,-0.395728 -0.88389,-0.883884 0,-0.488155 0.39573,-0.883883 0.88389,-0.883883 0.48815,0 0.88388,0.395728 0.88388,0.883883 z"
+         sodipodi:ry="0.88388348"
+         sodipodi:rx="0.88388348"
+         sodipodi:cy="21.754047"
+         sodipodi:cx="559.67499"
+         id="path4004-9"
+         style="fill:#555753;fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#555753;fill-opacity:1;stroke:none"
+         id="path4006-4"
+         sodipodi:cx="559.67499"
+         sodipodi:cy="21.754047"
+         sodipodi:rx="0.88388348"
+         sodipodi:ry="0.88388348"
+         d="m 560.55887,21.754047 c 0,0.488156 -0.39573,0.883884 -0.88388,0.883884 -0.48816,0 -0.88389,-0.395728 -0.88389,-0.883884 0,-0.488155 0.39573,-0.883883 0.88389,-0.883883 0.48815,0 0.88388,0.395728 0.88388,0.883883 z"
+         transform="matrix(2.2,0,0,2.2,-671.07968,-28.226177)" />
+      <path
+         style="fill:none;stroke:#555753;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 563.21055,31.653543 4.41942,-6.187185 -7.6014,-6.187184"
+         id="path4010-56"
+         inkscape:connector-curvature="0" />
+      <path
+         transform="matrix(2.4,0,0,2.4,-780.18625,-20.379394)"
+         d="m 560.55887,21.754047 c 0,0.488156 -0.39573,0.883884 -0.88388,0.883884 -0.48816,0 -0.88389,-0.395728 -0.88389,-0.883884 0,-0.488155 0.39573,-0.883883 0.88389,-0.883883 0.48815,0 0.88388,0.395728 0.88388,0.883883 z"
+         sodipodi:ry="0.88388348"
+         sodipodi:rx="0.88388348"
+         sodipodi:cy="21.754047"
+         sodipodi:cx="559.67499"
+         id="path4008-8"
+         style="fill:#555753;fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         style="fill:none;stroke:#555753;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 567.45319,25.466358 7.6014,-4.065864"
+         id="path4012-5"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:none;stroke:#555753;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       d="m 218.00001,881.25007 -5.8125,0 0,9.1875 10.53125,0 0,-5.2187"
+       id="rect4432"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4387-8"
+       width="14.5"
+       height="9"
+       x="173.12502"
+       y="858.11218"
+       rx="2.9268293"
+       ry="2.9268293"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4391-3"
+       sodipodi:cx="408.8125"
+       sodipodi:cy="220.26843"
+       sodipodi:rx="2.6875"
+       sodipodi:ry="2.71875"
+       d="m 411.5,220.26843 a 2.6875,2.71875 0 1 1 -5.375,0 2.6875,2.71875 0 1 1 5.375,0 z"
+       transform="matrix(1.1489362,0,0,1.1489362,-286.13697,609.51131)"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:#555753;stroke-width:0.47366244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 242.44524,860.13287 c -0.98011,0 -1.77562,0.6006 -1.77562,1.3586 l 0,1.5632 c 0,0.7581 0.79551,1.3733 1.77562,1.3733 l 4.53349,0 c 0.98012,0 1.77562,-0.6152 1.77562,-1.3733 l 0,-1.5632 c 0,-0.758 -0.7955,-1.3586 -1.77562,-1.3586 l -4.53349,0 z m 0.41557,1.0372 3.70235,0 c 0.51967,0 0.94448,0.2879 0.94448,0.6574 l 0,0.8912 c 0,0.3695 -0.42481,0.672 -0.94448,0.672 l -3.70235,0 c -0.51966,0 -0.94447,-0.3025 -0.94447,-0.672 l 0,-0.8912 c 0,-0.3695 0.42481,-0.6574 0.94447,-0.6574 z"
+       id="rect4397-0"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4418-4"
+       d="m 232.97199,860.13287 c -0.98011,0 -1.77562,0.6006 -1.77562,1.3586 l 0,1.5632 c 0,0.7581 0.79551,1.3733 1.77562,1.3733 l 4.53349,0 c 0.98012,0 1.77562,-0.6152 1.77562,-1.3733 l 0,-1.5632 c 0,-0.758 -0.7955,-1.3586 -1.77562,-1.3586 l -4.53349,0 z m 0.41557,1.0372 3.70236,0 c 0.51966,0 0.94447,0.2879 0.94447,0.6574 l 0,0.8912 c 0,0.3695 -0.42481,0.672 -0.94447,0.672 l -3.70236,0 c -0.51966,0 -0.94447,-0.3025 -0.94447,-0.672 l 0,-0.8912 c 0,-0.3695 0.42481,-0.6574 0.94447,-0.6574 z"
+       style="fill:#ffffff;fill-opacity:1;stroke:#555753;stroke-width:0.47366244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#555753;stroke-width:0.47366244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4395-0"
+       width="6.7246785"
+       height="1.6362466"
+       x="236.7028"
+       y="861.57312"
+       rx="1.0135853"
+       ry="0.81812328"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#555753;fill-opacity:1;stroke:none;display:inline"
+       id="rect4416-1"
+       width="14.495689"
+       height="6.5407376"
+       x="132.5179"
+       y="901.32971"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-size:5.54432058px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="139.36653"
+       y="900.60059"
+       id="text4406-9"
+       sodipodi:linespacing="100%"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan4408-6"
+         x="139.36653"
+         y="900.60059">You</tspan><tspan
+         sodipodi:role="line"
+         x="139.36653"
+         y="906.1449"
+         id="tspan4410-2"
+         style="fill:#eeeeec">Tube</tspan></text>
+    <path
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 118.03127,895.15627 0,0.3125 c 0,1.2601 -0.0643,3.4345 -0.35937,5.75 l -1.5625,1e-4 c -0.80183,0.011 -1.64766,4.0737 -1.60938,8.0625 l 8.25,0 c -0.057,-5.5479 1.56902,-11.5211 1.75,-5.6563 0.21453,6.9525 1.74237,-5.1823 1.75,-8.4687 z"
+       id="rect4428-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csccccscc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 124.78127,905.73727 -1.9375,-0.063"
+       id="path4440-4"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 117.59377,901.20597 6.4375,0"
+       id="path4442-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4446-9"
+       width="1.0625"
+       height="0.375"
+       x="115.28126"
+       y="908.11218"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="906.51843"
+       x="115.34376"
+       height="0.375"
+       width="1.0625"
+       id="rect4448-3"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4450-6"
+       width="1.0625"
+       height="0.375"
+       x="115.50001"
+       y="904.89343"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="903.42468"
+       x="115.81251"
+       height="0.375"
+       width="1.0625"
+       id="rect4452-0"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4454-5"
+       width="1.0625"
+       height="0.375"
+       x="116.21876"
+       y="902.17468"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="900.17468"
+       x="118.50001"
+       height="0.375"
+       width="1.0625"
+       id="rect4456-0"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4458-2"
+       width="1.0625"
+       height="0.375"
+       x="118.68751"
+       y="898.70593"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="897.20593"
+       x="118.75001"
+       height="0.375"
+       width="1.0625"
+       id="rect4460-9"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4462-4"
+       width="1.0625"
+       height="0.375"
+       x="118.75001"
+       y="895.79968"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="908.11218"
+       x="120.84376"
+       height="0.375"
+       width="1.0625"
+       id="rect4464-3"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4466-5"
+       width="1.0625"
+       height="0.375"
+       x="120.90627"
+       y="906.51843"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="904.89343"
+       x="121.06252"
+       height="0.375"
+       width="1.0625"
+       id="rect4468-1"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4470-7"
+       width="1.0625"
+       height="0.375"
+       x="121.37502"
+       y="903.42468"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="902.17468"
+       x="121.78127"
+       height="0.375"
+       width="1.0625"
+       id="rect4472-4"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4474-3"
+       width="1.0625"
+       height="0.375"
+       x="124.06252"
+       y="900.17468"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="898.70593"
+       x="124.25002"
+       height="0.375"
+       width="1.0625"
+       id="rect4476-1"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="rect4478-4"
+       width="1.0625"
+       height="0.375"
+       x="124.31252"
+       y="897.20593"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="895.79968"
+       x="124.31252"
+       height="0.375"
+       width="1.0625"
+       id="rect4480-6"
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <g
+       style="display:inline"
+       id="g4507-4"
+       transform="matrix(0.92823291,-0.48059851,0.48059851,0.92823291,-312.89954,806.76727)"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path4491-2"
+         d="m 310.75659,223.79453 c 0.76095,-0.8373 1.2453,-2.02269 1.2453,-3.35786 0,-1.33796 -0.48156,-2.54257 -1.2453,-3.38009"
+         style="fill:none;stroke:#555753;stroke-width:0.35579938;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#555753;stroke-width:0.47089946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 311.49266,224.75938 c 1.00712,-1.10816 1.64816,-2.67702 1.64816,-4.44411 0,-1.77079 -0.63735,-3.36509 -1.64816,-4.47354"
+         id="path4496-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csc" />
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path4498-6"
+         d="m 312.78041,226.18348 c 1.3429,-1.47763 2.19766,-3.56956 2.19766,-5.9258 0,-2.36118 -0.84984,-4.48703 -2.19766,-5.96505"
+         style="fill:none;stroke:#555753;stroke-width:0.62789989;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         inkscape:connector-curvature="0"
+         id="path4500-4"
+         d="m 309.34375,224.125 0,-7.375 -3.78125,2.07812 -3.4375,-0.10937 0,3.46875 3.4375,-0.125 z"
+         style="fill:none;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4515-2"
+       sodipodi:cx="284.78726"
+       sodipodi:cy="220.62782"
+       sodipodi:rx="7.4246211"
+       sodipodi:ry="7.4246211"
+       d="m 292.21188,220.62782 a 7.4246211,7.4246211 0 1 1 -14.84924,0 7.4246211,7.4246211 0 1 1 14.84924,0 z"
+       transform="translate(-224.73743,661.76263)"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0;display:inline"
+       d="m 53.15626,883.15627 c 1.94168,0.712 4.31843,1.1563 6.90625,1.1563 2.58782,0 4.96457,-0.4443 6.90625,-1.1563"
+       id="path4517-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       sodipodi:nodetypes="csc"
+       inkscape:connector-curvature="0"
+       id="path4528-8"
+       d="m 60.45665,888.82867 c 0.71191,-1.9416 1.15625,-4.3184 1.15625,-6.9062 0,-2.5878 -0.44434,-4.9646 -1.15625,-6.9063"
+       style="fill:none;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <text
+       xml:space="preserve"
+       style="font-size:3.72799897px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#555753;fill-opacity:1;stroke:none;display:inline;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="51.803352"
+       y="859.21899"
+       id="text4532-2"
+       sodipodi:linespacing="100%"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan4534-8"
+         x="51.803352"
+         y="859.21899"
+         style="font-weight:bold;fill:#555753;-inkscape-font-specification:Liberation Sans Bold">Lorem Ip</tspan></text>
+    <path
+       style="fill:#555753;fill-opacity:1;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0;display:inline"
+       d="m 52.25001,862.61227 15.25,0"
+       id="path4536-8"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4538-8"
+       d="m 52.25001,864.86227 15.25,0"
+       style="fill:#555753;fill-opacity:1;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:#555753;fill-opacity:1;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0;display:inline"
+       d="m 52.25001,867.11227 15.25,0"
+       id="path4540-6"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:0.82322329;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       d="m 242.49116,907.21887 5.125,-5.125 -5.125,-5.0937"
+       id="rect4544-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path4549-8"
+       d="m 237.98183,907.21887 -5.125,-5.125 5.125,-5.0937"
+       style="fill:none;stroke:#555753;stroke-width:0.82322329;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <g
+       style="display:inline"
+       id="g4213"
+       transform="translate(49.48448,-140.79121)"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <path
+         sodipodi:type="star"
+         style="fill:#555753;fill-opacity:1;stroke:none"
+         id="path4802"
+         sodipodi:sides="8"
+         sodipodi:cx="98.48214"
+         sodipodi:cy="-10.267858"
+         sodipodi:r1="9.1071424"
+         sodipodi:r2="8.4139032"
+         sodipodi:arg1="-1.5707963"
+         sodipodi:arg2="-1.1780972"
+         inkscape:flatsided="true"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 98.48214,-19.375 6.43972,2.66742 2.66742,6.439723 -2.66742,6.4397218 -6.439721,2.6674201 -6.439722,-2.6674204 -2.66742,-6.4397225 2.667421,-6.439722 z"
+         transform="matrix(0.92307692,0.3846154,-0.3846154,0.92307692,-44.340246,974.7537)" />
+      <path
+         transform="matrix(0.74691191,0.31121331,-0.31121331,0.74691191,-26.237457,980.1736)"
+         d="m 98.48214,-19.375 6.43972,2.66742 2.66742,6.439723 -2.66742,6.4397218 -6.439721,2.6674201 -6.439722,-2.6674204 -2.66742,-6.4397225 2.667421,-6.439722 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="true"
+         sodipodi:arg2="-1.1780972"
+         sodipodi:arg1="-1.5707963"
+         sodipodi:r2="8.4139032"
+         sodipodi:r1="9.1071424"
+         sodipodi:cy="-10.267858"
+         sodipodi:cx="98.48214"
+         sodipodi:sides="8"
+         id="path4804"
+         style="fill:none;stroke:#d3d7cf;stroke-width:2.47171569;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="star" />
+      <path
+         style="fill:none;stroke:#555753;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m 53.26552,1056.9525 -5.5,6.2008 5.5,6.2009"
+         id="rect4806"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccc" />
+      <path
+         id="path4812"
+         d="m 67.781143,1069.3407 5.46875,-6.2009 -5.46875,-6.1736"
+         style="fill:none;stroke:#555753;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccc" />
+    </g>
+    <path
+       style="fill:#555753;fill-opacity:1;stroke:none;display:inline"
+       id="path4257"
+       d="m 115.39024,855.00555 c 0.0904,0.0266 0.18708,0.0371 0.27111,0.0797 0.24682,0.12501 0.80382,0.53514 1.00046,0.67918 0.72548,0.53142 1.43751,1.08068 2.14837,1.63134 1.22364,0.99003 2.36274,2.09287 3.41202,3.2665 0.43117,0.4822 1.01205,1.207 1.42675,1.7166 0.97898,1.2314 2.022,2.4234 2.86791,3.7533 0.20576,0.2994 0.39551,0.6797 0.65579,0.9028 -0.10862,-0.1107 -0.10877,-0.099 0.0344,-0.01 0.19118,0.1291 -1.63528,2.8328 -1.82646,2.7036 l 0,0 c -0.18814,-0.022 -0.0511,0 -0.37755,-0.1793 -0.55628,-0.365 -1.09599,-0.7525 -1.61517,-1.1691 -1.27322,-1.0021 -2.36476,-2.2048 -3.47982,-3.3749 -1.53016,-1.5621 -3.0115,-3.1717 -4.57958,-4.6966 -0.94249,-1.01074 -1.92636,-2.0326 -2.54392,-3.28422 -0.14292,-0.18424 2.46273,-2.20539 2.60565,-2.02115 z"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:#555753;fill-opacity:1;stroke:none;display:inline"
+       id="path4259"
+       d="m 112.109,867.43007 c 0.0548,-0.091 0.10266,-0.1866 0.16432,-0.2731 0.23235,-0.3261 0.52565,-0.6137 0.79275,-0.9102 0.42229,-0.4689 0.38553,-0.4337 0.82852,-0.9537 1.44214,-1.6363 3.06836,-3.0981 4.69856,-4.5425 1.63203,-1.40989 3.17698,-2.9167 4.78859,-4.3486 0.46305,-0.4369 0.97793,-0.80137 1.52221,-1.12653 0.15824,-0.21119 3.14491,2.0267 2.98666,2.23789 l 0,0 c -0.2952,0.52243 -0.62275,1.02042 -1.01852,1.47475 -0.88192,1.11919 -1.78212,2.22369 -2.79371,3.23049 -0.29346,0.2921 -0.60222,0.5684 -0.90606,0.8497 -0.31321,0.2899 -0.63003,0.5759 -0.94504,0.8639 -1.67153,1.4209 -3.37366,2.8163 -5.22715,3.9963 -0.49876,0.3405 -0.57121,0.3777 -1.0203,0.7266 -0.39341,0.3057 -0.75974,0.6889 -1.26518,0.7962 -0.14292,0.1842 -2.74857,-1.8369 -2.60565,-2.0212 z"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 135.39024,855.00555 c 0.0904,0.027 0.18708,0.037 0.27111,0.08 0.24682,0.125 0.80382,0.5352 1.00046,0.6792 0.72548,0.5314 1.43751,1.0807 2.14837,1.6314 1.22364,0.99 2.36274,2.0928 3.41202,3.26652 0.43117,0.4822 1.01205,1.207 1.42675,1.7166 0.97898,1.2314 2.022,2.4234 2.86791,3.7533 0.20576,0.2994 0.39551,0.6797 0.65579,0.9028 -0.10862,-0.1107 -0.10877,-0.099 0.0344,-0.01 0.19118,0.1291 -1.63528,2.8328 -1.82646,2.7036 l 0,0 c -0.18814,-0.022 -0.0511,0 -0.37755,-0.1793 -0.55628,-0.365 -1.09599,-0.7525 -1.61517,-1.1691 -1.27322,-1.0021 -2.36476,-2.2048 -3.47982,-3.3749 -1.53016,-1.5621 -3.0115,-3.1717 -4.57958,-4.6966 -0.94249,-1.01082 -1.92636,-2.03262 -2.54392,-3.28432 -0.14292,-0.1842 2.46273,-2.2054 2.60565,-2.0211 z"
+       id="path4263"
+       style="fill:#d3d7cf;fill-opacity:1;stroke:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 132.109,867.43017 c 0.0548,-0.091 0.10266,-0.1866 0.16432,-0.2731 0.23235,-0.3261 0.52565,-0.6137 0.79275,-0.9102 0.42229,-0.4689 0.38553,-0.4337 0.82852,-0.9537 1.44214,-1.6363 3.06836,-3.0981 4.69856,-4.5425 1.63203,-1.40992 3.17698,-2.91672 4.78859,-4.34862 0.46305,-0.4369 0.97793,-0.8014 1.52221,-1.1266 0.15824,-0.2112 3.14491,2.0267 2.98666,2.2379 l 0,0 c -0.2952,0.5224 -0.62275,1.0204 -1.01852,1.4748 -0.88192,1.11922 -1.78212,2.22372 -2.79371,3.23052 -0.29346,0.2921 -0.60222,0.5684 -0.90606,0.8497 -0.31321,0.2899 -0.63003,0.5759 -0.94504,0.8639 -1.67153,1.4209 -3.37366,2.8163 -5.22715,3.9963 -0.49876,0.3405 -0.57121,0.3777 -1.0203,0.7266 -0.39341,0.3057 -0.75974,0.6889 -1.26518,0.7962 -0.14292,0.1842 -2.74857,-1.8369 -2.60565,-2.0212 z"
+       id="path4265"
+       style="fill:#d3d7cf;fill-opacity:1;stroke:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <g
+       style="display:inline"
+       id="g4283"
+       transform="matrix(0.52823691,0.52823691,-0.52823691,0.52823691,773.22931,294.0656)"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <path
+         sodipodi:nodetypes="ccccccc"
+         inkscape:connector-curvature="0"
+         id="path4269"
+         d="m -44.467884,1107.2152 0,17.7252 1.161165,3.7983 c 1.200046,4.2782 1.065706,4.1105 2.322331,0 l 1.161165,-3.7983 0,-17.7252 z"
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4271"
+         d="m -44.467884,1124.9404 4.644661,0"
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -42.239747,1107.2336 0,17.6813"
+         id="path4275"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0"
+         id="path4279"
+         d="m -43.348187,1128.4959 c 1.108441,-0.8952 1.929509,-0.3581 2.381097,0.045 -0.328428,1.1191 -1.190549,3.9391 -1.190549,3.9391 z"
+         style="fill:#555753;stroke:#555753;stroke-width:0.66930836;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         ry="0.42804927"
+         rx="0.37616169"
+         y="1105.3309"
+         x="-44.73621"
+         height="1.8614606"
+         width="5.1800866"
+         id="rect4281"
+         style="fill:#555753;fill-opacity:1;stroke:none" />
+    </g>
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="rect4290"
+       width="3.5355339"
+       height="1.8561553"
+       x="174.89275"
+       y="859.06403"
+       rx="1"
+       ry="1"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="m 214.75589,862.65317 c 3.31942,-0.632 4.06019,-2.1721 5.3033,-4.08897 0.42304,-0.6524 -0.64726,-2.63586 0,-3.13491 0.10703,-0.0825 0.93192,0 1.06066,0 2.52315,0 1.41421,3.50161 1.41421,4.77048 0,0.2317 -0.47723,0.6815 -0.17677,0.6815 2.44972,0 2.94209,0.3603 4.41942,1.4993 0.0697,0.054 0.31741,3.8443 0.17677,3.9527 -0.26074,0.201 -0.49042,0.5145 -0.7071,0.6815 -0.13627,0.105 0.38563,0.7684 0.17677,1.0904 -0.17664,0.2724 -0.85358,0.8061 -1.23743,0.9541 -0.36233,0.1398 -0.89015,0 -1.23744,0.1363 -1.96875,0.759 -2.1166,-0.9523 -3.18198,-1.363 -0.34866,-0.1344 -0.63592,-0.1088 -1.06066,-0.2726 -0.99671,-0.3842 -3.88909,0.6704 -3.88909,-0.2726 0,-1.2852 -0.2556,-3.5996 -1.06066,-4.6342 z"
+       id="path4292"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4294"
+       d="m 205.42921,862.12677 c -3.31942,0.632 -4.06019,2.1721 -5.3033,4.089 -0.42304,0.6524 0.64726,2.6358 0,3.1349 -0.10703,0.082 -0.93192,0 -1.06066,0 -2.52315,0 -1.41421,-3.5016 -1.41421,-4.7705 0,-0.2317 0.47723,-0.6815 0.17677,-0.6815 -2.44972,0 -2.94209,-0.3603 -4.41942,-1.4993 -0.0697,-0.054 -0.31741,-3.84428 -0.17677,-3.95268 0.26074,-0.201 0.49042,-0.5145 0.7071,-0.6815 0.13627,-0.105 -0.38563,-0.7684 -0.17677,-1.0904 0.17664,-0.2724 0.85358,-0.8061 1.23743,-0.9541 0.36233,-0.1398 0.89015,0 1.23744,-0.1363 1.96875,-0.759 2.1166,0.9523 3.18198,1.363 0.34866,0.1344 0.63592,0.1088 1.06066,0.2726 0.99671,0.3842 3.88909,-0.6704 3.88909,0.2726 0,1.2852 0.2556,3.59958 1.06066,4.63418 z"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       transform="translate(-204.73743,661.76269)"
+       d="m 292.21188,220.62782 a 7.4246211,7.4246211 0 1 1 -14.84924,0 7.4246211,7.4246211 0 1 1 14.84924,0 z"
+       sodipodi:ry="7.4246211"
+       sodipodi:rx="7.4246211"
+       sodipodi:cy="220.62782"
+       sodipodi:cx="284.78726"
+       id="path4298"
+       style="fill:none;stroke:#d3d7cf;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       sodipodi:type="arc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       sodipodi:nodetypes="csc"
+       inkscape:connector-curvature="0"
+       id="path4300"
+       d="m 73.15626,883.15627 c 1.94168,0.712 4.31843,1.1563 6.90625,1.1563 2.58782,0 4.96457,-0.4443 6.90625,-1.1563"
+       style="fill:none;stroke:#d3d7cf;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#d3d7cf;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 2;stroke-dashoffset:0;display:inline"
+       d="m 80.45665,888.82867 c 0.71191,-1.9416 1.15625,-4.3184 1.15625,-6.9062 0,-2.5878 -0.44434,-4.9646 -1.15625,-6.9063"
+       id="path4302"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       transform="translate(-184.73743,661.76263)"
+       d="m 292.21188,220.62782 a 7.4246211,7.4246211 0 1 1 -14.84924,0 7.4246211,7.4246211 0 1 1 14.84924,0 z"
+       sodipodi:ry="7.4246211"
+       sodipodi:rx="7.4246211"
+       sodipodi:cy="220.62782"
+       sodipodi:cx="284.78726"
+       id="path4306"
+       style="fill:none;stroke:#555753;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       sodipodi:type="arc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       d="m 94.285536,887.89997 11.048544,-11.0485"
+       id="path4308"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#555753;stroke:none;display:inline"
+       id="rect4310"
+       width="3.3587573"
+       height="12.020815"
+       x="115.93771"
+       y="876.12292"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       y="876.12292"
+       x="120.53392"
+       height="12.020815"
+       width="3.3587573"
+       id="rect4312"
+       style="fill:#555753;stroke:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:#555753;stroke:none;display:inline"
+       d="m 134.32248,876.12297 11.31371,6.0104 -11.31371,6.0104 z"
+       id="rect4314"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <g
+       style="display:inline"
+       transform="matrix(0.52823691,0.52823691,-0.52823691,0.52823691,773.22931,313.68781)"
+       id="g4317"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <path
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-miterlimit:4;stroke-dasharray:none"
+         d="m -44.467884,1107.2152 0,17.7252 1.161165,3.7983 c 1.200046,4.2782 1.065706,4.1105 2.322331,0 l 1.161165,-3.7983 0,-17.7252 z"
+         id="path4319"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccccc" />
+      <path
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -44.467884,1124.9404 4.644661,0"
+         id="path4321"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4323"
+         d="m -42.239747,1107.2336 0,17.6813"
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         style="fill:#555753;stroke:#555753;stroke-width:0.66930836;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+         d="m -43.348187,1128.4959 c 1.108441,-0.8952 1.929509,-0.3581 2.381097,0.045 -0.328428,1.1191 -1.190549,3.9391 -1.190549,3.9391 z"
+         id="path4325"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccc" />
+      <rect
+         style="fill:#555753;fill-opacity:1;stroke:none"
+         id="rect4327"
+         width="5.1800866"
+         height="1.8614606"
+         x="-44.73621"
+         y="1105.3309"
+         rx="0.37616169"
+         ry="0.42804927" />
+    </g>
+    <g
+       style="display:inline"
+       id="g4329"
+       transform="matrix(0.24508333,0.24508333,-0.24508333,0.24508333,458.00011,612.37085)"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <path
+         sodipodi:nodetypes="ccccccc"
+         inkscape:connector-curvature="0"
+         id="path4331"
+         d="m -44.467884,1107.2152 0,17.7252 1.161165,3.7983 c 1.200046,4.2782 1.065706,4.1105 2.322331,0 l 1.161165,-3.7983 0,-17.7252 z"
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4333"
+         d="m -44.467884,1124.9404 4.644661,0"
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         style="fill:none;stroke:#555753;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -42.239747,1107.2336 0,17.6813"
+         id="path4335"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0"
+         id="path4337"
+         d="m -43.348187,1128.4959 c 1.108441,-0.8952 1.929509,-0.3581 2.381097,0.045 -0.328428,1.1191 -1.190549,3.9391 -1.190549,3.9391 z"
+         style="fill:#555753;stroke:#555753;stroke-width:0.66930836;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         ry="0.42804927"
+         rx="0.37616169"
+         y="1105.3309"
+         x="-44.73621"
+         height="1.8614606"
+         width="5.1800866"
+         id="rect4339"
+         style="fill:#555753;fill-opacity:1;stroke:none" />
+    </g>
+    <g
+       id="layer1-2"
+       transform="matrix(0.03334717,0,0,0.03334717,191.57984,885.59897)"
+       style="fill:#555753;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <path
+         id="path11522"
+         style="fill:#555753;fill-opacity:1"
+         d="m 264.62704,45.67985 56.31152,-101.021534 0.2677,36.946034 118.51291,-0.267671 c 21.1765,-2.244605 39.74272,-10.852596 53.18801,-27.040291 C 449.99593,42.074998 437.6363,104.18491 348.60347,104.22236 l -27.39721,0 -0.2677,41.05114 -56.31152,-99.59365 z M 128.9798,105.11479 C 65.618201,85.84639 36.055796,7.7860213 7.07577,-47.220709 c 13.282679,12.076484 38.139773,29.363022 52.577167,29.364467 27.689982,0.06456 55.380063,0.116317 83.070083,0.174562 l 83.88712,0 -0.26776,122.43949 -0.26771,0.35698 -97.09487,0 z M 2.5,-79.206629 42.995596,-161.8012 3.5060915,-183.49253 l 118.3343785,0 57.2039,103.877161 -38.79429,-23.228801 c -12.44295,26.27544 -24.88589,52.550878 -37.32884,78.826316 C 88.601045,-24.268303 74.280847,-24.518751 59.960649,-24.769199 32.037317,-31.279427 12.61125,-53.254123 2.5,-79.206629 z m 395.45406,53.939396 -52.29561,-96.380927 105.66215,-63.98618 51.13531,102.449252 c 1.54832,24.517706 -38.03694,58.635841 -62.6066,58.370427 l -41.89525,-0.452572 z M 88.64259,-250.78088 l 53.98405,-80.90589 c 52.35957,-19.50079 82.68955,22.59846 101.8318,49.13587 l -50.86768,97.63029 -104.94817,-65.86027 z m 204.54178,43.54987 c -10.85783,-25.59753 -25.36515,-54.87764 -43.50654,-80.336 -16.24176,-22.7925 -35.86597,-42.67852 -50.7326,-51.5631 l 136.53974,-0.26767 c 24.52088,2.20137 36.43539,16.49668 49.43976,36.05358 l 19.63307,34.53651 30.34224,-19.3654 -57.11457,101.73554 -123.15347,0.26768 38.55237,-21.06114 z"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:none;stroke:#555753;display:inline"
+       d="m 219.92452,876.86347 1.33532,1.5307 -5.05101,4.4063 4.00584,4.592 5.05101,-4.4063 1.29423,1.4837 1.19091,-7.757 z"
+       id="rect4425"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#555753;fill-opacity:1;stroke:none;display:inline"
+       id="rect4564-9"
+       width="10.935946"
+       height="7.925663"
+       x="71.833412"
+       y="900.66992"
+       rx="1.9019035"
+       ry="2.3056474"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#555753;stroke-width:0.69802254;display:inline"
+       id="rect4566-9"
+       width="7.7661061"
+       height="7.5413885"
+       x="73.447395"
+       y="896.3468"
+       rx="1.9019035"
+       ry="2.3056474"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       ry="2.3056474"
+       rx="1.9019035"
+       y="900.66992"
+       x="92.208412"
+       height="7.925663"
+       width="10.935946"
+       id="rect4506"
+       style="fill:#555753;fill-opacity:1;stroke:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:0.69802254;display:inline"
+       d="m 108.78126,899.75007 0,-1.0938 c 0,-1.2773 -0.8526,-2.3124 -1.90625,-2.3124 l -3.96875,0 c -1.05366,0 -1.90625,1.0351 -1.90625,2.3124 l 0,2.9376"
+       id="rect4508"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cssssc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#555753;stroke:none;display:inline"
+       id="rect4514"
+       width="19.512196"
+       height="19.512196"
+       x="150.24391"
+       y="892.60608"
+       rx="2.9268293"
+       ry="2.9268293"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       ry="2.9268293"
+       rx="2.9268293"
+       y="892.60608"
+       x="170.24391"
+       height="19.512196"
+       width="19.512196"
+       id="rect4516"
+       style="fill:#555753;stroke:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       ry="2.3056474"
+       rx="1.9019035"
+       y="900.66992"
+       x="151.83342"
+       height="7.925663"
+       width="10.935946"
+       id="rect4518"
+       style="fill:#eeeeec;fill-opacity:1;stroke:none;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       ry="2.3056474"
+       rx="1.9019035"
+       y="896.3468"
+       x="153.4474"
+       height="7.5413885"
+       width="7.7661061"
+       id="rect4520"
+       style="fill:none;stroke:#eeeeec;stroke-width:0.69802254;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#eeeeec;fill-opacity:1;stroke:none;display:inline"
+       id="rect4522"
+       width="10.935946"
+       height="7.925663"
+       x="172.20842"
+       y="900.66992"
+       rx="1.9019035"
+       ry="2.3056474"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       sodipodi:nodetypes="cssssc"
+       inkscape:connector-curvature="0"
+       id="path4524"
+       d="m 188.78127,899.75007 0,-1.0938 c 0,-1.2773 -0.85259,-2.3124 -1.90625,-2.3124 l -3.96875,0 c -1.05365,0 -1.90625,1.0351 -1.90625,2.3124 l 0,2.9376"
+       style="fill:none;stroke:#eeeeec;stroke-width:0.69802254;display:inline"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       d="m 61.2575,895.73577 c -0.85405,0.9453 -1.14575,2.2161 -0.88721,3.3884 l -8.17918,8.1791 c -0.14244,0.1425 -0.12201,0.3935 0.0507,0.5661 l 2.21807,2.2181 c 0.17268,0.1727 0.42791,0.1974 0.57035,0.055 l 8.13693,-8.1369 c 1.26093,0.3161 2.65155,-0.016 3.63762,-1.0013 0.66189,-0.6619 1.02334,-1.5095 1.09849,-2.3744 l -2.11666,2.1167 -3.2405,-0.8746 -0.87454,-3.2405 2.14201,-2.1419 c -0.88104,0.066 -1.74292,0.4331 -2.41663,1.1068 -0.0467,0.047 -0.0968,0.09 -0.13942,0.1395 z"
+       id="path4529"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsssscscccccsc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#555753;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;display:inline"
+       d="m 201.14016,895.80807 -8.25003,8.25 -0.94202,3.5156 2.58822,2.5882 3.10935,-0.8332 10.50754,-10.5075 -2e-5,-2.3881 -1.69404,-1.694 -1.94401,0 -9.97205,9.972 3e-5,1.972 0.61101,0.611 1.73597,0 9.36804,-9.368"
+       id="path3395"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#555753;stroke:none;display:inline"
+       id="rect3397"
+       width="19.512196"
+       height="19.512196"
+       x="210.24391"
+       y="892.60608"
+       rx="2.9268293"
+       ry="2.9268293"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:none;stroke:#eeeeec;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       d="m 214.67284,895.14537 c 7.11789,-1.5098 3.04383,2.9586 9.72807,1.6024 0.48786,-0.099 0.94287,0.3982 0.94287,0.8928 0,0 0,6.7482 0,6.9956 0,0.2473 -0.31338,0.7228 -0.94287,0.8928 -6.70194,1.3208 -2.58353,-3.1887 -9.72807,-1.6024 -0.39933,0.17 -0.94286,-0.3982 -0.94286,-0.8928 l 0,-6.9955 c 0,-0.4947 0.45501,-0.776 0.94286,-0.8929 z"
+       id="rect3409"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccscccssc"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:none;stroke:#eeeeec;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="rect4190"
+       width="1.125"
+       height="16.3125"
+       x="212.62502"
+       y="894.73718"
+       ry="0.40000001"
+       rx="0.40000001"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       inkscape:export-ydpi="90"
+       inkscape:export-xdpi="90"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       transform="translate(-224.73743,701.76263)"
+       d="m 292.21188,220.62782 a 7.4246211,7.4246211 0 1 1 -14.84924,0 7.4246211,7.4246211 0 1 1 14.84924,0 z"
+       sodipodi:ry="7.4246211"
+       sodipodi:rx="7.4246211"
+       sodipodi:cy="220.62782"
+       sodipodi:cx="284.78726"
+       id="path4020"
+       style="fill:none;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#555753;fill-opacity:1;stroke:#555753;stroke-width:1.62554049;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4022"
+       sodipodi:cx="284.78726"
+       sodipodi:cy="220.62782"
+       sodipodi:rx="7.4246211"
+       sodipodi:ry="7.4246211"
+       d="m 292.21188,220.62782 a 7.4246211,7.4246211 0 1 1 -14.84924,0 7.4246211,7.4246211 0 1 1 14.84924,0 z"
+       transform="matrix(0.61517998,0,0,0.61517998,-115.14559,786.66463)"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       inkscape:export-ydpi="90"
+       inkscape:export-xdpi="90"
+       inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons2.png"
+       sodipodi:type="arc"
+       style="fill:none;stroke:#d3d7cf;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       id="path4024"
+       sodipodi:cx="284.78726"
+       sodipodi:cy="220.62782"
+       sodipodi:rx="7.4246211"
+       sodipodi:ry="7.4246211"
+       d="m 292.21188,220.62782 a 7.4246211,7.4246211 0 1 1 -14.84924,0 7.4246211,7.4246211 0 1 1 14.84924,0 z"
+       transform="translate(-204.73743,701.76269)" />
+    <g
+       inkscape:label="#g3852"
+       style="stroke:#888a85;display:inline;filter:url(#filter4064)"
+       transform="matrix(0.43114968,0,0,0.43114968,-201.41936,955.6356)"
+       id="g3139">
+      <rect
+         ry="6"
+         rx="6"
+         y="18.790752"
+         x="470.35715"
+         height="44.285713"
+         width="44.285713"
+         id="rect3141"
+         style="fill:none;stroke:#888a85;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       id="g3145"
+       transform="matrix(0.43114968,0,0,0.43114968,-179.41936,955.6356)"
+       style="stroke:#d3d7cf;display:inline;filter:url(#filter4064)"
+       inkscape:label="#g3852">
+      <rect
+         style="fill:none;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3147"
+         width="44.285713"
+         height="44.285713"
+         x="470.35715"
+         y="18.790752"
+         rx="6"
+         ry="6" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:17.09149551px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#888a85;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans Bold"
+       x="5.6234956"
+       y="979.64215"
+       id="text3151"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan3153"
+         x="5.6234956"
+         y="979.64215">?</tspan></text>
+    <text
+       sodipodi:linespacing="100%"
+       id="text3155"
+       y="979.64215"
+       x="27.623495"
+       style="font-size:17.09149551000000145px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#d3d7cf;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans Bold"
+       xml:space="preserve"><tspan
+         y="979.64215"
+         x="27.623495"
+         id="tspan3157"
+         sodipodi:role="line">?</tspan></text>
+  </g>
+</svg>
diff --git a/view/theme/testbubble/jot-header.tpl b/view/theme/testbubble/jot-header.tpl
new file mode 100644 (file)
index 0000000..0093bf8
--- /dev/null
@@ -0,0 +1,251 @@
+
+<script language="javascript" type="text/javascript" src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
+<script language="javascript" type="text/javascript">
+
+var editor=false;
+var textlen = 0;
+
+function initEditor(cb) {
+    if (editor==false) {
+        $("#profile-jot-text-loading").show();
+        tinyMCE.init({
+                theme : "advanced",
+                mode : "specific_textareas",
+                editor_selector: /(profile-jot-text|prvmail-text)/,
+                plugins : "bbcode,paste,fullscreen,autoresize",
+                theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code,fullscreen",
+                theme_advanced_buttons2 : "",
+                theme_advanced_buttons3 : "",
+                theme_advanced_toolbar_location : "top",
+                theme_advanced_toolbar_align : "center",
+                theme_advanced_blockformats : "blockquote,code",
+                //theme_advanced_resizing : true,
+                //theme_advanced_statusbar_location : "bottom",
+                paste_text_sticky : true,
+                entity_encoding : "raw",
+                add_unload_trigger : false,
+                remove_linebreaks : false,
+                force_p_newlines : false,
+                force_br_newlines : true,
+                forced_root_block : '',
+                convert_urls: false,
+                content_css: "$baseurl/view/custom_tinymce.css",
+                theme_advanced_path : false,
+                setup : function(ed) {
+                     //Character count
+                        ed.onKeyUp.add(function(ed, e) {
+                                var txt = tinyMCE.activeEditor.getContent();
+                                textlen = txt.length;
+                                if(textlen != 0 && $('#jot-perms-icon').is('.unlock')) {
+                                        $('#profile-jot-desc').html(ispublic);
+                                }
+                                else {
+                                        $('#profile-jot-desc').html('&nbsp;');
+                                }
+
+                                if(textlen <= 140) {
+                                        $('#character-counter').removeClass('red');
+                                        $('#character-counter').removeClass('orange');
+                                        $('#character-counter').addClass('grey');
+                                }
+                                if((textlen > 140) && (textlen <= 420)) {
+                                        $('#character-counter').removeClass('grey');
+                                        $('#character-counter').removeClass('red');
+                                        $('#character-counter').addClass('orange');
+                                }
+                                if(textlen > 420) {
+                                        $('#character-counter').removeClass('grey');
+                                        $('#character-counter').removeClass('orange');
+                                        $('#character-counter').addClass('red');
+                                }
+                                $('#character-counter').text(textlen);
+                        });
+                        ed.onInit.add(function(ed) {
+                                ed.pasteAsPlainText = true;
+                                $("#profile-jot-text-loading").hide();
+                                $("#profile-jot-submit-wrapper").show();
+                                $("#profile-upload-wrapper").show();
+                                $("#profile-attach-wrapper").show();
+                                $("#profile-link-wrapper").show();
+                                $("#profile-youtube-wrapper").show();
+                                $("#profile-video-wrapper").show();
+                                $("#profile-audio-wrapper").show();
+                                $("#profile-location-wrapper").show();
+                                $("#profile-nolocation-wrapper").show();
+                                $("#profile-title-wrapper").show();
+                                $("#profile-jot-plugin-wrapper").show();
+                                $("#character-counter").show();
+                                if (typeof cb!="undefined") cb();
+                        });
+                }
+        });
+        editor = true;
+        // setup acl popup
+        $("a#jot-perms-icon").fancybox({
+            'transitionIn' : 'none',
+            'transitionOut' : 'none'
+        }); 
+    } else {
+        if (typeof cb!="undefined") cb();
+    }
+} // initEditor
+</script>
+<script type="text/javascript" src="js/ajaxupload.js" ></script>
+<script>
+    var ispublic = '$ispublic';
+       $(document).ready(function() {
+                /* enable tinymce on focus */
+                $("#profile-jot-text").focus(function(){
+                    if (editor) return;
+                    $(this).val("");
+                    initEditor();
+                }); 
+               var uploader = new window.AjaxUpload(
+                       'wall-image-upload',
+                       { action: 'wall_upload/$nickname',
+                               name: 'userfile',
+                               onSubmit: function(file,ext) { $('#profile-rotator').show(); },
+                               onComplete: function(file,response) {
+                                       tinyMCE.execCommand('mceInsertRawHTML',false,response);
+                                       $('#profile-rotator').hide();
+                               }                                
+                       }
+               );
+               var file_uploader = new window.AjaxUpload(
+                       'wall-file-upload',
+                       { action: 'wall_attach/$nickname',
+                               name: 'userfile',
+                               onSubmit: function(file,ext) { $('#profile-rotator').show(); },
+                               onComplete: function(file,response) {
+                                       tinyMCE.execCommand('mceInsertRawHTML',false,response);
+                                       $('#profile-rotator').hide();
+                               }                                
+                       }
+               );              
+               $('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
+                       var selstr;
+                       $('#contact_allow option:selected, #contact_deny option:selected, #group_allow option:selected, #group_deny option:selected').each( function() {
+                               selstr = $(this).text();
+                               $('#jot-perms-icon').removeClass('unlock').addClass('lock');
+                               $('#jot-public').hide();
+                               $('.profile-jot-net input').attr('disabled', 'disabled');
+                       });
+                       if(selstr == null) { 
+                               $('#jot-perms-icon').removeClass('lock').addClass('unlock');
+                               $('#jot-public').show();
+                               $('.profile-jot-net input').attr('disabled', false);
+                       }
+
+               }).trigger('change');
+
+       });
+
+       function deleteCheckedItems() {
+               var checkedstr = '';
+
+               $('.item-select').each( function() {
+                       if($(this).is(':checked')) {
+                               if(checkedstr.length != 0) {
+                                       checkedstr = checkedstr + ',' + $(this).val();
+                               }
+                               else {
+                                       checkedstr = $(this).val();
+                               }
+                       }       
+               });
+               $.post('item', { dropitems: checkedstr }, function(data) {
+                       window.location.reload();
+               });
+       }
+
+       function jotGetLink() {
+               reply = prompt("$linkurl");
+               if(reply && reply.length) {
+                       reply = bin2hex(reply);
+                       $('#profile-rotator').show();
+                       $.get('parse_url?url=' + reply, function(data) {
+                               tinyMCE.execCommand('mceInsertRawHTML',false,data);
+                               $('#profile-rotator').hide();
+                       });
+               }
+       }
+
+       function jotGetVideo() {
+               reply = prompt("$utubeurl");
+               if(reply && reply.length) {
+                       tinyMCE.execCommand('mceInsertRawHTML',false,'[youtube]' + reply + '[/youtube]');
+               }
+       }
+
+       function jotVideoURL() {
+               reply = prompt("$vidurl");
+               if(reply && reply.length) {
+                       tinyMCE.execCommand('mceInsertRawHTML',false,'[video]' + reply + '[/video]');
+               }
+       }
+
+       function jotAudioURL() {
+               reply = prompt("$audurl");
+               if(reply && reply.length) {
+                       tinyMCE.execCommand('mceInsertRawHTML',false,'[audio]' + reply + '[/audio]');
+               }
+       }
+
+
+       function jotGetLocation() {
+               reply = prompt("$whereareu", $('#jot-location').val());
+               if(reply && reply.length) {
+                       $('#jot-location').val(reply);
+               }
+       }
+
+       function jotTitle() {
+               reply = prompt("$title", $('#jot-title').val());
+               if(reply && reply.length) {
+                       $('#jot-title').val(reply);
+               }
+       }
+
+       function jotShare(id) {
+               $('#like-rotator-' + id).show();
+               $.get('share/' + id, function(data) {
+                               if (!editor) $("#profile-jot-text").val("");
+                               initEditor(function(){
+                                       tinyMCE.execCommand('mceInsertRawHTML',false,data);
+                                       $('#like-rotator-' + id).hide();
+                                       $(window).scrollTop(0);
+                               });
+               });
+       }
+
+       function linkdropper(event) {
+               var linkFound = event.dataTransfer.types.contains("text/uri-list");
+               if(linkFound)
+                       event.preventDefault();
+       }
+
+       function linkdrop(event) {
+               var reply = event.dataTransfer.getData("text/uri-list");
+               event.target.textContent = reply;
+               event.preventDefault();
+               if(reply && reply.length) {
+                       $('#profile-rotator').show();
+                       $.get('parse_url?url=' + reply, function(data) {
+                               if (!editor) $("#profile-jot-text").val("");
+                               initEditor(function(){
+                                       tinyMCE.execCommand('mceInsertRawHTML',false,data);
+                                       $('#profile-rotator').hide();
+                               });
+                       });
+               }
+       }
+
+       function jotClearLocation() {
+               $('#jot-coord').val('');
+               $('#profile-nolocation-wrapper').hide();
+       }
+
+       $geotag
+
+</script>
+
diff --git a/view/theme/testbubble/jot.tpl b/view/theme/testbubble/jot.tpl
new file mode 100644 (file)
index 0000000..d60e8ad
--- /dev/null
@@ -0,0 +1,75 @@
+
+<div id="profile-jot-wrapper" > 
+       <div id="profile-jot-banner-wrapper">
+               <div id="profile-jot-desc" >&nbsp;</div>
+               <div id="character-counter" class="grey" style="display: none;">0</div>
+               <div id="profile-rotator-wrapper" style="display: $visitor;" >
+                       <img id="profile-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display:none;"  />
+               </div>          
+       </div>
+
+       <form id="profile-jot-form" action="$action" method="post" >
+               <input type="hidden" name="type" value="wall" />
+               <input type="hidden" name="profile_uid" value="$profile_uid" />
+               <input type="hidden" name="return" value="$return_path" />
+               <input type="hidden" name="location" id="jot-location" value="$defloc" />
+               <input type="hidden" name="coord" id="jot-coord" value="" />
+               <input type="hidden" name="title" id="jot-title" value="" />
+               <input type="hidden" name="post_id" value="$post_id" />
+
+                <img id="profile-jot-text-loading" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                <textarea rows="5" cols="64" class="profile-jot-text" id="profile-jot-text" name="body" >{{ if $content }}$content{{ else }}$share{{ endif }}</textarea>
+                {{ if $content }}<script>initEditor();</script>{{ endif }}
+
+       <div id="profile-upload-wrapper" class="jot-tool" style="display: none;" >
+               <div id="wall-image-upload-div" ><a onclick="return false;" id="wall-image-upload" class="icon border camera" title="$upload"></a></div>
+       </div>
+       <div id="profile-attach-wrapper" class="jot-tool" style="display: none;" >
+               <div id="wall-file-upload-div" ><a href="#" onclick="return false;" id="wall-file-upload" class="icon border attach" title="$attach"></a></div>
+       </div>  
+       <div id="profile-link-wrapper" class="jot-tool" style="display: none;" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" >
+               <a id="profile-link" class="icon border  link" title="$weblink" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;"></a>
+       </div> 
+       <div id="profile-youtube-wrapper" class="jot-tool" style="display: none;" >
+               <a id="profile-youtube" class="icon border  youtube" title="$youtube" onclick="jotGetVideo(); return false;"></a>
+       </div> 
+       <div id="profile-video-wrapper" class="jot-tool" style="display: none;" >
+               <a id="profile-video" class="icon border  video" title="$video" onclick="jotVideoURL(); return false;"></a>
+       </div> 
+       <div id="profile-audio-wrapper" class="jot-tool" style="display: none;" >
+               <a id="profile-audio" class="icon border  audio" title="$audio" onclick="jotAudioURL(); return false;"></a>
+       </div> 
+       <div id="profile-location-wrapper" class="jot-tool" style="display: none;" >
+               <a id="profile-location" class="icon border  globe" title="$setloc" onclick="jotGetLocation(); return false;"></a>
+       </div> 
+       <div id="profile-nolocation-wrapper" class="jot-tool" style="display: none;" >
+               <a id="profile-nolocation" class="icon border  noglobe" title="$noloc" onclick="jotClearLocation(); return false;"></a>
+       </div> 
+       <div id="profile-title-wrapper" class="jot-tool" style="display: none;" >
+               <a id="profile-title" class="icon border  article" title="$title" onclick="jotTitle(); return false;"></a>
+       </div> 
+
+       <div id="profile-jot-submit-wrapper" style="display:none;padding-left: 400px;">
+               <input type="submit" id="profile-jot-submit" name="submit" value="$share" />
+               <div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" >
+            <a href="#profile-jot-acl-wrapper" id="jot-perms-icon" class="icon $lockstate sharePerms" title="$permset"></a>$bang</div>
+       </div>
+
+       <div id="profile-jot-plugin-wrapper" style="display: none;">
+       $jotplugins
+       </div>
+       <div id="profile-jot-tools-end"></div>
+       
+        <div style="display: none;">
+            <div id="profile-jot-acl-wrapper" style="width:auto;height:auto;overflow:auto;">
+                $acl
+                <hr style="clear:both"/>
+                <div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle" />
+                <div id="profile-jot-email-end"></div>
+                $jotnets
+            </div>
+        </div>
+
+<div id="profile-jot-end"></div>
+</form>
+</div>
diff --git a/view/theme/testbubble/login-bg.gif b/view/theme/testbubble/login-bg.gif
new file mode 100644 (file)
index 0000000..cde836c
Binary files /dev/null and b/view/theme/testbubble/login-bg.gif differ
diff --git a/view/theme/testbubble/login.tpl b/view/theme/testbubble/login.tpl
new file mode 100644 (file)
index 0000000..c17950e
--- /dev/null
@@ -0,0 +1,25 @@
+
+<form action="" method="post" >
+       <input type="hidden" name="auth-params" value="login" />
+       <div id="login-name-wrapper">
+               <label for="login-name" id="label-login-name">$namelabel</label>
+               <input type="text" maxlength="60" name="openid_url" class="$classname" id="login-name" value="" />
+       </div>
+       <div id="login-name-end" ></div>
+       <div id="login-password-wrapper">
+               <label for="login-password" id="label-login-password">$passlabel</label>
+               <input type="password" maxlength="60" name="password" id="login-password" value="" />
+       </div>
+       <div id="login-password-end"></div>
+       <div id="login-submit-wrapper" >
+               <input type="submit" name="submit" id="login-submit-button" value="$login" />
+                       <a href="lostpass" title="$lostpass" id="lost-password-link" >$lostlink</a>
+       </div>
+       <div id="login-submit-end"></div>
+       <div id="login-extra-links" class=".button">
+               <div id="login-extra-filler">&nbsp;</div>
+               $register_html
+       </div>
+       <div id="login-extra-end"></div>
+</form>
+
diff --git a/view/theme/testbubble/lrarrow.gif b/view/theme/testbubble/lrarrow.gif
new file mode 100644 (file)
index 0000000..fa26769
Binary files /dev/null and b/view/theme/testbubble/lrarrow.gif differ
diff --git a/view/theme/testbubble/mail_head.tpl b/view/theme/testbubble/mail_head.tpl
new file mode 100644 (file)
index 0000000..2a4596c
--- /dev/null
@@ -0,0 +1,7 @@
+<h3>$messages</h3>
+
+<ul class="tabs-wrapper">
+<li><a href="message" class="tabs button {{if $activetab==inbox}}active{{endif}}">$inbox</a></li>
+<li><a href="message/sent" class="tabs button {{if $activetab==sent}}active{{endif}}">$outbox</a></li>
+<li><a href="message/new" class="tabs button {{if $activetab==new}}active{{endif}}">$new</a></li>
+</ul>
diff --git a/view/theme/testbubble/match.tpl b/view/theme/testbubble/match.tpl
new file mode 100644 (file)
index 0000000..49c3c81
--- /dev/null
@@ -0,0 +1,10 @@
+<div class="profile-match-wrapper">
+       <div class="profile-match-photo">
+               <a href="$url">
+                       <img src="$photo" alt="$name" />
+               </a>
+       </div>
+       <span><a href="$url">$name</a> is interested in:<br />$tags</span>
+       <div class="profile-match-break"></div>
+       <div class="profile-match-end"></div>
+</div>
\ No newline at end of file
diff --git a/view/theme/testbubble/menu-user-pin.jpg b/view/theme/testbubble/menu-user-pin.jpg
new file mode 100644 (file)
index 0000000..2644956
Binary files /dev/null and b/view/theme/testbubble/menu-user-pin.jpg differ
diff --git a/view/theme/testbubble/menu-user-pin.png b/view/theme/testbubble/menu-user-pin.png
new file mode 100644 (file)
index 0000000..6becfbb
Binary files /dev/null and b/view/theme/testbubble/menu-user-pin.png differ
diff --git a/view/theme/testbubble/nav.tpl b/view/theme/testbubble/nav.tpl
new file mode 100644 (file)
index 0000000..38d2dfa
--- /dev/null
@@ -0,0 +1,55 @@
+<nav>
+       $langselector
+
+       <span id="banner">$banner</span>
+
+       <div id="notifications">
+               {{ if $nav.network }}<a id="net-update" class="nav-ajax-update" href="$nav.network.0" title="$nav.network.1"></a>{{ endif }}
+               {{ if $nav.home }}<a id="home-update" class="nav-ajax-update" href="$nav.home.0" title="$nav.home.1"></a>{{ endif }}
+               {{ if $nav.notifications }}<a id="notify-update" class="nav-ajax-update" href="$nav.notifications.0" title="$nav.notifications.1"></a>{{ endif }}
+               {{ if $nav.messages }}<a id="mail-update" class="nav-ajax-update" href="$nav.messages.0" title="$nav.messages.1"></a>{{ endif }}
+       </div>
+
+       <div id="user-menu" >
+               <a id="user-menu-label" onclick="openClose('user-menu-popup'); return false" href="$nav.home.0">$sitelocation</a>
+               
+               <ul id="user-menu-popup" 
+                        onmouseover="if (typeof tmenu != 'undefined') clearTimeout(tmenu); openMenu('user-menu-popup')" 
+                        onmouseout="tmenu=setTimeout('closeMenu(\'user-menu-popup\');',200)">
+
+                       {{ if $nav.register }}<li><a id="nav-register-link" class="nav-commlink $nav.register.2" href="$nav.register.0">$nav.register.1</a></li>{{ endif }}
+                       
+                       {{ if $nav.home }}<li><a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0">$nav.home.1</a></li>{{ endif }}
+               
+                       {{ if $nav.network }}<li><a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0">$nav.network.1</a></li>{{ endif }}
+               
+                               {{ if $nav.community }}
+                               <li><a id="nav-community-link" class="nav-commlink $nav.community.2" href="$nav.community.0">$nav.community.1</a></li>
+                               {{ endif }}
+
+                       <li><a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0">$nav.search.1</a></li>
+                       <li><a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0">$nav.directory.1</a></li>
+                       {{ if $nav.apps }}<li><a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0">$nav.apps.1</a></li>{{ endif }}
+                       
+                       {{ if $nav.notifications }}<li><a id="nav-notify-link" class="nav-commlink nav-sep $nav.notifications.2" href="$nav.notifications.0">$nav.notifications.1</a></li>{{ endif }}
+                       {{ if $nav.messages }}<li><a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0">$nav.messages.1</a></li>{{ endif }}
+                       {{ if $nav.contacts }}<li><a id="nav-contacts-link" class="nav-commlink $nav.contacts.2" href="$nav.contacts.0">$nav.contacts.1</a></li>{{ endif }}
+               
+                       {{ if $nav.profiles }}<li><a id="nav-profiles-link" class="nav-commlink nav-sep $nav.profiles.2" href="$nav.profiles.0">$nav.profiles.1</a></li>{{ endif }}
+                       {{ if $nav.settings }}<li><a id="nav-settings-link" class="nav-commlink $nav.settings.2" href="$nav.settings.0">$nav.settings.1</a></li>{{ endif }}
+                       
+                       {{ if $nav.manage }}<li><a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0">$nav.manage.1</a></li>{{ endif }}
+               
+                       {{ if $nav.admin }}<li><a id="nav-admin-link" class="nav-commlink $nav.admin.2" href="$nav.admin.0">$nav.admin.1</a></li>{{ endif }}
+                       
+                       <li><a id="nav-help-link" class="nav-link $nav.help.2" href="$nav.help.0">$nav.help.1</a></li>
+
+                       {{ if $nav.login }}<li><a id="nav-login-link" class="nav-link $nav.login.2" href="$nav.login.0">$nav.login.1</a></li> {{ endif }}
+                       {{ if $nav.logout }}<li><a id="nav-logout-link" class="nav-commlink nav-sep $nav.logout.2" href="$nav.logout.0">$nav.logout.1</a></li> {{ endif }}
+               </ul>
+       </div>
+
+
+
+</nav>
+
diff --git a/view/theme/testbubble/next.png b/view/theme/testbubble/next.png
new file mode 100644 (file)
index 0000000..353e2e7
Binary files /dev/null and b/view/theme/testbubble/next.png differ
diff --git a/view/theme/testbubble/notifications.png b/view/theme/testbubble/notifications.png
new file mode 100644 (file)
index 0000000..803257f
Binary files /dev/null and b/view/theme/testbubble/notifications.png differ
diff --git a/view/theme/testbubble/photo-menu.jpg b/view/theme/testbubble/photo-menu.jpg
new file mode 100644 (file)
index 0000000..b96a96f
Binary files /dev/null and b/view/theme/testbubble/photo-menu.jpg differ
diff --git a/view/theme/testbubble/photo_album.tpl b/view/theme/testbubble/photo_album.tpl
new file mode 100644 (file)
index 0000000..a0e3f46
--- /dev/null
@@ -0,0 +1,8 @@
+<div class="photo-album-image-wrapper" id="photo-album-image-wrapper-$id">
+       <a href="$photolink" class="photo-album-photo-link" id="photo-album-photo-link-$id" title="$phototitle">
+               <img src="$imgsrc" alt="$imgalt" title="$phototitle" class="photo-album-photo lframe  resize" id="photo-album-photo-$id" />
+       </div>
+               <p class='caption'>$desc</p>            
+       </a>
+       </div>
+<div class="photo-album-image-wrapper-end"></div>
diff --git a/view/theme/testbubble/photo_top.tpl b/view/theme/testbubble/photo_top.tpl
new file mode 100644 (file)
index 0000000..d552409
--- /dev/null
@@ -0,0 +1,8 @@
+
+<div class="photo-top-image-wrapper lframe" id="photo-top-image-wrapper-$id">
+       <div id="photo-album-wrapper-inner">
+       <a href="$photolink" class="photo-top-photo-link" id="photo-top-photo-link-$id" title="$phototitle"><img src="$imgsrc" alt="$imgalt" title="$phototitle" class="photo-top-photo" id="photo-top-photo-$id" /></a>
+       </div>
+       <div class="photo-top-album-name"><a href="$albumlink" class="photo-top-album-link" title="$albumalt" >$albumname</a></div>
+</div>
+<div class="photo-top-image-wrapper-end"></div>
diff --git a/view/theme/testbubble/photo_view.tpl b/view/theme/testbubble/photo_view.tpl
new file mode 100644 (file)
index 0000000..4c754f5
--- /dev/null
@@ -0,0 +1,40 @@
+<div id="live-display"></div>
+<h3><a href="$album.0">$album.1</a></h3>
+
+<div id="photo-edit-link-wrap">
+{{ if $tools }}
+<a id="photo-edit-link" href="$tools.edit.0">$tools.edit.1</a>
+-
+<a id="photo-toprofile-link" href="$tools.profile.0">$tools.profile.1</a>
+{{ endif }}
+{{ if $lock }} - <img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,'photo$id');" /> {{ endif }}
+</div>
+
+<div id="photo-photo" class="lframe">
+       {{ if $prevlink }}<div id="photo-prev-link"><a href="$prevlink.0">$prevlink.1</a></div>{{ endif }}
+       <a href="$photo.href" title="$photo.title"><img src="$photo.src" /></a>
+       {{ if $nextlink }}<div id="photo-next-link"><a href="$nextlink.0">$nextlink.1</a></div>{{ endif }}
+</div>
+
+<div id="photo-photo-end"></div>
+<div id="photo-caption" >$desc</div>
+{{ if $tags }}
+<div id="in-this-photo-text">$tags.0</div>
+<div id="in-this-photo">$tags.1</div>
+{{ endif }}
+{{ if $tags.2 }}<div id="tag-remove"><a href="$tags.2">$tags.3</a></div>{{ endif }}
+
+{{ if $edit }}$edit{{ endif }}
+
+{{ if $likebuttons }}
+<div id="photo-like-div">
+       $likebuttons
+       $like
+       $dislike        
+</div>
+{{ endif }}
+
+$comments
+
+$paginate
+
diff --git a/view/theme/testbubble/photography.png b/view/theme/testbubble/photography.png
new file mode 100644 (file)
index 0000000..7ec919f
Binary files /dev/null and b/view/theme/testbubble/photography.png differ
diff --git a/view/theme/testbubble/premium.png b/view/theme/testbubble/premium.png
new file mode 100644 (file)
index 0000000..1ad601c
Binary files /dev/null and b/view/theme/testbubble/premium.png differ
diff --git a/view/theme/testbubble/prev.png b/view/theme/testbubble/prev.png
new file mode 100644 (file)
index 0000000..0ae6022
Binary files /dev/null and b/view/theme/testbubble/prev.png differ
diff --git a/view/theme/testbubble/profile_entry.tpl b/view/theme/testbubble/profile_entry.tpl
new file mode 100644 (file)
index 0000000..5bea298
--- /dev/null
@@ -0,0 +1,11 @@
+
+<div class="profile-listing" >
+<div class="profile-listing-photo-wrapper" >
+<a href="profiles/$id" class="profile-listing-edit-link"><img class="profile-listing-photo mframe" id="profile-listing-photo-$id" src="$photo" alt="$alt" /></a>
+</div>
+<div class="profile-listing-photo-end"></div>
+<div class="profile-listing-name" id="profile-listing-name-$id"><a href="profiles/$id" class="profile-listing-edit-link" >$profile_name</a></div>
+<div class='profile-visible'>$visible</div>
+</div>
+<div class="profile-listing-end"></div>
+
diff --git a/view/theme/testbubble/profile_tabs.tpl b/view/theme/testbubble/profile_tabs.tpl
new file mode 100644 (file)
index 0000000..ae7c65e
--- /dev/null
@@ -0,0 +1,9 @@
+
+<div class="tabs-wrapper" >
+       <a href="$url" id="profile-tab-status-link" class="button tabs {{if $activetab==posts}}active{{endif}}" >$status</a>
+       <a href="$url?tab=profile" id="profile-tab-profile-link" class="button tabs {{if $activetab==profile}}active{{endif}}" >$profile</a>
+       <a href="$phototab" id="profile-tab-photos-link" class="button tabs {{if $activetab==photos}}active{{endif}}" >$photos</a>
+       {{ if $events }}<a href="events" id="profile-tab-events-link" class="button tabs {{if $activetab==events}}active{{endif}}" >$events</a>{{ endif }}
+       {{ if $notes }}<a href="notes" id="profile-tab-notes-link" class="button tabs {{if $activetab==notes}}active{{endif}}" >$notes</a>{{ endif }}   
+<div class="tabs-end"></div>
+</div>
diff --git a/view/theme/testbubble/profile_vcard.tpl b/view/theme/testbubble/profile_vcard.tpl
new file mode 100644 (file)
index 0000000..0ee6919
--- /dev/null
@@ -0,0 +1,45 @@
+<div class="vcard">
+       <div class="fn label">$profile.name</div>
+                               
+       
+       {{ if $pdesc }}<div class="title">$profile.pdesc</div>{{ endif }}
+       <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="$profile.photo" alt="$profile.name"></div>
+
+
+
+       {{ if $location }}
+               <dl class="location"><dt class="location-label">$location</dt> 
+               <dd class="adr">
+                       {{ if $profile.address }}<div class="street-address">$profile.address</div>{{ endif }}
+                       <span class="city-state-zip">
+                               <span class="locality">$profile.locality</span>{{ if $profile.locality }}, {{ endif }}
+                               <span class="region">$profile.region</span>
+                               <span class="postal-code">$profile.postal-code</span>
+                       </span>
+                       {{ if $profile.country-name }}<span class="country-name">$profile.country-name</span>{{ endif }}
+               </dd>
+               </dl>
+       {{ endif }}
+
+       {{ if $gender }}<dl class="mf"><dt class="gender-label">$gender</dt> <dd class="x-gender">$profile.gender</dd></dl>{{ endif }}
+       
+       {{ if $profile.pubkey }}<div class="key" style="display:none;">$profile.pubkey</div>{{ endif }}
+
+       {{ if $marital }}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>$marital</dt><dd class="marital-text">$profile.marital</dd></dl>{{ endif }}
+
+       {{ if $homepage }}<dl class="homepage"><dt class="homepage-label">$homepage</dt><dd class="homepage-url"><a href="$profile.homepage" target="external-link">$profile.homepage</a></dd></dl>{{ endif }}
+
+       {{ inc diaspora_vcard.tpl }}{{ endinc }}
+       
+       <div id="profile-extra-links">
+               <ul>
+                       {{ if $connect }}
+                               <li><a id="dfrn-request-link" href="dfrn_request/$profile.nickname">$connect</a></li>
+                       {{ endif }}
+               </ul>
+       </div>
+</div>
+
+$contact_block
+
+
diff --git a/view/theme/testbubble/search.png b/view/theme/testbubble/search.png
new file mode 100644 (file)
index 0000000..51c4285
Binary files /dev/null and b/view/theme/testbubble/search.png differ
diff --git a/view/theme/testbubble/search_item.tpl b/view/theme/testbubble/search_item.tpl
new file mode 100644 (file)
index 0000000..1762983
--- /dev/null
@@ -0,0 +1,48 @@
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper mframe" id="wall-item-photo-wrapper-$id" 
+                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                                       <ul>
+                                               $item_photo_menu
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="wall-item-photo-end"></div> 
+                       <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>
+               </div>
+               <div class="wall-item-lock-wrapper">
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }}                 
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-author">
+                               <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+                               
+               </div>                  
+               
+       </div>
+       <div class="wall-item-conv" id="wall-item-conv-$id" >
+       {{ if $conv }}<a href='$conv.href' id='context-$id' title='$conv.title'>$conv.title</a>{{ endif }}
+       </div>
+       <div class="wall-item-wrapper-end"></div>
+</div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
diff --git a/view/theme/testbubble/star.png b/view/theme/testbubble/star.png
new file mode 100644 (file)
index 0000000..a327ba1
Binary files /dev/null and b/view/theme/testbubble/star.png differ
diff --git a/view/theme/testbubble/style.css b/view/theme/testbubble/style.css
new file mode 100644 (file)
index 0000000..a468296
--- /dev/null
@@ -0,0 +1,2960 @@
+/*
+       style.css
+       TestBubble
+   
+       Created by Anne Walk and Devlon Duthie on 2011-09-24.
+       Based loosely on the Dipsy theme.
+*/
+/* ========== */
+/* = Colors
+Red links - #b20202
+Red link hover - #db0503
+Red Gradients (buttons and other gradients) - #b20202 and #d60808
+Grey/body text - #626262
+Grey Gradients (buttons and other gradients) - #bdbdbd and #a2a2a2
+Dark Grey Gradients - #7c7d7b and #555753
+
+You can switch out the colors of the header, buttons and links by using a find and replace in your text editor.
+
+ = */
+/* ========== */
+
+body {
+       margin: 0px;
+       padding: 0px;
+       font-family: freesans,helvetica,arial,clean,sans-serif;
+       font-size: 15px;
+       color: #626262;
+       width: 100%;
+}
+
+img {  border: 0 none; max-width: 550px; }
+
+a { color: #b20202; text-decoration: none; margin-bottom:1px;}
+a:hover { color: #db0503; padding-bottom: 0px;}
+
+h3 > a, h4 > a {
+       font-size: 18px;
+       color: #626262;
+}
+
+h3 {
+       margin: 0px;
+       margin-bottom: 5px;
+       font-size: 18px;
+       color: #626262;
+}
+
+h2 {
+       color: #626262;
+}
+
+p {
+
+       max-width: 600px;
+}
+
+label {
+       font-variant:small-caps;
+}
+
+li {
+       list-style: none;
+}
+
+.required { display: inline; color: #b20202; }
+.fakelink { color: #b20202; cursor: pointer; }
+.fakelink :hover { color: #db0503; }
+
+input[type=text] {
+       border: 2px solid #b0b0b0;
+       padding: 2px;
+       margin: 0px;
+    -webkit-border-radius: 3px 3px 3px 3px;
+    -moz-border-radius: 3px 3px 3px 3px;
+    border-radius: 3px 3px 3px 3px;    
+}
+
+input[type=submit] {
+       margin: 10px 2px 5px 2px;
+       border: none;
+       font-size: 0.9em;
+       padding: 5px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       color:#efefef;
+       text-align: center;
+}
+
+input[type=submit]:hover {
+       border: none;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+       color: #efefef;
+}
+input[type=submit]:active {
+       position:relative;
+       top:1px;
+}
+
+.smalltext { font-size: 0.7em }
+
+::selection    { background:#fdf795; color: #000; /* Safari and Opera */ }
+::-moz-selection { background:#fdf795; color: #000; /* Firefox */ }
+
+section {
+       margin: 20px 11% 0px 11%;
+       font-size: 0.9em;
+       line-height: 1.2em;
+       padding-right: 230px;
+}
+
+.lframe {
+       border: 1px solid #dddddd;
+       -moz-box-shadow: 3px 3px 6px #959494;
+       -webkit-box-shadow: 3px 3px 6px #959494;
+       box-shadow: 3px 3px 6px #959494;
+       background-color: #efefef;
+       padding: 10px;  
+}
+
+.mframe {
+       padding: 5px;
+       background-color: #efefef;
+       border: 2px solid #dddddd;
+       -moz-box-shadow: 3px 3px 4px #959494;
+       -webkit-box-shadow: 3px 3px 4px #959494;
+       box-shadow: 3px 3px 4px #959494;
+}
+
+#wall-item-lock {
+       margin-left: 10px;
+}
+
+.button {
+       border: none;
+       font-size: 1em;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       color:#efefef;
+       text-align: center;     
+}
+
+.button:hover {
+       border: none;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+       color: #efefef; 
+}
+
+.button:active {
+       position:relative;
+       top:1px;
+}
+
+.button a {
+       color: #efefef;
+}
+
+/* ========= */
+/* = Login = */
+/* ========= */
+
+#login-name-wrapper {
+       vertical-align: middle;
+       margin: auto;
+}
+
+#login-name-wrapper input {
+       width: 120px;
+       margin-left: 20px;
+}
+
+#login-password-wrapper {
+       vertical-align: middle;
+       margin: auto;   
+}
+
+#login-extra-links {
+       width: 90px;
+       margin-top: 20px;
+}
+
+#login-extra-links a {
+       display: block;
+       margin: 10px;
+       padding: 5px 0px 5px 0px;
+       text-align: center;
+       margin-right: 20px;     
+}
+
+#login-extra-filler {
+       display: none;
+}
+
+/* ========= */
+/* = Panel = */
+/* ========= */
+
+#panel {
+       position: absolute;
+       font-size:0.8em;
+       -webkit-border-radius: 5px ;
+       -moz-border-radius: 5px;
+       border-radius: 5px;
+       border: 1px solid #494948;
+       background-color: #2e3436;
+       opacity:50%;
+       color: #eeeeec;
+       padding:1em;
+       z-index: 200;
+       -moz-box-shadow: 7px 7px 12px #434343;
+       -webkit-box-shadow: 7px75px 12px #434343;
+       box-shadow: 7px 7px 10px #434343;
+}
+
+/* ========= */
+/* = Pager = */
+/* ========= */
+
+.pager {
+       padding-top: 30px;
+       display:block;
+       clear: both;
+       text-align: center;
+}
+
+.pager a {
+       color: #626262;
+}
+
+.pager span { padding: 4px; margin:4px; }
+.pager_current { background-color: #b20202; color: #ffffff; }
+
+/* ======= */
+/* = Nav = */
+/* ======= */
+
+nav {
+       height: 50px;
+       display: block;
+       position: relative;
+       padding: 0px 10%;
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #7c7d7b), color-stop(1, #555753) );
+       background:-moz-linear-gradient( center top, #7c7d7b 5%, #555753 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7c7d7b', endColorstr='#555753');
+       background-color:#7c7d7b;
+       border-bottom: 1px solid #494948;
+}
+nav a { text-decoration: none; color: #eeeeec; border:0px;}
+nav a:hover { text-decoration: none;   color: #eeeeec; border:0px;}
+
+nav #banner {
+       display: block;
+       position: absolute;
+       margin-left: 20px;
+       margin-top: 5px;
+       padding-bottom:5px;     
+}
+nav #banner #logo-text a {
+       display: hidden;
+       font-size: 40px;
+       font-weight: bold;
+       margin-left: 3px;
+}
+
+nav #user-menu {
+    display: block;    
+       width: 250px;
+    float: right;
+       margin-right:15px;
+    margin-top: 10px;
+       padding: 5px;
+    position: relative;
+    vertical-align: middle;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #797979), color-stop(1, #898988) );
+       background:-moz-linear-gradient( center top, #797979 5%, #898988 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#797979', endColorstr='#898988');
+       background-color:#a2a2a2;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       border: 1px solid #9A9A9A;
+       color:#efefef;
+       text-decoration:none;
+       text-align: center;   
+}
+
+nav #user-menu-label::after {
+       content: url("menu-user-pin.png") no-repeat;
+       padding-left: 15px;
+}
+
+nav #user-menu-label {
+       vertical-align: middle;
+       font-size: 12px;
+    padding: 5px;
+       text-align: center;
+}
+
+ul#user-menu-popup {
+    display: none;
+    position: absolute;
+       background:-webk/*      margin-right:10px;*/it-gradient( linear, left top, left bottom, color-stop(0.05, #797979), color-stop(1, #898988) );
+       background:-moz-linear-gradient( center top, #a2a2a2 5%, #898988 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#797979', endColorstr='#898988');
+       background-color:#898988;
+    width: 100%;
+    padding: 10px 0px;
+    margin: 0px;
+       margin-top: 4px;
+    top: 20px;
+       left: 0px;
+       border: 1px solid #9a9a9a;
+       border-top: none;
+    -webkit-border-radius: 0px 0px 5px 5px;
+    -moz-border-radius: 0px 0px 5px 5px;    
+    border-radius: 0px 0px 5px 5px;
+       -moz-box-shadow: 5px 5px 10px #242424;
+       -webkit-box-shadow: 5px 5px 10px #242424;
+       box-shadow: 5px 5px 10px #242424;    
+    z-index: 10000;
+}
+
+ul#user-menu-popup li { display: block; }
+ul#user-menu-popup li a { display: block; padding: 5px; }
+ul#user-menu-popup li a:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) );
+       background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202');
+       background-color:#d60808;
+}
+
+ul#user-menu-popup li a.nav-sep { border-top: 1px solid #989898; border-style:inset; }
+
+/* ============= */
+/* = Notifiers = */
+/* ============= */
+
+#notifications {
+       height: 32px;
+       position: absolute;
+       top:10px; left: 40%;
+}
+.nav-ajax-update {
+       width: 44px;
+       height: 32px;
+       background: transparent url('notifications.png') 0px 0px no-repeat; 
+       color: #efefef;
+       font-weight: bold;
+       font-size: 0.8em;
+       padding-top: 0.5em;
+       float: left;
+       padding-left: 11px;
+    /*display: none;*/
+}
+#net-update { background-position: 0px 0px; }
+#mail-update { background-position: 0px -40px; }
+#notify-update { background-position: 0px -84px; }
+#home-update { background-position: 0px -126px; }
+
+#lang-select-icon {
+       cursor: pointer;
+       position: absolute;
+       left: 5px;
+       top: 5px;
+}
+
+#language-selector {
+       position: absolute;
+       top: 0;
+       left: 16px;
+}
+
+/* =================== */
+/* = System Messages = */
+/* =================== */
+
+#sysmsg_info, #sysmsg {
+       position:fixed; 
+       bottom: 0px; right:20%; 
+       -moz-box-shadow: 7px 7px 12px #434343;
+       -webkit-box-shadow: 7px75px 12px #434343;
+       box-shadow: 7px 7px 10px #434343;
+       padding: 10px; 
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+       -webkit-border-radius: 5px 5px 0px 0px;
+       -moz-border-radius: 5px 5px 0px 0px;
+       border-radius: 5px 5px 0px 0px;
+       border: 1px solid #da2c2c;
+       border-bottom:0px;
+       padding-bottom: 50px;   
+       z-index: 1000;
+       color: #efefef;
+       font-style: bold;
+}
+
+#sysmsg_info br,
+#sysmsg br {
+       display:block;
+       margin:2px 0px;
+       border-top: 1px solid #dddddd;
+}
+
+/* ================= */
+/* = Aside/Sidebar = */
+/* ================= */
+
+aside {
+    position: absolute;
+    right: 11%;
+       width: 260px;
+       margin-top: auto;
+    font-size: 0.8em;
+       font-style: bold;
+}
+
+aside a{
+       padding-bottom: 5px;
+
+}
+
+.vcard {
+       font-size: 1em;
+       font-variant:small-caps;
+}
+
+.vcard dd {
+       font-size: 12px;
+       font-variant: normal;
+       -webkit-margin-start: 10px;
+}
+
+.vcard .fn {
+       font-size: 1.4em;
+       font-weight: bold;
+       border-bottom: none;
+       padding-top: 10px;
+}
+
+.vcard #profile-photo-wrapper {
+       margin: 10px 0px;
+       padding: 12px;
+       width: 175px;
+       background-color: #f3f3f3;
+       border: 1px solid #dddddd;
+       -moz-box-shadow: 3px 3px 4px #959494;
+       -webkit-box-shadow: 3px 3px 4px #959494;
+       box-shadow: 3px 3px 4px #959494;        
+}
+
+aside h4 { font-size: 1.3em; }
+
+aside #viewcontacts {
+       text-align: center;
+       font-weight: bold;
+       font-variant:small-caps;
+       font-size: 1.1em;
+       padding-top: 5px;
+}
+
+#viewcontacts a {
+       color: #898989;
+}
+
+#profile-extra-links ul { margin-left: 0px; padding-left: 0px; list-style: none; }
+
+#dfrn-request-link {
+       -moz-box-shadow:inset 0px 1px 0px 0px #a65151;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #a65151;
+       box-shadow:inset 0px 1px 0px 0px #a65151;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) );
+       background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202');
+       background-color:#d60808;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       border:1px solid #fc5656;
+       display:inline-block;
+       color:#f0e7e7;
+       font-family:Trebuchet MS;
+       font-size:19px;
+       font-weight:bold;
+       text-align: center;
+       padding:10px;
+       width: 185px;
+       text-decoration:none;
+       text-shadow:1px 1px 0px #b36f6f;
+}
+
+#dfrn-request-link:hover {
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+}
+
+#dfrn-request-link:active {
+       position:relative;
+       top:1px;
+}
+
+#dfrn-request-intro {
+       width: 600px;
+}
+
+#netsearch-box {
+       background-color: #f6f6f6;
+       padding: 10px 8px 10px 8px;
+}
+#netsearch-box input[type="text"] {
+       width: 97%;
+}
+#netsearch-box input[type="submit"] {
+       width: 48%;
+}
+
+h3#search:before {
+       content: url("search.png");
+       padding-right: 10px;
+       vertical-align: middle;
+}
+
+#network-new-link {
+       background-color: #f3f3f3;
+       border: 1px solid #cdcdcd;
+       margin-bottom: 10px;
+       -webkit-border-radius: 5px 5px 5px 5px;
+    -moz-border-radius: 5px 5px 5px 5px;
+    border-radius: 5px 5px 5px 5px;    
+}
+
+#group-sidebar {
+       vertical-align: middle;
+       margin: auto;
+       margin-top: 20px;
+       padding-bottom: 10px;
+}
+
+#sidebar-group-list {
+       margin-left: 30px;
+       margin-right: 30px;
+}
+
+#sidebar-group-list > a{
+       padding-bottom: 10px;
+}
+
+.widget {
+       margin-top: 20px;
+       -moz-box-shadow: 1px 2px 6px 0px #959494;
+       -webkit-box-shadow: 1px 2px 6px 0px #959494;
+       box-shadow: 1px 2px 6px 0px #959494;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f8f8f8), color-stop(1, #f6f6f6) );
+       background:-moz-linear-gradient( center top, #f8f8f8 5%, #f6f6f6 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f6f6f6');
+       background-color:#f8f8f8;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       border:1px solid #eee;
+       color:#e6e6e6;
+       text-shadow:-1px 0px 0px #bdbdbd;
+       border: 1px solid #cdcdcd;
+}
+
+#sidebar-new-group {
+       padding:7px;
+       width: 165px;
+       margin: auto;
+       margin-left: 40px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       display:inline-block;
+       color:#efefef;
+       text-decoration:none;
+       text-align: center;
+}
+
+#sidebar-new-group:hover {
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+}
+
+#sidebar-new-group:active {
+       position:relative;
+       top:1px;
+}
+
+#sidebar-new-group a {
+       color: #efefef;
+       font-size: 14px;
+       text-align: center;
+       margin: auto;
+}
+
+ul .sidebar-group-li{
+       list-style: none;
+       font-size: 1.2em;
+       padding-bottom: 5px;
+}
+
+ul .sidebar-group-li img{
+       display: none;
+}
+
+.widget h3{
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f0edf0), color-stop(1, #e2e2e2) );
+       background:-moz-linear-gradient( center top, #f0edf0 5%, #e2e2e2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f0edf0', endColorstr='#e2e2e2');
+       background-color:#f0edf0;
+       -moz-border-radius:5px 5px 0px 0px;
+       -webkit-border-radius:5px 5px 0px 0px;
+       border-radius:5px 5px 0px 0px;
+       border:1px solid #e2e2e2;
+       border-bottom: 1px solid #cdcdcd;
+       padding-top:5px;
+       padding-bottom: 5px;
+       vertical-align: baseline;
+       text-align: center;
+       text-shadow:-1px 0px 0px #bdbdbd;       
+}
+
+#group-sidebar h3:before{
+       content: url("groups.png");
+       padding-right: 10px;
+       vertical-align: middle;
+}
+
+#saved-search-list{
+       margin-top: 15px;
+       padding-bottom: 20px;
+}
+
+.saved-search-li {
+       list-style: none;
+       font-size: 1.2em;
+}
+
+.saved-search-li .icon {
+       margin-right: 5px;
+}
+
+/* ================== */
+/* = Contacts Block = */
+/* ================== */
+
+.contact-block-img {
+       width: 42px;
+       height: 42px;
+       padding-right: 2px;
+}
+.contact-block-div {
+       float: left;
+}
+
+.contact-block-textdiv { width: 150px; height: 34px; float: left; }
+#contact-block-end { clear: both; } 
+
+/* ======= */
+/* = Jot = */
+/* ======= */
+
+#profile-jot-text_tbl { margin-bottom: 10px; }
+#profile-jot-text_ifr { width: 99.9%!important }
+#profile-jot-submit-wrapper { 
+}
+
+#profile-jot-perms, #profile-jot-submit {
+       width: 60px;
+       font-size: 12px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       display:inline-block;
+       color:#efefef;
+       text-decoration:none;
+       text-align: center;
+}
+
+#profile-jot-perms {
+       width: 30px;
+       overflow: hidden;
+       border: 0px;
+       margin-left:5px;
+}
+
+#jot-perms-perms .icon {
+       height: 1px;
+}
+
+#profile-jot-submit {
+       float: left;
+       margin-right:5px;
+       border: 0px;
+       margin-top: 0px;
+       margin-left: -30px;
+}
+
+#profile-jot-perms:hover, #profile-jot-submit:hover {
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+}
+#profile-jot-perms:active, #profile-jot-submit:active {
+       position:relative;
+       top:1px;
+}
+
+#character-counter {
+       position: absolute: right: 100px; top:100px;
+}
+#profile-rotator-wrapper {
+ float: right; 
+}
+
+.jot-tool {
+       float: left;
+       margin-right: 5px;
+}
+#profile-jot-tools-end,
+#profile-jot-banner-end { clear: both; }
+
+#profile-jot-email-wrapper {
+       margin: 10px 10% 0px 10%;
+       border: 1px solid #eeeeee;
+       border-bottom: 0px;
+}
+#profile-jot-email-label { background-color: #555753; color: #ccccce;  padding: 5px;}
+#profile-jot-email { margin: 5px; width: 98%; }
+       
+#profile-jot-networks {
+       margin: 0px 10%;
+       border: 1px solid #eeeeee;
+       border-top: 0px;
+       border-bottom: 0px;
+       padding: 5px;
+}
+#profile-jot-acl-wrapper {
+       margin: 0px 10px;
+       border: 1px solid #eeeeee;
+       border-top: 0px;
+        display:block!important;
+}
+#group_allow_wrapper,
+#group_deny_wrapper,
+#acl-permit-outer-wrapper { width: 47%; float: left; }
+
+#contact_allow_wrapper,
+#contact_deny_wrapper,
+#acl-deny-outer-wrapper { width: 47%; float: right; }
+
+#acl-permit-text {background-color: #555753; color: #ccccce; padding: 5px; float: left;}
+#jot-public {background-color: #555753; color: #ff0000; padding: 5px; float: left;}
+#acl-deny-text {background-color: #555753; color: #ccccce; padding: 5px; float: left;}
+
+#acl-permit-text-end,
+#acl-deny-text-end { clear: both; }
+#profile-jot-wrapper {
+       margin-top: 0px;
+       padding-top: 0px;
+}
+
+profile-jot-banner-wrapper {
+       padding: 0px;
+       margin: 0px;
+}
+
+.contact-h4 {
+       font-size: 1.2em;
+}
+
+/* ======== */
+/* = Tabs = */
+/* ======== */
+
+.tabs-wrapper {
+       width: 450px;
+       list-style: none;
+       padding: 10px;
+       margin: 0px 0px 10px 0px;
+       border-bottom: 1px solid #efefef;
+}
+.tabs-wrapper li { display: inline;}
+
+.tabs {
+       padding: 5px 10px 5px 10px;
+       margin-right: 5px;
+       font-style: bold;
+}
+
+.tabs:hover {
+       padding: 5px 10px 5px 10px;
+}
+
+/* ========= */
+/* = Posts = */
+/* ========= */
+
+.wall-item-outside-wrapper {
+       max-width: 83%;
+       border-bottom: 1px solid #dedede;
+       margin-top: 20px;
+       padding-right: 10px;
+}
+
+.wall-item-outside-wrapper-end { clear: both;}
+.wall-item-content-wrapper { position: relative; max-width: 100%; }
+.wall-item-photo-menu { display: none;}
+.wall-item-photo-menu-button {
+       display:none;
+       text-indent: -99999px;
+       background: #eeeeee url("menu-user-pin.png") no-repeat 75px center;
+       position: absolute;
+       overflow: hidden;
+       height: 20px; width: 90px; 
+       top: 85px;      left: -1px;
+       -webkit-border-radius: 0px 0px 5px  5px;
+       -moz-border-radius: 0px 0px 5px  5px;
+       border-radius: 0px 0px 5px  5px;        
+}
+
+.wall-item-info { float: left; width: 140px; }
+.wall-item-photo-wrapper { 
+       width: 80px; height: 80px;  
+       position: relative;
+}
+
+.wall-item-tools { 
+       filter: alpha(opacity=60);
+       opacity: 0.7;
+       -webkit-transition: all 0.25s ease-in-out;
+       -moz-transition: all 0.25s ease-in-out;
+       -o-transition: all 0.25s ease-in-out;
+       -ms-transition: all 0.25s ease-in-out;
+       transition: all 0.25s ease-in-out;      
+       margin-left: 140px;
+       margin-top: 10px;
+       padding-bottom: 6px;
+}
+
+.wall-item-tools:hover {
+       filter: alpha(opacity=100);
+       opacity: 1;
+       -webkit-transition: all 0.25s ease-in-out;
+       -moz-transition: all 0.25s ease-in-out;
+       -o-transition: all 0.25s ease-in-out;
+       -ms-transition: all 0.25s ease-in-out;
+       transition: all 0.25s ease-in-out;      
+       margin-left: 140px;
+}
+
+.wall-item-outside-wrapper.comment .wall-item-tools {
+       margin: 5px 5px 10px 70px;
+       float: left;
+}
+
+.wall-item-like-buttons {
+       float: left;
+       padding-left: 10px;
+}
+.wall-item-like-buttons a.icon {
+       float: left;
+       margin-right: 5px;
+       display: inline;
+}
+.wall-item-links-wrapper {
+       width: 20px;
+       float: left;
+}
+.wall-item-delete-wrapper {
+       float: left;
+}
+.wall-item-links-wrapper a.icon {
+       float: left;
+       margin-right: 5px;
+       display: inline;
+}
+.pencil {
+       float: left;
+}
+
+.star-item {
+       margin-left: 5px;
+       margin-right: 2px;
+       float: left;    
+}
+.wall-item-title { font-size: 1.2em; font-weight: bold;}
+.wall-item-body {
+       margin-left: 140px;
+       padding-right: 10px;
+       max-width: 85%;
+}
+
+.wall-item-body p {
+       font-size: 0.8em;
+}
+.wall-item-lock-wrapper { float: right; }
+.wall-item-dislike,
+.wall-item-like,
+.wall-item-author {
+       clear: left;
+       font-size: 0.9em;
+       margin: 4px 0px 0px 140px;
+       padding-left: 10px;
+       font-variant:small-caps;
+}
+
+.wall-item-author a {
+       color: #898989;
+}
+
+.wall-item-ago { display: inline; padding-left: 10px; color: #898989;} 
+.wall-item-wrapper-end { clear:both; }
+.wall-item-location {
+       margin-top:5px;
+       width: 100px;
+       overflow: hidden;
+       text-overflow: ellipsis;
+       -o-text-overflow: ellipsis;
+}
+
+.wall-item-location .icon { float: left; }
+.wall-item-location > a {
+       margin-left: 25px;
+       font-size: 0.9em;
+       display: block;
+       font-variant:small-caps;
+       color: #898989;
+}
+
+.wall-item-location .smalltext { margin-left: 25px;  font-size: 0.9em; display: block;}
+.wall-item-location > br { display: none; }
+.wall-item-conv a{
+       font-size: 0.9em;
+       color: #898989;
+       font-variant:small-caps;
+}
+
+.wallwall .wwto {
+    left: -10px;
+    margin: 0;
+    position: absolute;
+    top: 65px;
+    width: 30px;
+    z-index: 10001;
+       width: 30px;
+       height: 30px;    
+}
+
+.wallwall .wwto img { width: 30px!important; height: 30px!important;}
+.wallwall .wall-item-photo-end { clear: both; }
+.wall-item-arrowphoto-wrapper {
+    position: absolute;
+    left: 20px;
+    top: 70px;
+    z-index: 10002;
+}
+
+.wall-item-photo-menu {
+       min-width: 92px;
+       color: #2e3436;
+       border-top: 0px;
+       background: #eeeeee;
+       border-right: 1px solid #dddddd;
+       border-left: 1px solid #dddddd;
+       border-bottom: 1px solid #dddddd;
+       position: absolute;
+       left: -2px; top: 101px;
+       display: none;
+       z-index: 10000;
+       -webkit-border-radius: 0px 5px 5px 5px;
+       -moz-border-radius: 0px 5px 5px 5px;
+       border-radius: 0px 5px 5px 5px;
+       -moz-box-shadow: 3px 3px 4px #959494;
+       -webkit-box-shadow: 3px 3px 4px #959494;
+       box-shadow: 3px 3px 4px #959494;
+}
+
+.wall-item-photo-menu-button {
+       border-right: 1px solid #dddddd;
+       border-left: 1px solid #dddddd;
+       border-bottom: 1px solid #dddddd;
+       -moz-box-shadow: 3px 3px 4px #959494;
+       -webkit-box-shadow: 3px 3px 4px #959494;
+       box-shadow: 3px 3px 4px #959494;
+}
+
+.fakelink wall-item-photo-menu-button {
+       -webkit-border-radius: 0px 5px 5px 5px;
+       -moz-border-radius: 0px 5px 5px 5px;
+       border-radius: 0px 5px 5px 5px;
+       -moz-box-shadow: 3px 3px 4px #959494;
+       -webkit-box-shadow: 3px 3px 4px #959494;
+       box-shadow: 3px 3px 4px #959494;
+}
+
+.wall-item-photo-menu ul { margin:0px; padding: 0px; list-style: none }
+.wall-item-photo-menu li a { white-space: nowrap;  display: block; padding: 5px 2px;   color: #2e3436;  }
+.wall-item-photo-menu li a:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202; 
+       order-bottom: none;
+}
+
+.icon.drop,
+.icon.drophide { float: left; }
+#item-delete-selected {        overflow: auto; width: 100%;}
+
+
+/* ============ */
+/* = Comments = */
+/* ============ */
+ .ccollapse-wrapper {
+       font-size: 0.9em;
+       color: #898989;
+       margin-left: 60px;
+       font-variant:small-caps;
+}
+.wall-item-outside-wrapper.comment { margin-left: 70px; }
+.wall-item-outside-wrapper.comment .wall-item-photo {
+       width: 40px!important;
+       height: 40px!important;
+}
+
+.wall-item-outside-wrapper.comment .wall-item-photo-wrapper {width: 40px; height: 40px; }
+.wall-item-outside-wrapper.comment .wall-item-photo-menu-button {
+       width: 50px;
+       top: 45px;
+       background-position: 35px center;
+}
+.wall-item-outside-wrapper.comment .wall-item-info { width: 60px; }
+.wall-item-outside-wrapper.comment .wall-item-body {
+       margin-left: 70px;
+       max-width: 85%;
+       padding-right: 10px;
+       padding-left: 10px;
+}
+
+.wall-item-outside-wrapper.comment .wall-item-author { margin-left: 60px;}
+
+.wall-item-outside-wrapper.comment .wall-item-photo-menu {
+       min-width: 50px;
+       top: 60px;
+}
+.icollapse-wrapper {
+       font-size: 0.9em;
+       color: #898989;
+       font-variant:small-caps;        
+}
+
+.comment-wwedit-wrapper,
+.comment-edit-wrapper { margin: 30px 0px 0px 80px;}
+.comment-wwedit-wrapper img,
+.comment-edit-wrapper img { width: 20px; height: 20px; }
+.comment-edit-photo-link { float: left; width: 40px;}
+.comment-edit-text-empty { 
+       width: 80%;
+       height: 20px;
+       border: 0px;
+       color: #babdb6;
+       -webkit-transition: all 0.5s ease-in-out;
+       -moz-transition: all 0.5s ease-in-out;
+       -o-transition: all 0.5s ease-in-out;
+       -ms-transition: all 0.5s ease-in-out;
+       transition: all 0.5s ease-in-out;       
+}
+.comment-edit-text-empty:hover { color: #999999;}
+.comment-edit-text-full { width: 80%; height: 6em;
+       -webkit-transition: all 0.5s ease-in-out;
+       -moz-transition: all 0.5s ease-in-out;
+       -o-transition: all 0.5s ease-in-out;
+       -ms-transition: all 0.5s ease-in-out;
+       transition: all 0.5s ease-in-out;       
+}
+.comment-edit-submit-wrapper { width: 80%; margin-left: 40px; text-align: right; }
+.comment-edit-submit {
+       height: 22px;
+       background-color: #a2a2a2;
+       color: #eeeeec;
+       -webkit-border-radius: 5px;
+       -moz-border-radius: 5px;
+       border-radius: 5px;
+       border: 0px;
+}
+
+.comment-edit-submit:hover {
+       background-color: #b20202;
+}
+
+.comment-edit-submit:active {
+       background-color: #b20202;
+}
+
+#item-delete-selected-desc {
+       color: #898989;
+}
+
+.wall-item-body code {
+       font-family: Courier, monospace;
+       white-space: pre;
+       display: block;
+       overflow: auto;
+       border: 1px solid #cccccc;
+    border-width: 1px 1px 1px 10px;
+       padding-left: 10px;
+       margin-top: 20px; 
+}
+
+/* =========== */
+/* = Profile = */
+/* =========== */
+
+.advanced-profile-content {
+       margin-top: 5px;
+       margin-bottom: 10px;
+       margin-left: 30px;
+       width: 60%;
+}
+
+.advanced-profile-label {
+       margin-top: 10px;
+       margin-bottom: 0px;
+       padding-bottom: 5px;
+       font-size: 18px;
+       font-variant:small-caps;
+}
+div[id$="wrapper"] { height: 100%;} 
+div[id$="wrapper"] br { clear: left; }
+#advanced-profile-with { margin-left: 20px;}
+
+#profile-listing-desc {
+       float: left;
+       display: inline;
+       padding: 5px 10px 5px 10px;
+       width: 150px;
+       margin-bottom:20px;
+       margin-top: 20px;
+       display:inline-block;
+       font-style: bold;
+       text-align: center;
+}
+
+#profile-listing-new-link-wrapper {
+       float: left;
+       display: inline;
+       width: 130px;
+       margin-left:5px;
+       margin-top: 20px;
+       padding: 5px 10px 5px 10px;
+       font-style: bold;
+       text-align: center;
+}
+
+.profile-listing-name {
+       font-size: 1em;
+       font-variant: small-caps;
+}
+.profile-listing-name a {
+       color: #898989;
+}
+
+#profile-edit-links li {
+       display: inline;
+       width: 150px;
+       margin-bottom:20px;
+       margin-top: 20px;
+       background-color: #a2a2a2;
+       color: #eeeeec;
+       padding: 5px 10px 5px 10px;
+       margin-right: 5px;
+       font-style: bold;
+       -webkit-border-radius: 5px 5px 5px 5px;
+    -moz-border-radius: 5px 5px 5px 5px;
+    border-radius: 5px 5px 5px 5px;    
+}
+
+#profile-edit-links li a {
+       color: #efefef; 
+}
+
+#profile-edit-links li:hover {
+       background-color: #b20202;      
+}
+
+#profile-edit-links li:active {
+       background-color: #b20202;      
+}
+
+#cropimage-wrapper { float:left; }
+#crop-image-form { clear:both; }
+
+.profile-match-name a{
+       color: #999;
+       font-variant: small-caps;
+       font-size: 1em;
+}
+
+.profile-match-name a:hover {
+       color: #999;
+}
+
+.profile-match-wrapper {
+       width: 80%;
+       padding: 15px;
+       margin-bottom:10px;
+       margin-left: 20px;
+       background-color: #f6f6f6;
+       border: 1px solid #dddddd;
+       -moz-box-shadow: 3px 3px 4px #959494;
+       -webkit-box-shadow: 3px 3px 4px #959494;
+       box-shadow: 3px 3px 4px #959494;
+       clear: both;    
+}
+
+.profile-match-end {
+       clear: both;
+}
+
+.profile-match-photo {
+       float: left;
+       margin-right: 10px;
+       margin-bottom: 5px;
+}
+
+/* ========== */
+/* = Photos = */
+/* ========== */
+
+#side-bar-photos-albums h3:before {
+       content: url("photography.png");
+       padding-right: 10px;
+       vertical-align: middle;
+}
+
+#side-bar-photos-albums li {
+       font-size: 14px;
+       font-variant: none;
+       text-align: left;
+       padding-left: 20px;
+       margin-bottom: 5px;
+}
+
+#photo-top-links {
+       width: 130px;
+       margin-bottom:20px;
+       margin-top: 20px;
+       background-color: #a2a2a2;
+       color: #eeeeec;
+       padding: 5px 10px 5px 10px;
+       margin-right: 5px;
+       font-style: bold;
+       -webkit-border-radius: 5px 5px 5px 5px;
+    -moz-border-radius: 5px 5px 5px 5px;
+    border-radius: 5px 5px 5px 5px;            
+}
+#photo-top-links a {
+       color: #efefef;
+}
+
+#photo-top-links:hover {
+       background-color: #b20202;      
+}
+
+#photo-top-links:active {
+       background-color: #b20202;      
+}
+
+.photo-album-image-wrapper { 
+       float: left;
+       margin: 0px 10px 10px 0px;
+       padding-bottom: 30px;
+       position:relative;      
+}
+
+.photo-top-image-wrapper {
+       float: left;
+       width: 180px;
+       height: 180px;
+       margin: 0px 10px 10px 0px;
+       padding-bottom: 30px;
+       position:relative;
+}
+
+#photo-album-wrapper-inner {
+       position: relative;
+       float: left;
+       width: 180px;
+       height: 180px;
+       overflow: hidden;
+}
+
+#photo-photo { max-width: 85%; height: auto; }
+#photo-photo img { max-width: 100% }
+
+.photo-top-image-wrapper a:hover,
+#photo-photo a:hover,
+.photo-album-image-wrapper a:hover { 
+       border-bottom: 0px; 
+}
+
+.photo-top-photo {}
+.photo-album-photo {} 
+
+.photo-top-album-name {
+       position: absolute;
+       bottom: 0px;
+       padding: 0px 5px;
+       font-weight: bold;
+       font-stretch:semi-expanded;
+       font-variant:small-caps;
+} 
+
+.photo-top-album-name a{
+       text-align: center;
+       color: #6e6e6e;
+}
+.caption {
+       position: absolute;
+       bottom: 0px;
+       margin: 0px 5px;
+       text-align: center;
+       color: #6e6e6e;
+       font-size: 0.9em;
+       font-variant: small-caps;
+}
+
+#photo-photo{
+       position: relative;
+       float:left;     
+}
+
+#photo-caption {
+       margin-top: 10px;
+       color: #6E6E6E;
+       font-variant:small-caps;
+       font-size: 1.1em;
+}
+
+#photo-photo-end { clear: both; }
+#photo-prev-link,
+#photo-next-link{
+       position: absolute;
+       width:10%;
+       height: 100%;
+       background-color: rgba(255,255,255,0.2);
+       opacity: 0;
+       -webkit-transition: all 0.2s ease-in-out;
+       -moz-transition: all 0.2s ease-in-out;
+       -o-transition: all 0.2s ease-in-out;
+       -ms-transition: all 0.2s ease-in-out;
+       transition: all 0.2s ease-in-out;
+       background-position: center center;
+       background-repeat: no-repeat;   
+}
+
+#photo-prev-link { left:0px; top:0px; background-image: url('prev.png'); }
+#photo-next-link { right:0px; top:0px; background-image: url('next.png');}
+#photo-prev-link a,
+#photo-next-link a{
+       display: block; width: 100%; height: 100%;
+       overflow: hidden;
+       text-indent: -900000px;          
+}
+
+#photo-prev-link:hover,
+#photo-next-link:hover {
+       opacity: 1;
+       -webkit-transition: all 0.2s ease-in-out;
+       -moz-transition: all 0.2s ease-in-out;
+       -o-transition: all 0.2s ease-in-out;
+       -ms-transition: all 0.2s ease-in-out;
+       transition: all 0.2s ease-in-out;               
+}
+
+#photo-next-link .icon,
+#photo-prev-link .icon { display: none }
+
+#photos-upload-spacer,
+#photos-upload-new-wrapper,
+#photos-upload-exist-wrapper { margin-bottom: 1em; }
+#photos-upload-existing-album-text,
+#photos-upload-newalbum-div { 
+       background-color: #fff;
+       color: #909090;
+       font-size: 1.2em;
+       padding: 3px 0px;
+       padding-left: 0px;
+       width: 300px;
+}
+
+#photos-upload-album-select,
+#photos-upload-newalbum { width: 400px; }
+
+#photos-upload-perms-menu {
+       width: 180px;
+       padding: 7px;
+}
+
+#photos-upload-perms-menu .icon {
+       display: none;
+}
+
+select, input {
+       border: 2px solid #b0b0b0;
+       padding: 2px;
+    -webkit-border-radius: 3px 3px 3px 3px;
+    -moz-border-radius: 3px 3px 3px 3px;
+    border-radius: 3px 3px 3px 3px;    
+}
+
+select[size], select[multiple], select[size][multiple] {
+       -webkit-appearance: listbox;
+}
+
+select {
+       -webkit-appearance: menulist;
+       box-sizing: border-box;
+       -webkit-box-align: center;
+       cursor: default;        
+}
+
+keygen, select {
+       -webkit-border-radius: ;
+}
+
+input, textarea, keygen {
+       font-size: 0.9em;
+       letter-spacing: normal;
+       word-spacing: normal;
+       line-height: 1.2em;
+       text-transform: none;
+       text-indent: 0px;
+       text-shadow: none;
+       display: inline-block;
+       text-align: -webkit-auto;       
+}
+
+.qq-upload-button {
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+}
+
+#album-edit-link {
+       width: 70px;
+       margin-bottom:20px;
+       margin-top: 20px;
+       background-color: #a2a2a2;
+       color: #eeeeec;
+       padding: 5px 10px 5px 10px;
+       margin-right: 5px;
+       font-style: bold;
+       -webkit-border-radius: 5px 5px 5px 5px;
+       -moz-border-radius: 5px 5px 5px 5px;
+       border-radius: 5px 5px 5px 5px;         
+}
+
+#album-edit-link  a {
+       color: #efefef;
+}
+
+#album-edit-link:hover {
+       background-color: #b20202;
+}
+
+#photo-edit-link-wrap {
+       margin-bottom: 10px;
+}
+
+#photo_edit_form {
+       width: 500px;
+       margin-top:20px;
+       text-align: left;
+}
+
+input#photo_edit_form {
+       display: block;
+       width: 100%;
+}
+
+#photo-edit-perms-menu {
+       float: left;
+       display: inline;
+       margin-top: 10px;
+       margin-right: 10px;
+       padding: 4px;
+       width: 100px;
+}
+
+#photo-edit-perms-menu .icon {
+       display: none;
+}
+
+#photo-edit-delete-button {
+       float: left;
+       display: inline;
+       margin-left: 190px;
+}
+
+#photo-album-edit-wrapper {
+       margin-bottom: 10px;
+}
+
+/* ============ */
+/* = Messages = */
+/* ============ */
+
+#prvmail-wrapper, .mail-conv-detail, .mail-list-detail {
+       position: relative;
+       width: 500px;
+       padding: 50px;
+       margin: 20px auto;
+       background-color: #fff;
+       -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
+       -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
+       box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
+}
+
+#prvmail-wrapper:before, #prvmail-wrapper:after, .mail-conv-detail:before, .mail-conv-detail:after, .mail-list-detail:before, .mail-list-detail:after {
+       position: absolute;
+       width: 40%;
+       height: 10px;
+       content: ' ';
+       left: 12px;
+       bottom: 12px;
+       background: transparent;
+       -webkit-transform: skew(-5deg) rotate(-5deg);
+       -moz-transform: skew(-5deg) rotate(-5deg);
+       -ms-transform: skew(-5deg) rotate(-5deg);
+       -o-transform: skew(-5deg) rotate(-5deg);
+       transform: skew(-5deg) rotate(-5deg);
+       -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
+       -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
+       box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
+       z-index: -1;
+}
+
+#prvmail-wrapper:after, .mail-conv-detail:after, .mail-list-detail:after {
+       left: auto;
+       right: 12px;
+       -webkit-transform: skew(5deg) rotate(5deg);
+       -moz-transform: skew(5deg) rotate(5deg);
+       -ms-transform: skew(5deg) rotate(5deg);
+       -o-transform: skew(5deg) rotate(5deg);
+       transform: skew(5deg) rotate(5deg);
+}
+
+.prvmail-text {
+       width: 100%;
+}
+
+#prvmail-form input
+
+#prvmail-subject { width: 490px;; padding-left: 10px; font-size: 1.1em; font-style: bold;}
+#prvmail-subject .input{
+       border: none !important ;
+}
+
+#prvmail-subject-label {
+       font-variant:small-caps;
+}
+
+#prvmail-to {
+       padding-left: 10px;
+}
+#prvmail-to-label {
+       font-variant:small-caps;
+}
+
+#prvmail-message-label {
+       font-variant:small-caps;
+       font-size: 1em; 
+}
+
+#prvmail-submit-wrapper { margin-top: 10px; }
+#prvmail-submit {
+       float: right;
+       margin-top: 0px;
+       margin-right: 0px;
+}
+
+#prvmail-upload {
+margin-left: 0px;      
+}
+
+#prvmail-submit-wrapper > div {
+       margin-right: 5px;
+       float: left;
+}
+
+.mail-list-outside-wrapper {
+       margin-top: 20px;
+}
+
+.mail-list-sender {
+       float: left;
+       padding: 5px;
+       background-color: #efefef;
+       border: 2px dotted #eeeeee;
+       -moz-box-shadow: 3px 3px 4px #959494;
+       -webkit-box-shadow: 3px 3px 4px #959494;
+       box-shadow: 3px 3px 4px #959494;
+}
+
+.mail-list-detail {
+       margin-left: 100px;
+       width: 300px;
+       min-height: 70px;
+       padding: 20px;
+       padding-top:10px;
+       border: 1px solid #dddddd;
+       }
+       
+.mail-list-sender-name {
+       font-size: 1.1em;
+       display: inline;
+       font-variant:small-caps;
+}
+
+.mail-list-date {
+       float: right;
+       clear: block;
+       display: inline;
+       font-size: 0.9em;
+       padding-left: 10px;
+       font-stretch:ultra-condensed;
+       font-variant:small-caps;
+}
+
+.mail-list-subject {
+       clear: block;
+       font-size: 1.2em;
+       padding-top: 20px;
+       padding-right: 50px;
+}
+
+.mail-list-subject a {
+       color: #626262;
+}
+
+.mail-list-delete-wrapper { float: right;}
+.mail-list-outside-wrapper-end {
+       clear: both;
+}
+
+.mail-conv-outside-wrapper {
+       margin-bottom: 10px;
+}
+
+.mail-conv-sender {float: left; margin: 0px 5px 5px 0px; }
+.mail-conv-sender-photo {
+       width: 64px;
+       height: 64px;
+}
+
+.mail-conv-sender-name { float: left; font-variant:small-caps; font-style: bold; }
+.mail-conv-date { float: right; font-variant:small-caps; }
+.mail-conv-subject { clear: right; font-weight: bold; font-size: 1.2em }
+.mail-conv-body {
+       clear: both;
+}
+
+.mail-conv-detail {
+       width: 500px;
+       padding: 30px;
+       padding-bottom: 10px;
+       margin-left: 20px;
+       margin-bottom: 0px;
+       vertical-align: middle;
+       margin: auto;
+       border: 1px solid #dddddd;
+}
+.mail-conv-break { display: none; border: none;}
+.mail-conv-delete-wrapper { padding-top: 10px; width: 510px; text-align: right; }
+
+#prvmail-subject {
+       font-weight: bold;
+       border: 1px solid #dddddd;
+}
+
+/* ============ */
+/* = Contacts = */
+/* ============ */
+
+#contacts-main {
+       margin-bottom: 10px;
+}
+
+.view-contact-wrapper,
+.contact-entry-wrapper {
+       float: left;
+       margin-right: 30px;
+       margin-bottom: 20px;
+       width: 88px;
+       height: 120px;
+       position: relative;
+}
+
+.contact-entry-direction-wrapper {position: absolute; top: 20px;}
+.contact-entry-edit-links { position: absolute; top: 60px; }
+#contacts-show-hide-link { margin-bottom: 20px; margin-top: 10px; font-weight: bold;}
+
+.contact-entry-name {
+       width: 100px;
+       overflow: hidden;
+       font: #999;
+       font-size: 12px;
+       text-align:center;
+       font-variant:small-caps;
+       font-weight: bold;
+       margin-top:5px;
+}
+
+.contact-entry-photo {
+       position: relative;
+}
+
+.contact-entry-edit-links .icon {      
+       border: 1px solid #babdb6;
+    -webkit-border-radius: 3px;
+    -moz-border-radius: 3px;
+    border-radius: 3px;        
+       background-color: #ffffff;
+}
+
+#contact-edit-banner-name { font-size: 1.5em; margin-left: 30px; font-variant: small-caps; }
+#contact-edit-photo-wrapper {position: relative; float: left; padding: 20px;}
+#contact-edit-direction-icon { position: absolute; top: 60px; left:0px;}
+#contact-edit-nav-wrapper { margin-left: 210px; }
+#contact-edit-links { float: left; margin-top: 23px; }
+#contact-edit-nav-wrapper .icon {
+       border: 1px solid #babdb6;
+    -webkit-border-radius: 3px;
+    -moz-border-radius: 3px;
+    border-radius: 3px;        
+}
+
+#contact-edit-nettype {
+       font-size: 1em;
+       font-variant: small-caps;
+       margin-left: 30px;
+       margin-bottom: 0px;
+       padding-bottom: 0px;
+}
+
+#contact-edit-poll-wrapper { margin-left: 50px; width: 300px;}
+#contact-edit-last-update-text { margin-bottom: 15px; padding-top: 20px; padding-left: 10px; font-size: 0.9em; max-width: 300px; }
+#contact-edit-last-updated { font-weight: bold; }
+#contact-edit-poll-text { display: inline; font-size: 0.9em; padding-left: 10px; }
+#contact-edit-end { clear: both; margin-bottom: 65px;}
+
+#contact-edit-update-now {
+       width: 80px;
+       padding: 5px 10px 5px 10px;
+       margin-left: 125px;
+       margin-top: 10px;
+       font-style: bold;
+}
+
+#contact-edit-update-now:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+}
+
+#contact-edit-update-now:active {
+       background-color: #b20202;
+       position:relative;
+       top:1px;
+}
+
+#contact-edit-update-now a {
+       color: #efefef;
+}
+
+
+#contact-edit-profile-select-text > p {
+       font-size: 1em;
+}
+
+.contact-photo-menu-button {
+       position: absolute;
+    background-image: url("photo-menu.jpg");
+    background-position: top left; 
+    background-repeat: no-repeat;
+    margin: 0px; padding: 0px;
+    width: 16px;
+    height: 16px;
+    top: 64px; left:0px;
+    overflow: hidden;
+    text-indent: 40px;
+    display: none;      
+}
+
+.contact-photo-menu {
+    width: auto;
+    border: 1px solid #ddd;
+    background: #f1f1f1;
+    position: absolute;
+    left: 0px; top: 90px;
+    display: none;
+    z-index: 10000;
+       -moz-box-shadow: 3px 3px 5px #888;
+       -webkit-box-shadow: 3px 3px 5px #888;
+       box-shadow: 3px 3px 5px #888;
+}
+
+.contact-photo-menu ul { margin:0px; padding: 0px; list-style: none }
+.contact-photo-menu li a { display: block; padding: 3px; color: #626262; font-size: 1em; }
+.contact-photo-menu li a:hover {
+       color: #FFFFFF;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+       text-decoration: none;
+}
+
+.view-contact-name {
+       font-variant: small-caps;
+}
+
+#div.side-link {
+       background-color: #efefef;
+       padding: 10px;
+       margin-top:20px;
+}
+
+#follow-sidebar {
+       margin-bottom: 20px;
+}
+
+#follow-sidebar h3:before {
+       content: url("user.png");
+       padding-right: 10px;
+       vertical-align: middle;
+}
+
+#follow-sidebar input[type="text"] {
+       margin-left: 10px;
+       margin-bottom: 10px;
+}
+
+#side-follow-submit {
+       width: 70px;
+}
+
+#side-match-link {
+       width: 180px;
+       padding: 10px;
+       margin: auto;
+       margin-bottom: 20px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       padding: 5px 10px 5px 10px;
+       color: #efefef;
+       font-size: 1.2em;
+       text-align: center;
+}
+
+#side-match-link:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+}
+
+#side-match-link:active {
+       background-color: #b20202;
+       position:relative;
+       top:1px;
+}
+
+#side-match-link a {
+       color: #efefef;
+}
+
+#side-invite-link {
+       width: 180px;
+       padding: 10px;
+       margin: auto;
+       margin-bottom: 20px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       padding: 5px 10px 5px 10px;
+       color: #efefef;
+       font-size: 1.2em;
+       text-align: center;     
+}
+
+#side-invite-link:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;       
+}
+
+#side-invite-link:active {
+       background-color: #b20202;
+       position:relative;
+       top:1px;        
+}
+
+#side-invite-link a {
+       color: #efefef; 
+}
+
+#invite-message, #invite-recipients, #invite-recipient-text {
+       padding: 10px;
+}
+
+#side-follow-wrapper {
+       font-size: 1em;
+       font-weight: bold;
+       font-stretch:semi-expanded;
+       background-color: #f3f3f3;
+       border: 1px solid #cdcdcd;
+       padding: 10px;
+       margin-top: 20px;
+       -webkit-border-radius: 5px 5px 5px 5px;
+    -moz-border-radius: 5px 5px 5px 5px;
+    border-radius: 5px 5px 5px 5px;
+}
+
+#side-follow-wrapper label{
+       font-size: 1.1em;
+       font-variant: normal;   
+}
+
+#contact-view-recent {
+       float: left;
+       width: 150px;
+       padding: 5px;
+       margin-bottom: 20px;
+}
+
+#contact-suggest {
+       float: left;
+       margin-left: 10px;
+       width: 120px;
+       padding: 10px;
+       margin-bottom: 20px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       padding: 5px 10px 5px 10px;
+       color: #efefef;
+       font-size: 1.2em;
+       text-align: center;     
+}
+
+#contact-suggest:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;       
+}
+
+#contact-suggest:active {
+       background-color: #b20202;
+       position:relative;
+       top:1px;        
+}
+
+#contact-suggest a {
+       color: #efefef;
+}
+
+#contact-edit-info-wrapper {
+       clear: both;
+}
+
+/* ===================================== */
+/* = Register, Settings, Profile Forms = */
+/* ===================================== */
+
+#id_openid_url,
+.openid {
+       background: url(login-bg.gif) no-repeat;
+       background-position: 0 50%;
+       padding-left: 18px;
+       width: 385px;
+}
+
+#profile-tabs-wrapper {
+       padding-top: 10px;
+}
+
+#profile-tab-status-link {
+       border: 0px;
+       padding: 5px 10px 5px 10px;
+       font-style: bold;
+}
+
+#uexport-link a {
+       color: #efefef;
+}
+
+#profile-tab-profile-link {
+       border: 0px;
+       padding: 5px 10px 5px 10px;
+}
+
+#uexport-link {
+       width: 140px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #7c7d7b), color-stop(1, #555753) );
+       background:-moz-linear-gradient( center top, #7c7d7b 5%, #555753 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7c7d7b', endColorstr='#555753');
+       background-color:#7c7d7b;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       padding: 5px 10px 5px 10px;
+       margin-bottom: 10px;
+}
+
+#uexport-link:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #555753), color-stop(1, #7c7d7b) );
+       background:-moz-linear-gradient( center top, #555753 5%, #7c7d7b 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555753', endColorstr='#7c7d7b');
+       background-color:#555753;
+}
+
+#uexport-link:active {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+       position:relative;
+       top:1px;
+}
+
+#settings-default-perms {
+       width: 160px;
+       text-align: center;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #7c7d7b), color-stop(1, #555753) );
+       background:-moz-linear-gradient( center top, #7c7d7b 5%, #555753 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7c7d7b', endColorstr='#555753');
+       background-color:#7c7d7b;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       padding: 5px 10px 5px 10px;
+       margin-bottom: 10px;
+}
+
+#settings-default-perms .fakelink {
+       color: #efefef; 
+}
+
+#settings-default-perms:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #555753), color-stop(1, #7c7d7b) );
+       background:-moz-linear-gradient( center top, #555753 5%, #7c7d7b 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555753', endColorstr='#7c7d7b');
+       background-color:#555753;
+}
+
+#settings-default-perms:active {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+       position:relative;
+       top:1px;
+}
+#settings-nickname-desc {
+       width: 80%;
+       background-color: #efefef;
+       margin-bottom: 10px;
+       -webkit-border-radius: 5px;
+       -moz-border-radius: 5px;
+    border-radius: 5px;
+    padding: 5px;
+}
+
+#register-form div,
+#profile-edit-form div { 
+       clear: both;
+}
+
+#register-form label,
+#profile-edit-form label {
+       width: 300px; float: left;
+}
+
+#register-form span,
+#profile-edit-form span  {
+       color: #555753;
+       display:block;
+       margin-bottom: 20px;
+}
+
+.settings-submit-wrapper,
+.profile-edit-submit-wrapper { margin: 30px 0px;}
+.profile-listing { float: left; clear: both; margin: 20px 20px 0px 0px}
+
+#profile-edit-links ul { margin: 20px 0px; padding: 0px; list-style: none; }
+
+
+#register-sitename { display: inline; font-weight: bold;}
+/* ===================== */
+/* = Contacts Selector = */
+/* ===================== */
+
+#group-edit-wrapper {
+       margin-bottom: 10px;
+}
+
+#group-edit-name-wrapper {
+       margin-bottom: 0px;
+       display: inline;
+}
+#group-edit-submit-wrapper {
+       margin-bottom: 10px;
+       margin-right: 400px;
+       float: right;
+       display: inline;
+}
+
+.group-delete-wrapper {
+       width: 90px;
+       display: inline;
+       padding: 5px;
+       margin-bottom: 10px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;*/
+}
+
+.group-delete-wrapper:hover {
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;       
+}
+
+.group-delete-wrapper:active {
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;       
+}
+
+.group-delete-wrapper a {
+       color: #efefef;
+       font-size: 0.9em;
+}
+
+#group-edit-desc { margin: 10px 0xp; }
+#group-new-text {font-size: 1.1em;}
+#group-members,
+#prof-members {
+       width: 83%;
+       height: 200px; 
+       overflow: auto;
+       border: none;
+       background-color: #f0edf0;
+       color: #555753;
+       border: 1px solid #ccc;
+       margin-bottom: 10px;
+       padding: 10px;
+}
+
+#group-all-contacts,
+#prof-all-contacts { 
+       width: 83%;
+       height: 200px;
+    overflow: auto;    
+       border: 1px solid #ccc;
+       background-color: #f0edf0;
+       padding: 10px;
+}
+
+#group-members h3,
+#group-all-contacts h3,
+#prof-members h3,
+#prof-all-contacts h3{
+       color: #555753;
+       margin: 0px;
+       padding: 5px;
+}
+
+#group-separator,
+#prof-separator { display: none;}
+
+/* ========== */
+/* = Events = */
+/* ========== */
+.clear { clear: both; }
+.eventcal {
+       float: left;
+       font-size: 20px;
+       padding: 20px;
+}
+
+.vevent {
+       position: relative;
+       width: 400px;
+       padding: 20px;
+       padding-top: 10px;
+       margin: 0 0px;
+       background-color: #fff;
+       -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
+       -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
+       box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
+}
+
+.vevent:before, .vevent:after {
+       position: absolute;
+       width: 40%;
+       height: 10px;
+       content: ' ';
+       left: 12px;
+       bottom: 12px;
+       background: transparent;
+       -webkit-transform: skew(-5deg) rotate(-5deg);
+       -moz-transform: skew(-5deg) rotate(-5deg);
+       -ms-transform: skew(-5deg) rotate(-5deg);
+       -o-transform: skew(-5deg) rotate(-5deg);
+       transform: skew(-5deg) rotate(-5deg);
+       -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
+       -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
+       box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
+       z-index: -1;
+}
+
+.vevent:after {
+       left: auto;
+       right: 12px;
+       -webkit-transform: skew(5deg) rotate(5deg);
+       -moz-transform: skew(5deg) rotate(5deg);
+       -ms-transform: skew(5deg) rotate(5deg);
+       -o-transform: skew(5deg) rotate(5deg);
+       transform: skew(5deg) rotate(5deg);
+}
+
+.vevent .event-description {
+       margin-left: 10px;
+       margin-right: 10px;
+       text-align:center;
+       font-size: 1.2em;
+       font-weight:bolder;
+}
+
+ .vevent .event-location{
+       margin-left: 10px;
+       margin-right: 10px;
+       font-size: 1em;
+       font-style: oblique;
+       text-align: center;
+       
+}
+
+.vevent .event-start, .vevent .event-end  {
+       margin-left: 20px;
+       margin-right: 20px;
+       margin-bottom: 2px;
+       margin-top: 2px;
+       font-size: 0.9em;
+       font-variant: small-caps;
+       text-align: left;
+}
+
+#new-event-link{
+       width: 130px;
+       padding: 7px;
+       margin-bottom: 10px;
+       margin-left: 170px; ;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       color: #efefef;
+}
+
+#new-event-link:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+}
+
+#new-event-link:active {
+       background-color: #b20202;
+       position:relative;
+       top:1px;
+}
+
+#new-event-link a {
+       color: #efefef;
+       text-align: center;
+}
+
+.edit-event-link, .plink-event-link {
+       float: left;
+       margin-top: 4px;
+       margin-right: 4px;
+       margin-bottom: 15px;
+}
+
+.event-description:before {
+       content: url('calendar.png');
+       margin-right: 15px;
+       vertical-align: middle;
+}
+
+.event-start, .event-end {
+       margin-left: 10px;
+       width: 330px;
+}
+
+.event-start .dtstart, .event-end .dtend {
+       float: right;
+}
+
+.event-list-date {
+       color: #626262;
+       margin-bottom: 10px;
+       font-variant:small-caps;
+       font-stretch:condensed;
+}
+
+.prevcal, .nextcal {
+       float: left;
+       margin-left: 32px;
+       margin-right: 32px;
+       margin-top: 64px;
+}
+
+.event-calendar-end {
+       clear: both;
+}
+
+.calendar {
+       width: 300px;
+       font-family: Helvetica, Arial, sans-serif;
+       background-color: #f1f1f1;
+       border: 1px solid #dedede;
+       margin-bottom: 10px;
+       -moz-box-shadow: 5px 5px 8px #959494;
+       -webkit-box-shadow: 5px 5px 8px #959494;
+       box-shadow: 5px 5px 8px #959494;        
+}
+
+.calendar caption{
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) );
+       background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202');
+       background-color: #b20202;
+       padding: 10px 0px 10px 0px;
+       width: 300px;
+       color: #ffffff;
+       font-weight: bold;
+       text-align:center;
+       font-variant:small-caps;
+       -moz-box-shadow: 5px 2px 8px #959494;
+       -webkit-box-shadow: 5px 2px 8px #959494;
+       box-shadow: 5px 2px 8px #959494;
+}
+
+tr {
+       border: 1px solid #eeeeee;
+}
+
+.calendar td {
+       font-size: 14px;
+       text-align: center;
+       padding: 3px 0px;
+}
+
+.calendar td > a {
+       background-color: #cdcdcd;
+       padding: 2px;
+       color: #000;
+}
+
+.calendar th {
+       font-size: 16px;        
+}
+
+.today {
+       font-weight: bold;
+       text-align: center;
+       background-color: #b20202;
+       color: #fff;
+}
+#event-start-text, 
+#event-finish-text {
+       margin-top: 10px;
+       margin-bottom: 5px;
+}
+
+#event-nofinish-checkbox, 
+#event-nofinish-text, 
+#event-adjust-checkbox, 
+#event-adjust-text,
+#event-share-checkbox {
+       float: left;
+}
+
+#event-datetime-break {
+       margin-bottom: 10px;
+}
+
+#event-nofinish-break, 
+#event-adjust-break,
+#event-share-break {
+       clear: both;
+}
+
+#event-desc-text, 
+#event-location-text {
+       margin-top: 10px;
+       margin-bottom: 5px;
+}
+
+#event-submit {
+       margin-top: 10px;
+}
+
+/* ============= */
+/* = Directory = */
+/* ============= */
+
+.directory-item {
+       float: left;
+       margin: 50px 50px 0px 0px;
+}
+
+.directory-details {
+       font-size: 0.9em;
+       font-variant: small-caps;
+       width: 160px;
+}
+
+.directory-name {
+       font-size: 1em;
+       font-variant: small-caps;
+       width: 150px;   
+}
+
+/* ========= */
+/* = Admin = */
+/* ========= */
+
+#adminpage {
+       width: 80%;
+}
+
+#pending-update {
+       float:right;
+       color: #ffffff;
+       font-weight: bold;
+       background-color: #FF0000;
+       padding: 0em 0.3em;
+}
+
+.admin.linklist {
+       border: 0px; padding: 0px;
+}
+
+.admin.link {
+       list-style-position: inside;
+       font-size: 1em;
+       padding: 5px;
+       width: 100px;
+       margin: 5px;
+}
+
+#adminpage dl {
+       clear: left;
+       margin-bottom: 2px;
+       padding-bottom: 2px;
+       border-bottom: 1px solid black;
+}
+
+#adminpage dt {
+       width: 200px;
+       float: left;
+       font-weight: bold;
+}
+
+#adminpage dd {
+       margin-left: 200px;
+}
+#adminpage h3 {
+       border-bottom: 1px solid #898989;
+       margin-bottom: 5px;
+       margin-top: 10px;
+}
+
+#adminpage .submit {
+       clear:left;
+}
+
+#adminpage #pluginslist {
+       margin: 0px; padding: 0px;
+}
+
+#adminpage .plugin {
+       list-style: none;
+       display: block;
+       border: 1px solid #888888;
+       padding: 1em;
+       margin-bottom: 5px;
+       clear: left;
+}
+
+#adminpage .toggleplugin {
+       float:left;
+       margin-right: 1em;
+}
+
+#adminpage table {width:100%; border-bottom: 1p solid #000000; margin: 5px 0px;}
+#adminpage table th { text-align: left;}
+#adminpage td .icon { float: left;}
+#adminpage table#users img { width: 16px; height: 16px; }
+#adminpage table tr:hover { background-color: #eeeeee; }
+#adminpage .selectall { text-align: right; }
+
+/* =============== */
+/* = Form Fields = */
+/* =============== */
+
+.field {
+       margin-bottom: 5px;
+       padding-bottom: 10px;
+       overflow: auto;
+       width: 90%;
+}
+
+.field label {
+       float: left;
+       width: 200px;
+}
+
+.field input,
+.field textarea {
+       width: 400px;
+}
+.field textarea { height: 100px; }
+.field_help {
+       display: block;
+       margin-left: 100px;
+       color: #666666; 
+}
+
+.field .onoff {
+       float: left;
+       width: 80px;
+}
+.field .onoff a {
+       display: block;
+       border:1px solid #c1c1c1;
+       background-image:url("../../../images/onoff.jpg");
+       background-repeat: no-repeat;
+       padding: 4px 2px 2px 2px;
+       height: 16px;
+       text-decoration: none;
+}
+.field .onoff .off {
+       border-color:#c1c1c1;
+       padding-left: 40px;
+       background-position: left center;
+       background-color: #cccccc;
+       color: #666666;
+       text-align: right;
+}
+
+.field .onoff .on {
+       border-color:#c1c1c1;
+       padding-right: 40px;
+       background-position: right center;
+       background-color: #b20202;
+       color: #FFFFFF;
+       text-align: left;
+}
+
+.hidden { display: none!important; }
+
+.field.radio .field_help { margin-left: 0px; }
+
+/* ========= */
+/* = Icons = */
+/* ========= */
+
+.icon {
+       display: block; width: 20px; height: 20px;
+       background-image: url('icons.png');
+}
+.starred { 
+       background-image: url("star.png"); 
+       repeat: no-repeat;
+}
+.unstarred { 
+       background-image: url("premium.png");
+       repeat: no-repeat;
+}
+
+
+.border {
+       border: 1px solid #c1c1c1;
+    -webkit-border-radius: 3px;
+    -moz-border-radius: 3px;
+    border-radius: 3px;        
+}
+
+.article       { background-position: -50px  0px;}
+.audio                 { background-position: -70px  0px;}
+.block                 { background-position: -90px  0px;}
+.drop          { background-position: -110px 0px;}
+.drophide      { background-position: -130px 0px;}
+.edit          { background-position: -150px 0px;}
+.camera        { background-position: -170px 0px;}
+.dislike       { background-position: -190px 0px;}
+.like          { background-position: -210px 0px;}
+.link          { background-position: -230px 0px;}
+
+.globe                 { background-position: -50px  -20px;}
+.noglobe       { background-position: -70px  -20px;}
+.no            { background-position: -90px  -20px;}
+.pause                 { background-position: -110px -20px;}
+.play          { background-position: -130px -20px;}
+.pencil        { background-position: -150px -20px;}
+.small-pencil  { background-position: -170px -20px;}
+.recycle       { background-position: -190px -20px;}
+.remote-link   { background-position: -210px -20px;}
+.share                 { background-position: -230px -20px;}
+
+.tools                 { background-position: -50px  -40px;}
+.lock          { background-position: -70px  -40px;}
+
+.unlock        {
+       background-position: -90px  -40px;
+       background-image: none;
+       width: 70px;
+       height: 20px;
+}
+
+.sharePerms {
+       background-image: url(icons.png);
+       width: 20px;
+       height: 20px;
+       margin: 2px 0px 2px 3px;
+       display: block;
+}
+
+.video                 { background-position: -110px -40px;}
+.youtube       { background-position: -130px -40px;}
+
+.attach        { background-position: -190px -40px;}
+.language      { background-position: -210px -40px;}
+
+
+.on            { background-position: -50px  -60px;}
+.off           { background-position: -70px  -60px;}
+.prev          { background-position: -90px  -60px;}
+.next          { background-position: -110px  -60px;}
+
+.icon.dim { opacity: 0.3;filter:alpha(opacity=30); }
+
+.attachtype {
+       display: block; width: 20px; height: 23px;
+       background-image: url('../../../images/content-types.png');
+}
+
+.type-video { background-position: 0px 0px; }
+.type-image { background-position: -20px 0px; }
+.type-audio { background-position: -40px 0px; }
+.type-text  { background-position: -60px 0px; }
+.type-unkn  { background-position: -80px 0px; }
+
+/* ========== */
+/* = Footer = */
+/* ========== */
+                                 
+.cc-license { margin-top: 100px; font-size: 0.7em; }                                  
+footer { display: block; margin: 50px 20%; clear: both; }
+                                  
+#profile-jot-text {
+    height: 20px;
+    color:#cccccc;
+    border: 1px solid #cccccc;
+}
+
+/* ======= */
+/* = ACL = */
+/* ======= */
+
+#photo-edit-perms-select,
+#photos-upload-permissions-wrapper,
+#profile-jot-acl-wrapper{
+       display:block!important;
+}
+
+#acl-wrapper {
+       width: 690px;
+       float:left;
+}
+#acl-search {
+       float:right;
+       background: #ffffff url("../../../images/search_18.png") no-repeat right center;
+       padding-right:20px;
+}
+#acl-showall {
+       float: left;
+       display: block;
+       font-size: 1em;
+       font-style: bold;
+       text-align: center;
+       padding: 3px;
+       margin-bottom: 5px;
+       background-color: #cccccc;
+       background-position: 7px 7px;
+       background-repeat: no-repeat;
+       padding: 5px;
+       -webkit-border-radius: 5px ;
+       -moz-border-radius: 5px;
+       border-radius: 5px;
+       color: #999999;
+}
+#acl-showall.selected {
+       color: #fff;
+       background-color: #b20202;
+}
+
+#acl-list {
+       height: 210px;
+       border: 1px solid #cccccc;
+        background-color: #efefef;
+       clear: both;
+       margin-top: 30px;
+       overflow: auto;
+}
+
+#acl-list-content {
+       margin-left: 20px;
+}
+
+.acl-list-item {
+       display: block;
+       width: 150px;
+       height: 40px;
+       border: 1px solid #cccccc;
+       background-color: #fff;
+       margin: 5px;
+       float: left;
+       -moz-box-shadow: 2px 2px 3px #c1c1c1;
+       -webkit-box-shadow: 2px 2px 3px #c1c1c1;
+       box-shadow: 2px 2px 3px #c1c1c1;
+}
+.acl-list-item img{
+       width:30px;
+       height: 30px;
+       float: left;
+       margin: 5px;
+}
+
+.acl-list-item p {
+       color: #999;
+       height: 12px;
+       font-size: 0.7em;
+       margin: 0px;
+       padding: 2px 0px 1px;
+       overflow: hidden;
+}
+
+.acl-list-item a { 
+       font-size: 10px;
+       display: block;
+       float: left;
+       color: #efefef;
+       background-color: #898989;
+       background-position: 3px 3px;
+       background-repeat: no-repeat;
+       margin-right: 5px;
+       -webkit-border-radius: 2px ;
+       -moz-border-radius: 2px;
+       border-radius: 2px;
+       padding: 3px;
+}
+
+#acl-wrapper a:hover {
+       text-decoration: none;
+       background-color:#b20202;
+}
+
+.acl-button-show.selected {
+       color: #efefef;
+       background-color: #b20202;
+}
+
+.acl-button-hide.selected {
+       color: #efefef;
+       background-color: #a2a2a2;
+}
+
+.acl-list-item.groupshow { border-color: #b20202; }
+.acl-list-item.grouphide { border-color: #a2a2a2; }
+
+/* ========================= */
+/* = Global Directory Link = */
+/* ========================= */
+
+#global-directory-link {
+       width: 130px;
+       padding: 7px;
+       margin-bottom: 10px;
+       margin-left: 0px;
+       -moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       -webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       box-shadow:inset 0px 1px 0px 0px #cfcfcf;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
+       background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
+       background-color:#bdbdbd;
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       border-radius:5px;
+       color: #efefef;
+       text-align: center;
+}
+
+#global-directory-link:hover {
+       color: #efefef;
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+}
+
+#global-directory-link:active {
+       background-color: #b20202;
+       position:relative;
+       top:1px;
+}
+
+#global-directory-link a {
+       color: #efefef;
+}
+
+#global-directory-link {
+       -webkit-padding-start: 0px;
+}
+
+a.active {
+       background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
+       background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
+       filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
+       background-color:#b20202;
+       color:#efefef;
+       padding: 5px 10px 5px 10px;
+       margin-right: 5px;
+}
\ No newline at end of file
diff --git a/view/theme/testbubble/user.png b/view/theme/testbubble/user.png
new file mode 100644 (file)
index 0000000..df899e7
Binary files /dev/null and b/view/theme/testbubble/user.png differ
diff --git a/view/theme/testbubble/wall_item.tpl b/view/theme/testbubble/wall_item.tpl
new file mode 100644 (file)
index 0000000..6efd331
--- /dev/null
@@ -0,0 +1,75 @@
+<!-- test -->
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper mframe" id="wall-item-photo-wrapper-$id" 
+                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                                       <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" />
+                               </a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                                       <ul>
+                                               $item_photo_menu
+                                       </ul>
+                               </div>
+                       </div>
+                       <div class="wall-item-photo-end"></div>
+                       <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>                               
+               </div>
+               <div class="wall-item-lock-wrapper">
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }}
+               </div>
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>
+                       {{ endif }}
+                        
+                       {{ if $star }}
+                       <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+
+                       
+               </div>
+               
+               <div class="wall-item-author">
+                               <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+                               
+               </div>  
+       </div>
+       <div class="wall-item-wrapper-end"></div>
+       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+       <div class="wall-item-comment-wrapper" >
+       $comment
+       </div>
+</div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+
diff --git a/view/theme/testbubble/wallwall_item.tpl b/view/theme/testbubble/wallwall_item.tpl
new file mode 100644 (file)
index 0000000..7cefc85
--- /dev/null
@@ -0,0 +1,74 @@
+<div class="wall-item-outside-wrapper$indent wallwall" id="wall-item-outside-wrapper-$id" >
+       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+               <div class="wall-item-info wallwall" id="wall-item-info-$id">
+                       <div class="wall-item-photo-wrapper mframe wwto" id="wall-item-ownerphoto-wrapper-$id" >
+                               <a href="$owner_url" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id">
+                               <img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" style="height: 80px; width: 80px;" alt="$owner_name" /></a>
+                       </div>
+                       <div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$wall" /></div>
+                       <div class="wall-item-photo-wrapper mframe wwfrom" id="wall-item-photo-wrapper-$id" 
+                               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')"
+                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
+                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+                <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+                    <ul>
+                        $item_photo_menu
+                    </ul>
+                </div>
+
+                       </div>
+                       <div class="wall-item-photo-end"></div>
+                       <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>                               
+               </div>
+               <div class="wall-item-lock-wrapper">
+                               {{ if $lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,$id);" /></div>
+                               {{ else }}<div class="wall-item-lock"></div>{{ endif }}
+               </div>
+               <div class="wall-item-tools" id="wall-item-tools-$id">
+                       {{ if $vote }}
+                       <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
+                               <a href="#" class="icon like" title="$vote.like.0" onclick="dolike($id,'like'); return false"></a>
+                               <a href="#" class="icon dislike" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false"></a>
+                               {{ if $vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title=""$vote.share.0" onclick="jotShare($id); return false"></a>{{ endif }}
+                               <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+                       </div>
+                       {{ endif }}
+                       {{ if $plink }}
+                               <div class="wall-item-links-wrapper"><a href="$plink.href" title="$plink.title" target="external-link" class="icon remote-link"></a></div>
+                       {{ endif }}
+                       {{ if $edpost }}
+                               <a class="editpost icon pencil" href="$edpost.0" title="$edpost.1"></a>
+                       {{ endif }}
+                        
+                       {{ if $star }}
+                       <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
+                       {{ endif }}
+                       
+                       <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+                               {{ if $drop.dropping }}<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
+                       </div>
+                               {{ if $drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$drop.select" class="item-select" name="itemselected[]" value="$id" />{{ endif }}
+                       <div class="wall-item-delete-end"></div>
+               </div>
+               <div class="wall-item-content" id="wall-item-content-$id" >
+                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+                       <div class="wall-item-title-end"></div>
+                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               </div>
+               <div class="wall-item-author">
+                       <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+                       <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
+               </div>  
+       </div>  
+       <div class="wall-item-wrapper-end"></div>
+       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+       <div class="wall-item-comment-wrapper" >
+       $comment
+       </div>
+</div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+
diff --git a/view/theme/three-d/theme.php b/view/theme/three-d/theme.php
new file mode 100644 (file)
index 0000000..47b43cf
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+$a->theme_info = array(
+  'extends' => 'loozah',
+);
index 3436a5c4539d245b4e761e5aa6a7344cc598732a..83693bfb1f47b4efcdfe1d2ccaf863b4693f04ec 100644 (file)
@@ -1,7 +1,7 @@
 
 <div class="view-contact-wrapper" id="view-contact-wrapper-$id" >
        <div class="view-contact-photo-wrapper" >
-               <div class="view-contact-photo" id="view-contact-photo-$id" >
+               <div class="mframe view-contact-photo" id="view-contact-photo-$id" >
                        <a href="$url" title="$alt_text" /><img src="$thumb" alt="$name" /></a>
                </div>
                <div class="view-contact-photo-end" ></div>
diff --git a/view/wall_fake_drop.tpl b/view/wall_fake_drop.tpl
deleted file mode 100644 (file)
index db34441..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >&nbsp;</div>
-<div class="wall-item-delete-end"></div>
index 1c5e82b17bbc9bbd7fa23c13c88e026ecb79b8d6..cec5e54048df6f293725bac48d97b7ec756e2f68 100644 (file)
@@ -1,50 +1,71 @@
-<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
-       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
-               <div class="wall-item-info" id="wall-item-info-$id">
-                       <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id" 
-                                onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
-                                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
-                               <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
-                                       <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" />
+{{ if $indent }}{{ else }}
+<div class="wall-item-decor">
+       <span class="icon s22 star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span>
+       {{ if $lock }}<span class="icon s22 lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }} 
+       <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+</div>
+{{ endif }}
+<div class="wall-item-container $indent">
+       <div class="wall-item-item">
+               <div class="wall-item-info">
+                       <div class="wall-item-photo-wrapper"
+                               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                               onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                                       <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" alt="$name" />
                                </a>
-                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
-                               <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
-                                       <ul>
-                                               $item_photo_menu
-                                       </ul>
-                               </div>
-                       </div>
-                       <div class="wall-item-photo-end"></div>
-                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
-                               $lock
-                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>                             
+                               <a href="#" rel="#wall-item-photo-menu-$id" class="fakelink wall-item-photo-menu-button icon s16 menu" id="wall-item-photo-menu-button-$id">menu</a>
+                               <ul class="wall-item-menu menu-popup" id="wall-item-photo-menu-$id">
+                               $item_photo_menu
+                               </ul>
+                               
                        </div>
+                       <div class="wall-item-location">$location</div> 
                </div>
-               <div class="wall-item-author">
-                               <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
-                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>
-                               
-               </div>  
-               <div class="wall-item-content" id="wall-item-content-$id" >
-                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
-                       <div class="wall-item-title-end"></div>
-                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               <div class="wall-item-content">
+                       {{ if $title }}<h2><a href="$plink.href">$title</a></h2>{{ endif }}
+                       $body
                </div>
-               <div class="wall-item-tools" id="wall-item-tools-$id">
-               $vote
-               $plink
-               $edpost
-               $star
-               $drop
+       </div>
+       <div class="wall-item-bottom">
+               <div class="wall-item-links">
+                       {{ if $plink }}<a class="icon s16 link" title="$plink.title" href="$plink.href">$plink.title</a>{{ endif }}
+               </div>
+               <div class="wall-item-actions">
+                       <div class="wall-item-actions-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle">$name</span></a> <span class="wall-item-ago">$ago</span>
+                       </div>
+                       
+                       <div class="wall-item-actions-social">
+                       {{ if $star }}
+                               <a href="#" id="star-$id" onclick="dostar($id); return false;"  class="$star.classdo"  title="$star.do">$star.do</a>
+                               <a href="#" id="unstar-$id" onclick="dostar($id); return false;"  class="$star.classundo"  title="$star.undo">$star.undo</a>
+                       {{ endif }}
+                       
+                       {{ if $vote }}
+                               <a href="#" id="like-$id" title="$vote.like.0" onclick="dolike($id,'like'); return false">$vote.like.1</a>
+                               <a href="#" id="dislike-$id" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false">$vote.dislike.1</a>
+                       {{ endif }}
+                                               
+                       {{ if $vote.share }}
+                               <a href="#" id="share-$id" title="$vote.share.0" onclick="jotShare($id); return false">$vote.share.1</a>
+                       {{ endif }}                     
+                       </div>
+                       
+                       <div class="wall-item-actions-tools">
+
+                               {{ if $drop.dropping }}
+                                       <input type="checkbox" title="$drop.select" name="itemselected[]" value="$id" />
+                                       <a href="item/drop/$id" onclick="return confirmDelete();" class="icon delete s16" title="$drop.delete">$drop.delete</a>
+                               {{ endif }}
+                               {{ if $edpost }}
+                                       <a class="icon edit s16" href="$edpost.0" title="$edpost.1"></a>
+                               {{ endif }}
+                       </div>
+                       
                </div>
        </div>
-       <div class="wall-item-wrapper-end"></div>
-       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
-       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
-       <div class="wall-item-comment-wrapper" >
+</div>
+<div class="wall-item-comment-wrapper" >
        $comment
-       </div>
-
-<div class="wall-item-outside-wrapper-end$indent" ></div>
 </div>
-
diff --git a/view/wall_item_drop.tpl b/view/wall_item_drop.tpl
deleted file mode 100644 (file)
index 30fa6c3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
-       
-       <a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
-</div>
-<input type="checkbox" onclick="checkboxhighlight(this);" title="$select" class="item-select" name="itemselected[]" value="$id" />
-<div class="wall-item-delete-end"></div>
index fd686f0f4b3fe6c78a88d0aff2519cd22c873dcb..2429bc20f7ddb4a44fbc5f99ccfae20267c999c8 100644 (file)
@@ -1,55 +1,78 @@
-<div class="wall-item-outside-wrapper$indent wallwall" id="wall-item-outside-wrapper-$id" >
-       <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
-               <div class="wall-item-info wallwall" id="wall-item-info-$id">
-                       <div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$id" >
-                               <a href="$owner_url" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id">
-                               <img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" style="height: 80px; width: 80px;" alt="$owner_name" /></a>
-                       </div>
-                       <div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$wall" /></div>
-                       <div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$id" 
-                               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')"
-                onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
-                               <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
-                               <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" style="height: 80px; width: 80px;" alt="$name" /></a>
-                               <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
-                <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
-                    <ul>
-                        $item_photo_menu
-                    </ul>
-                </div>
-
-                       </div>
-                       <div class="wall-item-photo-end"></div>
-                       <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
-                               $lock
-                               <div class="wall-item-location" id="wall-item-location-$id">$location</div>
+{{ if $indent }}{{ else }}
+<div class="wall-item-decor">
+       <span class="icon s22 star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span>
+       {{ if $lock }}<span class="icon s22 lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }} 
+       <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
+</div>
+{{ endif }}
+<div class="wall-item-container $indent">
+       <div class="wall-item-item">
+               <div class="wall-item-info">
+                       <div class="wall-item-photo-wrapper mframe wwto" id="wall-item-ownerphoto-wrapper-$id" >
+                               <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id">
+                                       <img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" alt="$owner_name" />
+                               </a>
                        </div>
+                       <div class="wall-item-photo-wrapper mframe wwfrom"
+                               onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')" 
+                               onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+                                       <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" alt="$name" />
+                               </a>
+                               <a href="#" rel="#wall-item-photo-menu-$id" class="fakelink wall-item-photo-menu-button icon s16 menu" id="wall-item-photo-menu-button-$id">menu</a>
+                               <ul class="wall-item-menu menu-popup" id="wall-item-photo-menu-$id">
+                               $item_photo_menu
+                               </ul>
+                               
+                       </div>  
+                       <div class="wall-item-location">$location</div> 
                </div>
-               <div class="wall-item-author">
-                               <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a> $to <a href="$owner_url" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a> $vwall<br />
-                               <div class="wall-item-ago"  id="wall-item-ago-$id">$ago</div>                           
-               </div>                  
-               <div class="wall-item-content" id="wall-item-content-$id" >
-                       <div class="wall-item-title" id="wall-item-title-$id">$title</div>
-                       <div class="wall-item-title-end"></div>
-                       <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+               <div class="wall-item-content">
+                       {{ if $title }}<h2><a href="$plink.href">$title</a></h2>{{ endif }}
+                       $body
                </div>
-               <div class="wall-item-tools" id="wall-item-tools-$id">
-               $vote
-               $plink
-               $edpost
-               $star
-               $drop
-               </div>
-       </div>  
-       <div class="wall-item-wrapper-end"></div>
-       <div class="wall-item-like" id="wall-item-like-$id">$like</div>
-       <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
-       <div class="wall-item-comment-separator"></div>
-       <div class="wall-item-comment-wrapper" >
-       $comment
        </div>
+       <div class="wall-item-bottom">
+               <div class="wall-item-links">
+                       {{ if $plink }}<a class="icon s16 link" title="$plink.title" href="$plink.href">$plink.title</a>{{ endif }}
+               </div>
+               <div class="wall-item-actions">
+                       <div class="wall-item-actions-author">
+                               <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle">$name</span></a> <span class="wall-item-ago">$ago</span>
+                                <br/>$to <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a> $vwall
+                                
+                       </div>
+                       
+                       <div class="wall-item-actions-social">
+                       {{ if $star }}
+                               <a href="#" id="star-$id" onclick="dostar($id); return false;"  class="$star.classdo"  title="$star.do">$star.do</a>
+                               <a href="#" id="unstar-$id" onclick="dostar($id); return false;"  class="$star.classundo"  title="$star.undo">$star.undo</a>
+                       {{ endif }}
+                       
+                       {{ if $vote }}
+                               <a href="#" id="like-$id" title="$vote.like.0" onclick="dolike($id,'like'); return false">$vote.like.1</a>
+                               <a href="#" id="dislike-$id" title="$vote.dislike.0" onclick="dolike($id,'dislike'); return false">$vote.dislike.1</a>
+                       {{ endif }}
+                                               
+                       {{ if $vote.share }}
+                               <a href="#" id="share-$id" title="$vote.share.0" onclick="jotShare($id); return false">$vote.share.1</a>
+                       {{ endif }}                     
+                       </div>
+                       
+                       <div class="wall-item-actions-tools">
 
-<div class="wall-item-outside-wrapper-end$indent" ></div>
+                               {{ if $drop.dropping }}
+                                       <input type="checkbox" title="$drop.select" name="itemselected[]" value="$id" />
+                                       <a href="item/drop/$id" onclick="return confirmDelete();" class="icon delete s16" title="$drop.delete">$drop.delete</a>
+                               {{ endif }}
+                               {{ if $edpost }}
+                                       <a class="icon edit s16" href="$edpost.0" title="$edpost.1"></a>
+                               {{ endif }}
+                       </div>
+                       
+               </div>
+       </div>
+</div>
+<div class="wall-item-comment-wrapper" >
+       $comment
 </div>
-
index f1d9707d578a245c2c6277b0926d08ff3e11876f..dbb20256f93fd5f3828210bb7a0f63bfe72b39c5 100644 (file)
@@ -2,11 +2,28 @@
 <XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'
      xmlns:hm='http://host-meta.net/xrd/1.0'>
  
-    <hm:Host>$zroot</hm:Host>
+    <hm:Host>$zhost</hm:Host>
  
     <Link rel='lrdd' template='$domain/xrd/?uri={uri}' />
     <Link rel='acct-mgmt' href='$domain/amcd' />
     <Link rel='http://services.mozilla.com/amcd/0.1' href='$domain/amcd' />
        <Link rel="http://oexchange.org/spec/0.8/rel/resident-target" type="application/xrd+xml" 
-               href="$domain/oexchange/xrd" />
+        href="$domain/oexchange/xrd" />
+
+    <Link rel="http://purl.org/zot/1.0/post" 
+        href="$zot_post" />
+
+    <Property xmlns:zot="http://purl.og/zot/1.0"
+        type="http://purl.org/zot/1.0/version"
+        zot:version="1" />
+
+    <Property xmlns:zot="http://purl.og/zot/1.0"
+        type="http://purl.org/zot/1.0/accept"
+        zot:accept="application/atom+xml" />
+
+    <Property xmlns:mk="http://salmon-protocol.org/ns/magic-key"
+        type="http://salmon-protocol.org/ns/magic-key"
+        mk:key_id="1">$bigkey</Property>
+
+
 </XRD>
index fd11ad600dbaea18702162ec96cd5aeab31b707a..2b5af3d0d2d8aa0c263d5f4322f776d482dd6286 100644 (file)
@@ -5,6 +5,17 @@
        <Alias>$accturi</Alias>
     <Alias>$profile_url</Alias>
  
+    <Link rel="http://purl.org/zot/1.0/post/$nick" 
+          href="$zot_post" />
+
+    <Property xmlns:zot="http://purl.og/zot/1.0"
+          type="http://purl.org/zot/1.0/version"
+          zot:version="1" />
+
+    <Property xmlns:zot="http://purl.og/zot/1.0"
+        type="http://purl.org/zot/1.0/accept"
+        zot:accept="application/atom+xml" />
+
     <Link rel="http://purl.org/macgirvin/dfrn/1.0"
           href="$profile_url" />
     <Link rel="http://schemas.google.com/g/2010#updates-from" 
@@ -29,4 +40,8 @@
     <Link rel="magic-public-key" 
           href="$modexp" />
  
+       <Property xmlns:mk="http://salmon-protocol.org/ns/magic-key"
+          type="http://salmon-protocol.org/ns/magic-key"
+          mk:key_id="1">$bigkey</Property>
+
 </XRD>
diff --git a/zot.txt b/zot.txt
new file mode 100644 (file)
index 0000000..b160788
--- /dev/null
+++ b/zot.txt
@@ -0,0 +1,364 @@
+This is the Zot! social communications protocol. 
+
+Specification revision: 1
+2 October 2011
+
+Mike Macgirvin
+This specification is public domain.
+
+Zot is a framework for secure delivery of messages on the web based on 
+webfinger and encapsulating salmon.
+
+First read the salmon and salmon magic envelope specifications. Zot also 
+makes use of webfinger and ActivityStreams and several concepts from RFC822
+(email). Zot encompasses the zot delivery framework and the zid remote
+access protocol.
+
+The current specification revision (1) is frozen until a reference 
+implementation is available. After that, any protocol changes will require a 
+change to the revision number.  
+
+****************
+* Zot delivery *
+****************
+
+Format of a zot wrapper. This completely encapsulates a salmon magic envelope 
+and provides privacy protection, while defining a delivery envelope - a 
+concept familiar to email systems. All addresses in zot are webfinger 
+resolvable addresses containing zot endpoints and salmon public keys (zot 
+is a superset of salmon). 
+
+
+<?xml version='1.0' encoding='UTF-8'?>
+<zot:msg xmlns:zot='http://purl.org/zot/1.0'>
+ <zot:key>((key))</zot:key>
+ <zot:iv>((iv))</zot:iv>
+ <zot:env_key>((env_key))</zot:env_key>
+ <zot:env_iv>((env_iv))</zot:env_iv>
+ <zot:env>((envelope))</zot:env>
+ <zot:sig key_id="xxx">((sender signature))</zot:sig>
+ <zot:alg>AES-256-CBC</zot:alg>
+ <zot:data type='application/magic-envelope+xml'>((salmon))</zot:data>
+</zot:msg>
+
+
+zot:key
+*******
+
+A suitable randomly generated encyption key of length 32 octets for encrypting 
+the salmon packet. This is then encrypted with the sender's private key and 
+base64url encoded.
+
+zot:iv
+******
+
+A suitable randomly generated initialisation vector of length 16 octets for 
+encrypting the salmon packet. This is then encrypted with the sender's private 
+key and base64url encoded.
+
+zot:env_key
+***********
+
+A suitable randomly generated encyption key of length 32 octets for encrypting 
+the envelope. This is then encrypted with the recipient's public key and 
+base64url encoded. For bulk deliveries, it is encrypted with the site bulk 
+delivery public key.
+
+
+zot:env_iv
+**********
+
+A suitable randomly generated initialisation vector of length 16 octets for 
+encrypting the envelope. This is then encrypted with the recipient's public
+key and base64url encoded. For bulk deliveries, it is encrypted with the site 
+bulk delivery public key.
+
+
+zot:env
+*******
+
+This consists of RFC822-style header fields representing the sender and 
+recipient(s). Line lengths have no defined limit and RFC822 continuation
+lines are not supported. If an inbound server is not able to process an
+envelope or post due to size constraints, it SHOULD return a 
+"413 Entity too large" HTTP response. 
+
+Example:
+
+Z-From: zot:bob@example.com
+Z-Sender: zot:bob@example.com
+Z-To: zot:alice@example.com
+
+Both "Z-From:" and "Z-Sender:" MUST be provided, and represent a single 
+webfinger address of the author and sender respectively. The webfinger
+address for the From address MUST contain a discoverable salmon public key 
+which is needed to verify the enclosed salmon data. Sender is used to indicate
+the webfinger identity responsible for transmitting this message. From
+indicates the message author. 
+
+In web-based social systems, a reply to a message SHOULD be conveyed to all of 
+the original message participants. Only the author of the original message 
+may know all the recipients (such as those contained in Bcc: elements). The 
+author of a message always provides 'From'. They MUST duplicate this 
+information as 'Sender' when posting a followup message.
+
+A reply to a given message MUST be sent to the From address of the original
+post, and MAY be sent to any additional addresses in the recipient list. The
+original post author MUST send the reply to all known recipients of the 
+original message, with their webfinger identity as Sender, and the 
+comment/reply author as From.   
+
+Receiving agents SHOULD validate the From identity as the signer of the salmon
+magic envelope, and MAY reject it. They SHOULD also verify the Sender signature
+of the zot packet if it is different than the salmon signature. They MAY 
+reject the message if the Sender is not allowed in their "friend list", or if 
+they do not have a suitable relationship with the Sender, or if either
+signature fails to validate. Rejected messages for one of these reasons SHOULD 
+be indicated with a "400 Bad Request" HTTP response.   
+
+
+Z-To: *
+
+indicates a public message with no specifically enumerated recipients.
+
+The fields Z-To: and/or Z-Bcc: MAY be present. At least one recipient field
+MUST be present.
+
+Z-To: zot:bob@example.com, zot:alice@example.com, mailto:dave@example.com 
+Z-Bcc: zot:https://example.com/profile/richard
+
+are valid entries. Adresses are comma separated and individual entries MUST NOT
+contain commas. There MAY be any number of ASCII space characters between
+entries for legibility. Header lines are terminated with a linefeed character
+(ASCII 0x0A). 
+
+This specification provides the following foreign protocol address prefixes
+for use in Z-To: or Z-Bcc: elements:
+
+zot: - normal zot delivery using webfinger or LRDD resolvable address
+ostatus: - normal OStatus delivery using webfinger or LRDD resovable address
+diaspora: - Diaspora network delivery using webfinger address
+facebook: - Facebook profile page URL
+twitter: - Twitter personal page URL without AJAX '#!' fragment
+mailto: - email RFC822/ESMTP address
+
+Examples:
+
+twitter:http://twitter.com/bjensen
+facebook:http://facebook.com/profile.php?id=000000001
+
+Foreign protocol addresses which have not been defined in this specification 
+or future revisions of this specification and which are unknown to the
+recipient delivery process MAY be ignored.
+
+In cases where an address may contain either a webfinger or LRDD address, the
+webfinger address SHOULD be used preferentially. 
+
+
+Z-Bcc:
+******
+
+The Z-Bcc element may contain one or more addresses which are hidden from end
+user presentation. A zot receiving system MUST NOT store or allow for
+the display of the Bcc information. Implementations which require extreme
+privacy SHOULD send individual posts to each of the Bcc: recipients containing
+only a single address. They MAY send all Bcc: posts using bulk delivery, 
+however this may have privacy implications as there is no guarantee a
+receiving system will not log, store, or otherwise reveal the contents of the
+Bcc recipient list.
+
+Z-To: addresses MAY be shown to an end user.   
+
+Envelope encryption
+*******************
+
+
+The entire envelope is encrypted using alg with env_key and env_iv and
+base64url encoded for transmission.
+
+The zot envelope MAY include remote addresses. A zot inbound delivery agent
+MUST parse the envelope and determine whether a delivery address to the
+current endpoint is valid. This may be the result of:
+
+       1. An address contains the public message wildcard '*'
+
+       2. The current endpoint is a personal endpoint and one of the recipients
+listed in the Z-To: or Z-Bcc: addresses matches the webfinger address of
+the "owner" of the endpoint.
+
+       3. The current endpoint is a bulk delivery endpoint. The bulk delivery
+endpoint is defined elsewhere in this document. The bulk delivery agent
+will deliver to all local addresses found in the address lists. 
+
+zot:sig
+*******
+
+The Sender of the message signs the underlying salmon data in the manner 
+prescribed by salmon. If the Sender and From address are identical, the
+signature will be identical to the signature of the underlying salmon packet. 
+If they are different, this signature is verified with the Sender's public 
+key to verify the Sender. 
+
+zot:alg
+*******
+
+Currently the only valid choice for alg is "AES-256-CBC". 
+
+
+zot:data
+********
+
+The data field is a salmon magic envelope. This is encrypted with alg using 
+key and iv. The result is then base64url encoded for transmission.
+
+For the first release of this specification, the data format of the enclosed
+salmon SHOULD be 'application/atom+xml' representing an Atom formatted
+ActivityStream. Future revisions MAY allow other alternate data formats.
+All acceptable formats MUST be listed in an XRD property (described elsewhere
+in this document).  
+
+
+Delivery
+********
+
+The zot message is then POSTed to the zot endpoint URL as 
+application/text+xml and can be decoded/decrypted by the recipient using 
+their private key.
+
+The normal salmon endpoint for a service MAY be used as an alternate
+delivery method for non-encrypted (e.g. public) messages. 
+
+Discover of the zot endpoint is based on webfinger XRD:
+
+<Link rel="http://purl.org/zot/1.0/post" 
+       href="http://example/org/zot-endpoint" />
+
+
+Bulk Delivery
+*************
+
+A site MAY provide a bulk delivery endpoint, which MAY be used to avoid
+multiple encryptions of the same data for a single destination.
+This is discoverable by providing a zot endpoint with a corresponding
+salmon public key in the site's .well-known/host-meta file.
+A delivery to this endpoint will deliver to all local recipients provided
+within the zot envelope. 
+
+
+Extensibility
+*************
+
+This specification is subject to change. The current version which is in
+effect at a given site may be noted by XRD properties. The following 
+properties MUST be present in the XRD providing the relevant endpoint:
+
+<Property xmlns:zot="http://purl.og/zot/1.0"
+       type="http://purl.org/zot/1.0/version"
+       zot:version="1" />
+
+<Property xmlns:zot="http://purl.og/zot/1.0"
+       type="http://purl.org/zot/1.0/accept"
+       zot:accept="application/atom+xml" />
+
+Version is specified in this document and indicates the current revision.
+Implementations MAY provide compatibility to multiple incompatible versions
+by using this version indication. The "accept" indicates a range of document
+content types which may be enclosed in the underlying salmon magic envelope.
+We anticipate this specification will in the future allow for a close variant
+of "message/rfc822" and which may include MIME. This may also be used to 
+embed alternate message formats and protocols such as 
+"application/x-diaspora+xml". If a delivery agent is unable to provide any
+acceptable data format to the remote system, the delivery to that system MUST
+be terminated/cancelled. 
+
+Foreign Messages
+****************
+
+Messages MAY be imported from other networks and systems which have no 
+knowledge of salmon signatures. The salmon signature in this case MUST be the
+exact string 'NOTSIGNED' to indicate that the author (From address) cannot be 
+validated using salmon verification. This message MUST be relayed by a Sender
+who can provide a valid salmon signature of the message via zot:sig. Delivery
+systems MAY reject foreign messages.  
+
+
+
+
+
+*******************************
+* Zid (Zot-ID) authentication *
+*******************************
+
+This section of the document is considered separate from the delivery 
+specification precding it and represents a different protocol, which is
+currently incomplete. This will be split off into another document in the
+future, but is presented here as a synergistic component of the Zot network
+model. 
+
+
+URLs may be present within a zot message which refer to private and/or
+protected resources. Zid uses OpenID to gain access to these protected
+resources. These could be private photos or profile information - or *any*
+web accessible resource. Using zid, these can have access controls which 
+extends to any resolvable webfinger address.
+
+Zid authentication relies on the presence of an OpenID provider element in
+webfinger, and a URL template which is applied to protected resources within
+a zot message.
+
+The template is designated with the characters "{zid=}" within a URL of a zot
+message. When the page is rendered for viewing to an observer, this template
+is replaced with the webfinger address of the viewer (if known), or an empty
+string if the webfinger address of the viewer cannot be determined.
+
+For example in a message body:
+
+http://example.com/photos/bob/picture.jpg?{zid=}
+
+refers to a private photo which is only visible to alice@example.com.
+
+If Alice is viewing the page, the link is rendered with
+
+http://example.com/photos/bob/picture.jpg?zid=alice@example.com
+
+If the page viewer is unknown, it is rendered as
+
+http://example.com/photos/bob/picture.jpg?zid=
+
+
+When the link is visited, the web server at example.com notes the presence of 
+the zid parameter and uses information from webfinger to locate the OpenID 
+provider for the zid webfinger address. It then redirects to the OpenID 
+server and requests authentication of the given person. If this is successful,
+access to the protected resource is granted.
+
+A browser cookie may be provided to avoid future authentication redirects
+and allow authenticated browsing to other resources on the website.
+
+Only authentication via OpenID is defined in this version of the specification.
+
+This can be used to provide access control of any web resource to any 
+webfinger identity on the internet.
+
+
+*********
+* Links *
+*********
+
+Salmon Protocol
+       http://www.salmon-protocol.org/salmon-protocol-summary
+
+Salmon Magic Envelope
+       http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-magicsig-01.html
+
+Atom Activity Stream Draft
+       http://activitystrea.ms/specs/atom/1.0/
+
+Activty Stream Base Schema
+       http://activitystrea.ms/head/activity-schema.html
+
+WebFinger Protocol
+       http://code.google.com/p/webfinger/wiki/WebFingerProtocol
+
+