From 74c23fa0d1039c081c12f1f752b1c4da3ee76f7c Mon Sep 17 00:00:00 2001 From: Wojciech Todryk Date: Sat, 3 Mar 2012 18:53:39 +0100 Subject: [PATCH] start to switch to rails 3.2.2 --- .gitignore | 20 +- AUTHORS | 5 - CHANGES | 19 - Gemfile | 45 +- Gemfile.lock | 112 + Rakefile | 2 +- TODO | 20 - UNLICENSE | 24 - {public => app/assets}/images/rails.png | Bin app/assets/javascripts/application.js | 15 + app/assets/stylesheets/application.css | 13 + app/controllers/application_controller.rb | 98 +- app/controllers/contacts_controller.rb | 135 - app/controllers/folders_controller.rb | 172 - app/controllers/internal_controller.rb | 53 - app/controllers/links_controller.rb | 133 - app/controllers/messages_controller.rb | 210 - app/controllers/messages_ops_controller.rb | 354 - app/controllers/prefs_controller.rb | 55 - app/controllers/user_controller.rb | 75 - app/helpers/application_helper.rb | 332 - app/helpers/contacts_helper.rb | 17 - app/helpers/folder_helper.rb | 66 - app/helpers/internal_helper.rb | 2 - app/helpers/links_helper.rb | 17 - app/helpers/messages_helper.rb | 113 - app/helpers/messages_ops_helper.rb | 2 - app/helpers/prefs_helper.rb | 16 - app/helpers/user_helper.rb | 2 - {public/stylesheets => app/mailers}/.gitkeep | 0 {themes/olive/images => app/models}/.gitkeep | 0 app/models/contact.rb | 54 - app/models/folder.rb | 146 - app/models/link.rb | 19 - app/models/message.rb | 72 - app/models/prefs.rb | 19 - app/models/server.rb | 41 - app/models/user.rb | 64 - app/views/layouts/application.html.erb | 14 + arts/favicon.png | Bin 16596 -> 0 bytes arts/favicon.xcf | Bin 44489 -> 0 bytes arts/logo.png | Bin 61554 -> 0 bytes arts/logo.xcf | Bin 254283 -> 0 bytes arts/logo2.xcf | Bin 255261 -> 0 bytes arts/logo3.xcf | Bin 334574 -> 0 bytes config.ru | 0 config/application.rb | 52 +- config/boot.rb | 0 config/database.yml | 42 + config/defaults.yml | 53 - config/environment.rb | 1 - config/environments/development.rb | 21 +- config/environments/production.rb | 44 +- config/environments/test.rb | 16 +- config/initializers/backtrace_silencers.rb | 0 config/initializers/inflections.rb | 5 + config/initializers/mime_types.rb | 0 config/initializers/secret_token.rb | 2 +- config/initializers/session_store.rb | 0 config/initializers/show_exceptions.rb | 16 - config/initializers/wrap_parameters.rb | 14 + config/locales/en.yml | 66 +- config/locales/en.yml.old | 160 - config/locales/es-ES.yml | 91 - config/locales/pl.yml | 227 - config/routes.rb | 113 +- db/migrate/20110723115402_create_users.rb | 15 - db/migrate/20110723153214_create_servers.rb | 14 - db/migrate/20110724125806_create_prefs.rb | 14 - .../20110724134917_add_params_to_prefs.rb | 11 - .../20110725210440_add_use_ssl_to_servers.rb | 9 - db/migrate/20110727070907_create_folders.rb | 17 - ...0110727074214_rename_attribs_in_folders.rb | 11 - .../20110727081504_change_new_in_folder.rb | 9 - .../20110727105240_add_column_to_folder.rb | 9 - ...0110727132531_add_column_msgs_to_folder.rb | 9 - db/migrate/20110727134352_create_messages.rb | 23 - .../20110731185416_add_shown_to_folders.rb | 11 - ...110803115924_rename_m_essages_in_folder.rb | 9 - ...20110804130051_rename_unseen_in_message.rb | 9 - db/migrate/20110810073021_create_contacts.rb | 17 - ...16093648_rename_from_column_in_messages.rb | 11 - ...120258_remove_msgs_update_from_messages.rb | 9 - .../20110830070509_add_options_to_servers.rb | 13 - .../20110830074142_add_domain_to_users.rb | 9 - .../20110831090041_add_type_to_folders.rb | 9 - .../20110901120826_add_auth_to_servers.rb | 9 - .../20110908094506_add_msg_params_to_prefs.rb | 11 - .../20110927091830_rename_email_in_user.rb | 9 - db/migrate/20120109191128_create_links.rb | 17 - db/schema.rb | 103 - db/seeds.rb | 2 +- doc/README_FOR_APP | 0 .../olive/javascripts => lib/assets}/.gitkeep | 0 lib/imap_folder.rb | 23 - lib/imap_mailbox.rb | 207 - lib/imap_message.rb | 91 - lib/imap_session.rb | 25 - lib/mail_plugin_extension.rb | 114 - lib/tasks/.gitkeep | 0 lib/tasks/clear_db.rake | 23 - {themes/olive/stylesheets => log}/.gitkeep | 0 public/404.html | 0 public/422.html | 0 public/500.html | 1 - public/favicon.ico | Bin 1150 -> 0 bytes public/images/ui-icons_222222_256x240.png | Bin 4369 -> 0 bytes public/images/ui-icons_454545_256x240.png | Bin 4369 -> 0 bytes public/index.html | 241 + public/javascripts/application.js | 2 - public/javascripts/controls.js | 965 --- public/javascripts/dragdrop.js | 974 --- public/javascripts/effects.js | 1123 --- public/javascripts/jquery.js | 18 - public/javascripts/old_rails.js | 191 - public/javascripts/prototype.js | 6001 ----------------- public/javascripts/rails.js | 331 - public/robots.txt | 0 .../views/layouts => test/fixtures}/.gitkeep | 0 test/fixtures/contacts.yml | 15 - test/fixtures/folders.yml | 15 - test/fixtures/links.yml | 15 - test/fixtures/messages.yml | 27 - test/fixtures/prefs.yml | 9 - test/fixtures/servers.yml | 9 - test/fixtures/users.yml | 11 - .../functional/.gitkeep | 0 test/functional/contacts_controller_test.rb | 9 - test/functional/core_controller_test.rb | 14 - test/functional/folder_controller_test.rb | 19 - test/functional/internal_controller_test.rb | 9 - test/functional/messages_controller_test.rb | 9 - .../messages_ops_controller_test.rb | 8 - test/functional/prefs_controller_test.rb | 9 - test/integration/.gitkeep | 0 test/performance/browsing_test.rb | 5 +- test/test_helper.rb | 0 test/unit/.gitkeep | 0 test/unit/contact_test.rb | 8 - test/unit/event_test.rb | 8 - test/unit/folder_test.rb | 8 - test/unit/helpers/contacts_helper_test.rb | 4 - test/unit/helpers/core_helper_test.rb | 4 - test/unit/helpers/folder_helper_test.rb | 4 - test/unit/helpers/internal_helper_test.rb | 4 - test/unit/helpers/messages_helper_test.rb | 4 - test/unit/helpers/messages_ops_helper_test.rb | 4 - test/unit/helpers/prefs_helper_test.rb | 4 - test/unit/link_test.rb | 8 - test/unit/message_test.rb | 8 - test/unit/prefs_test.rb | 8 - test/unit/server_test.rb | 8 - test/unit/user_test.rb | 8 - themes/olive/README.olive | 3 - themes/olive/images/License.txt | 6 - themes/olive/images/copy.png | Bin 726 -> 0 bytes themes/olive/images/download.png | Bin 806 -> 0 bytes themes/olive/images/email.png | Bin 851 -> 0 bytes themes/olive/images/flag.png | Bin 795 -> 0 bytes themes/olive/images/forward.png | Bin 817 -> 0 bytes themes/olive/images/key.png | Bin 1475 -> 0 bytes themes/olive/images/left.png | Bin 781 -> 0 bytes themes/olive/images/logo_small.png | Bin 17995 -> 0 bytes themes/olive/images/minus.png | Bin 738 -> 0 bytes themes/olive/images/move.png | Bin 783 -> 0 bytes themes/olive/images/plus.png | Bin 790 -> 0 bytes themes/olive/images/power.png | Bin 872 -> 0 bytes themes/olive/images/refresh.png | Bin 855 -> 0 bytes themes/olive/images/reply.png | Bin 809 -> 0 bytes themes/olive/images/right.png | Bin 798 -> 0 bytes themes/olive/images/save.png | Bin 856 -> 0 bytes themes/olive/images/seen.png | Bin 815 -> 0 bytes themes/olive/images/star.png | Bin 816 -> 0 bytes themes/olive/images/trash.png | Bin 891 -> 0 bytes themes/olive/images/unseen.png | Bin 875 -> 0 bytes themes/olive/images/up.png | Bin 804 -> 0 bytes themes/olive/images/zoom.png | Bin 854 -> 0 bytes themes/olive/javascripts/application.js | 24 - themes/olive/javascripts/jquery-ui.js | 790 --- themes/olive/javascripts/jquery.js | 18 - themes/olive/javascripts/rails.js | 331 - themes/olive/stylesheets/jquery-ui-custom.css | 568 -- themes/olive/stylesheets/jquery-ui-dialog.css | 21 - themes/olive/stylesheets/olive.css | 560 -- themes/olive/views/contacts/_contact.html.erb | 7 - .../olive/views/contacts/_external.html.erb | 11 - themes/olive/views/contacts/_left.html.erb | 9 - themes/olive/views/contacts/_list.html.erb | 25 - themes/olive/views/contacts/_ops.html.erb | 3 - themes/olive/views/contacts/_right.html.erb | 1 - themes/olive/views/contacts/edit.html.erb | 30 - themes/olive/views/contacts/index.html.erb | 27 - themes/olive/views/contacts/new.html.erb | 30 - themes/olive/views/folders/_create.html.erb | 7 - themes/olive/views/folders/_delete.html.erb | 6 - themes/olive/views/folders/_list.html.erb | 19 - themes/olive/views/folders/_refresh.html.erb | 7 - themes/olive/views/folders/_system.html.erb | 9 - themes/olive/views/folders/index.html.erb | 27 - themes/olive/views/internal/_version.html.erb | 4 - themes/olive/views/internal/about.html.erb | 33 - themes/olive/views/internal/error.html.erb | 14 - themes/olive/views/layouts/_flash.html.erb | 16 - .../olive/views/layouts/application.html.erb | 36 - themes/olive/views/layouts/html_body.erb | 1 - themes/olive/views/layouts/simple.html.erb | 15 - themes/olive/views/links/_left.html.erb | 7 - themes/olive/views/links/_link.html.erb | 5 - themes/olive/views/links/_list.html.erb | 25 - themes/olive/views/links/_ops.html.erb | 3 - themes/olive/views/links/_right.html.erb | 1 - themes/olive/views/links/edit.html.erb | 30 - themes/olive/views/links/index.html.erb | 26 - themes/olive/views/links/new.html.erb | 30 - .../olive/views/messages/_attachment.html.erb | 19 - .../views/messages/_attachments.html.erb | 13 - .../views/messages/_file_attach.html.erb | 4 - .../views/messages/_file_attachs.html.erb | 16 - .../views/messages/_file_select.html.erb | 9 - themes/olive/views/messages/_header.html.erb | 14 - .../olive/views/messages/_html_part.html.erb | 3 - themes/olive/views/messages/_image.html.erb | 8 - themes/olive/views/messages/_images.html.erb | 8 - themes/olive/views/messages/_message.html.erb | 17 - .../olive/views/messages/_messages.html.erb | 33 - .../olive/views/messages/_multi_ops.html.erb | 5 - themes/olive/views/messages/_new.html.erb | 27 - themes/olive/views/messages/_search.html.erb | 10 - .../olive/views/messages/_single_ops.html.erb | 10 - themes/olive/views/messages/compose.html.erb | 23 - .../olive/views/messages/html_body.html.erb | 2 - themes/olive/views/messages/index.html.erb | 33 - .../views/messages/old_html_view.html.erb | 18 - themes/olive/views/messages/show.html.erb | 43 - .../olive/views/prefs/_identity_left.html.erb | 21 - .../views/prefs/_identity_right.html.erb | 1 - themes/olive/views/prefs/_look_left.html.erb | 7 - themes/olive/views/prefs/_look_right.html.erb | 5 - themes/olive/views/prefs/_server.html.erb | 9 - .../olive/views/prefs/_servers_left.html.erb | 5 - .../olive/views/prefs/_servers_list.html.erb | 16 - .../olive/views/prefs/_servers_right.html.erb | 1 - themes/olive/views/prefs/identity.html.erb | 27 - themes/olive/views/prefs/look.html.erb | 27 - themes/olive/views/prefs/servers.html.erb | 22 - .../views/sidebar/_calendar_view.html.erb | 4 - themes/olive/views/sidebar/_logo.html.erb | 3 - themes/olive/views/user/login.html.erb | 46 - themes/olive/views/user/setup.html.erb | 20 - themes/olive/views/user/unknown.html.erb | 16 - vendor/assets/javascripts/.gitkeep | 0 vendor/assets/stylesheets/.gitkeep | 0 vendor/plugins/.gitkeep | 0 253 files changed, 648 insertions(+), 17155 deletions(-) mode change 100755 => 100644 .gitignore delete mode 100755 AUTHORS delete mode 100755 CHANGES mode change 100755 => 100644 Gemfile create mode 100644 Gemfile.lock mode change 100755 => 100644 Rakefile delete mode 100755 TODO delete mode 100755 UNLICENSE rename {public => app/assets}/images/rails.png (100%) mode change 100755 => 100644 create mode 100644 app/assets/javascripts/application.js create mode 100644 app/assets/stylesheets/application.css mode change 100755 => 100644 app/controllers/application_controller.rb delete mode 100755 app/controllers/contacts_controller.rb delete mode 100755 app/controllers/folders_controller.rb delete mode 100755 app/controllers/internal_controller.rb delete mode 100755 app/controllers/links_controller.rb delete mode 100755 app/controllers/messages_controller.rb delete mode 100755 app/controllers/messages_ops_controller.rb delete mode 100755 app/controllers/prefs_controller.rb delete mode 100755 app/controllers/user_controller.rb mode change 100755 => 100644 app/helpers/application_helper.rb delete mode 100755 app/helpers/contacts_helper.rb delete mode 100755 app/helpers/folder_helper.rb delete mode 100755 app/helpers/internal_helper.rb delete mode 100755 app/helpers/links_helper.rb delete mode 100755 app/helpers/messages_helper.rb delete mode 100755 app/helpers/messages_ops_helper.rb delete mode 100755 app/helpers/prefs_helper.rb delete mode 100755 app/helpers/user_helper.rb rename {public/stylesheets => app/mailers}/.gitkeep (100%) mode change 100755 => 100644 rename {themes/olive/images => app/models}/.gitkeep (100%) mode change 100755 => 100644 delete mode 100755 app/models/contact.rb delete mode 100755 app/models/folder.rb delete mode 100644 app/models/link.rb delete mode 100755 app/models/message.rb delete mode 100755 app/models/prefs.rb delete mode 100755 app/models/server.rb delete mode 100755 app/models/user.rb create mode 100644 app/views/layouts/application.html.erb delete mode 100755 arts/favicon.png delete mode 100755 arts/favicon.xcf delete mode 100755 arts/logo.png delete mode 100755 arts/logo.xcf delete mode 100755 arts/logo2.xcf delete mode 100755 arts/logo3.xcf mode change 100755 => 100644 config.ru mode change 100755 => 100644 config/application.rb mode change 100755 => 100644 config/boot.rb create mode 100644 config/database.yml delete mode 100755 config/defaults.yml mode change 100755 => 100644 config/environment.rb mode change 100755 => 100644 config/environments/development.rb mode change 100755 => 100644 config/environments/production.rb mode change 100755 => 100644 config/environments/test.rb mode change 100755 => 100644 config/initializers/backtrace_silencers.rb mode change 100755 => 100644 config/initializers/inflections.rb mode change 100755 => 100644 config/initializers/mime_types.rb mode change 100755 => 100644 config/initializers/secret_token.rb mode change 100755 => 100644 config/initializers/session_store.rb delete mode 100755 config/initializers/show_exceptions.rb create mode 100644 config/initializers/wrap_parameters.rb mode change 100755 => 100644 config/locales/en.yml delete mode 100755 config/locales/en.yml.old delete mode 100755 config/locales/es-ES.yml delete mode 100755 config/locales/pl.yml mode change 100755 => 100644 config/routes.rb delete mode 100755 db/migrate/20110723115402_create_users.rb delete mode 100755 db/migrate/20110723153214_create_servers.rb delete mode 100755 db/migrate/20110724125806_create_prefs.rb delete mode 100755 db/migrate/20110724134917_add_params_to_prefs.rb delete mode 100755 db/migrate/20110725210440_add_use_ssl_to_servers.rb delete mode 100755 db/migrate/20110727070907_create_folders.rb delete mode 100755 db/migrate/20110727074214_rename_attribs_in_folders.rb delete mode 100755 db/migrate/20110727081504_change_new_in_folder.rb delete mode 100755 db/migrate/20110727105240_add_column_to_folder.rb delete mode 100755 db/migrate/20110727132531_add_column_msgs_to_folder.rb delete mode 100755 db/migrate/20110727134352_create_messages.rb delete mode 100755 db/migrate/20110731185416_add_shown_to_folders.rb delete mode 100755 db/migrate/20110803115924_rename_m_essages_in_folder.rb delete mode 100755 db/migrate/20110804130051_rename_unseen_in_message.rb delete mode 100755 db/migrate/20110810073021_create_contacts.rb delete mode 100755 db/migrate/20110816093648_rename_from_column_in_messages.rb delete mode 100755 db/migrate/20110816120258_remove_msgs_update_from_messages.rb delete mode 100755 db/migrate/20110830070509_add_options_to_servers.rb delete mode 100755 db/migrate/20110830074142_add_domain_to_users.rb delete mode 100755 db/migrate/20110831090041_add_type_to_folders.rb delete mode 100755 db/migrate/20110901120826_add_auth_to_servers.rb delete mode 100755 db/migrate/20110908094506_add_msg_params_to_prefs.rb delete mode 100755 db/migrate/20110927091830_rename_email_in_user.rb delete mode 100644 db/migrate/20120109191128_create_links.rb delete mode 100755 db/schema.rb mode change 100755 => 100644 db/seeds.rb mode change 100755 => 100644 doc/README_FOR_APP rename {themes/olive/javascripts => lib/assets}/.gitkeep (100%) mode change 100755 => 100644 delete mode 100755 lib/imap_folder.rb delete mode 100755 lib/imap_mailbox.rb delete mode 100755 lib/imap_message.rb delete mode 100755 lib/imap_session.rb delete mode 100755 lib/mail_plugin_extension.rb mode change 100755 => 100644 lib/tasks/.gitkeep delete mode 100755 lib/tasks/clear_db.rake rename {themes/olive/stylesheets => log}/.gitkeep (100%) mode change 100755 => 100644 mode change 100755 => 100644 public/404.html mode change 100755 => 100644 public/422.html mode change 100755 => 100644 public/500.html mode change 100755 => 100644 public/favicon.ico delete mode 100755 public/images/ui-icons_222222_256x240.png delete mode 100755 public/images/ui-icons_454545_256x240.png create mode 100644 public/index.html delete mode 100755 public/javascripts/application.js delete mode 100755 public/javascripts/controls.js delete mode 100755 public/javascripts/dragdrop.js delete mode 100755 public/javascripts/effects.js delete mode 100755 public/javascripts/jquery.js delete mode 100755 public/javascripts/old_rails.js delete mode 100755 public/javascripts/prototype.js delete mode 100755 public/javascripts/rails.js mode change 100755 => 100644 public/robots.txt rename {themes/olive/views/layouts => test/fixtures}/.gitkeep (100%) mode change 100755 => 100644 delete mode 100755 test/fixtures/contacts.yml delete mode 100755 test/fixtures/folders.yml delete mode 100644 test/fixtures/links.yml delete mode 100755 test/fixtures/messages.yml delete mode 100755 test/fixtures/prefs.yml delete mode 100755 test/fixtures/servers.yml delete mode 100755 test/fixtures/users.yml rename app/views/contents_moved_to_olive_theme_directory => test/functional/.gitkeep (100%) mode change 100755 => 100644 delete mode 100755 test/functional/contacts_controller_test.rb delete mode 100755 test/functional/core_controller_test.rb delete mode 100755 test/functional/folder_controller_test.rb delete mode 100755 test/functional/internal_controller_test.rb delete mode 100755 test/functional/messages_controller_test.rb delete mode 100755 test/functional/messages_ops_controller_test.rb delete mode 100755 test/functional/prefs_controller_test.rb create mode 100644 test/integration/.gitkeep mode change 100755 => 100644 test/performance/browsing_test.rb mode change 100755 => 100644 test/test_helper.rb create mode 100644 test/unit/.gitkeep delete mode 100755 test/unit/contact_test.rb delete mode 100755 test/unit/event_test.rb delete mode 100755 test/unit/folder_test.rb delete mode 100755 test/unit/helpers/contacts_helper_test.rb delete mode 100755 test/unit/helpers/core_helper_test.rb delete mode 100755 test/unit/helpers/folder_helper_test.rb delete mode 100755 test/unit/helpers/internal_helper_test.rb delete mode 100755 test/unit/helpers/messages_helper_test.rb delete mode 100755 test/unit/helpers/messages_ops_helper_test.rb delete mode 100755 test/unit/helpers/prefs_helper_test.rb delete mode 100644 test/unit/link_test.rb delete mode 100755 test/unit/message_test.rb delete mode 100755 test/unit/prefs_test.rb delete mode 100755 test/unit/server_test.rb delete mode 100755 test/unit/user_test.rb delete mode 100755 themes/olive/README.olive delete mode 100755 themes/olive/images/License.txt delete mode 100755 themes/olive/images/copy.png delete mode 100755 themes/olive/images/download.png delete mode 100755 themes/olive/images/email.png delete mode 100755 themes/olive/images/flag.png delete mode 100755 themes/olive/images/forward.png delete mode 100755 themes/olive/images/key.png delete mode 100755 themes/olive/images/left.png delete mode 100755 themes/olive/images/logo_small.png delete mode 100755 themes/olive/images/minus.png delete mode 100755 themes/olive/images/move.png delete mode 100755 themes/olive/images/plus.png delete mode 100755 themes/olive/images/power.png delete mode 100755 themes/olive/images/refresh.png delete mode 100755 themes/olive/images/reply.png delete mode 100755 themes/olive/images/right.png delete mode 100755 themes/olive/images/save.png delete mode 100755 themes/olive/images/seen.png delete mode 100755 themes/olive/images/star.png delete mode 100755 themes/olive/images/trash.png delete mode 100755 themes/olive/images/unseen.png delete mode 100755 themes/olive/images/up.png delete mode 100755 themes/olive/images/zoom.png delete mode 100755 themes/olive/javascripts/application.js delete mode 100755 themes/olive/javascripts/jquery-ui.js delete mode 100755 themes/olive/javascripts/jquery.js delete mode 100755 themes/olive/javascripts/rails.js delete mode 100755 themes/olive/stylesheets/jquery-ui-custom.css delete mode 100755 themes/olive/stylesheets/jquery-ui-dialog.css delete mode 100755 themes/olive/stylesheets/olive.css delete mode 100755 themes/olive/views/contacts/_contact.html.erb delete mode 100755 themes/olive/views/contacts/_external.html.erb delete mode 100755 themes/olive/views/contacts/_left.html.erb delete mode 100755 themes/olive/views/contacts/_list.html.erb delete mode 100755 themes/olive/views/contacts/_ops.html.erb delete mode 100755 themes/olive/views/contacts/_right.html.erb delete mode 100755 themes/olive/views/contacts/edit.html.erb delete mode 100755 themes/olive/views/contacts/index.html.erb delete mode 100755 themes/olive/views/contacts/new.html.erb delete mode 100755 themes/olive/views/folders/_create.html.erb delete mode 100755 themes/olive/views/folders/_delete.html.erb delete mode 100755 themes/olive/views/folders/_list.html.erb delete mode 100755 themes/olive/views/folders/_refresh.html.erb delete mode 100755 themes/olive/views/folders/_system.html.erb delete mode 100755 themes/olive/views/folders/index.html.erb delete mode 100755 themes/olive/views/internal/_version.html.erb delete mode 100755 themes/olive/views/internal/about.html.erb delete mode 100755 themes/olive/views/internal/error.html.erb delete mode 100755 themes/olive/views/layouts/_flash.html.erb delete mode 100755 themes/olive/views/layouts/application.html.erb delete mode 100755 themes/olive/views/layouts/html_body.erb delete mode 100755 themes/olive/views/layouts/simple.html.erb delete mode 100755 themes/olive/views/links/_left.html.erb delete mode 100755 themes/olive/views/links/_link.html.erb delete mode 100755 themes/olive/views/links/_list.html.erb delete mode 100755 themes/olive/views/links/_ops.html.erb delete mode 100755 themes/olive/views/links/_right.html.erb delete mode 100755 themes/olive/views/links/edit.html.erb delete mode 100755 themes/olive/views/links/index.html.erb delete mode 100755 themes/olive/views/links/new.html.erb delete mode 100755 themes/olive/views/messages/_attachment.html.erb delete mode 100755 themes/olive/views/messages/_attachments.html.erb delete mode 100755 themes/olive/views/messages/_file_attach.html.erb delete mode 100755 themes/olive/views/messages/_file_attachs.html.erb delete mode 100755 themes/olive/views/messages/_file_select.html.erb delete mode 100755 themes/olive/views/messages/_header.html.erb delete mode 100755 themes/olive/views/messages/_html_part.html.erb delete mode 100755 themes/olive/views/messages/_image.html.erb delete mode 100755 themes/olive/views/messages/_images.html.erb delete mode 100755 themes/olive/views/messages/_message.html.erb delete mode 100755 themes/olive/views/messages/_messages.html.erb delete mode 100755 themes/olive/views/messages/_multi_ops.html.erb delete mode 100755 themes/olive/views/messages/_new.html.erb delete mode 100755 themes/olive/views/messages/_search.html.erb delete mode 100755 themes/olive/views/messages/_single_ops.html.erb delete mode 100755 themes/olive/views/messages/compose.html.erb delete mode 100755 themes/olive/views/messages/html_body.html.erb delete mode 100755 themes/olive/views/messages/index.html.erb delete mode 100755 themes/olive/views/messages/old_html_view.html.erb delete mode 100755 themes/olive/views/messages/show.html.erb delete mode 100755 themes/olive/views/prefs/_identity_left.html.erb delete mode 100755 themes/olive/views/prefs/_identity_right.html.erb delete mode 100755 themes/olive/views/prefs/_look_left.html.erb delete mode 100755 themes/olive/views/prefs/_look_right.html.erb delete mode 100755 themes/olive/views/prefs/_server.html.erb delete mode 100755 themes/olive/views/prefs/_servers_left.html.erb delete mode 100755 themes/olive/views/prefs/_servers_list.html.erb delete mode 100755 themes/olive/views/prefs/_servers_right.html.erb delete mode 100755 themes/olive/views/prefs/identity.html.erb delete mode 100755 themes/olive/views/prefs/look.html.erb delete mode 100755 themes/olive/views/prefs/servers.html.erb delete mode 100755 themes/olive/views/sidebar/_calendar_view.html.erb delete mode 100755 themes/olive/views/sidebar/_logo.html.erb delete mode 100755 themes/olive/views/user/login.html.erb delete mode 100755 themes/olive/views/user/setup.html.erb delete mode 100755 themes/olive/views/user/unknown.html.erb create mode 100644 vendor/assets/javascripts/.gitkeep create mode 100644 vendor/assets/stylesheets/.gitkeep mode change 100755 => 100644 vendor/plugins/.gitkeep diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 9a3eba8..eb3489a --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,15 @@ -.bundle -db/*.sqlite3 -log/*.log -tmp/ -config/database.yml +# See http://help.github.com/ignore-files/ for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile ~/.gitignore_global + +# Ignore bundler config +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 + +# Ignore all logfiles and tempfiles. +/log/*.log +/tmp diff --git a/AUTHORS b/AUTHORS deleted file mode 100755 index 79766f5..0000000 --- a/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -* Luben Manolov -* Nick Penkov -* Eugene Korbut -* Emilio Blanco -* Wojciech Todryk diff --git a/CHANGES b/CHANGES deleted file mode 100755 index f15945b..0000000 --- a/CHANGES +++ /dev/null @@ -1,19 +0,0 @@ -## Changes - -#### 0.8.6 - - * new calendar view - -#### 0.8.5 - - * servers view - * identity modification - -#### 0.8.4 - - * calendar view as separate gem - * adding bluecloth for rendering markdown text - -#### 0.8.3 - - * export, imports of contact diff --git a/Gemfile b/Gemfile old mode 100755 new mode 100644 index dada564..021ea69 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,39 @@ -source 'http://rubygems.org' +source 'https://rubygems.org' -gem 'rails', '~>3.0.7' +gem 'rails', '3.2.2' -gem 'mysql2' , '~>0.2.7' -gem 'will_paginate', '~> 3.0.beta' -gem 'themes_for_rails' -gem "ezcrypto", "~> 0.7.2" -gem "calendar_view", "~> 0.0.5" -gem 'bluecloth', '>= 2.0.0' +# Bundle edge Rails instead: +# gem 'rails', :git => 'git://github.com/rails/rails.git' + +gem 'mysql2' + +gem 'json' + +# Gems used only for assets and not required +# in production environments by default. +group :assets do + gem 'sass-rails', '~> 3.2.3' + gem 'coffee-rails', '~> 3.2.1' + + # See https://github.com/sstephenson/execjs#readme for more supported runtimes + # gem 'therubyracer' + + gem 'uglifier', '>= 1.0.3' +end + +gem 'jquery-rails' + +# To use ActiveModel has_secure_password +# gem 'bcrypt-ruby', '~> 3.0.0' + +# To use Jbuilder templates for JSON +# gem 'jbuilder' + +# Use unicorn as the app server +# gem 'unicorn' + +# Deploy with Capistrano +# gem 'capistrano' + +# To use debugger +# gem 'ruby-debug' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..793cc35 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,112 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (3.2.2) + actionpack (= 3.2.2) + mail (~> 2.4.0) + actionpack (3.2.2) + activemodel (= 3.2.2) + activesupport (= 3.2.2) + builder (~> 3.0.0) + erubis (~> 2.7.0) + journey (~> 1.0.1) + rack (~> 1.4.0) + rack-cache (~> 1.1) + rack-test (~> 0.6.1) + sprockets (~> 2.1.2) + activemodel (3.2.2) + activesupport (= 3.2.2) + builder (~> 3.0.0) + activerecord (3.2.2) + activemodel (= 3.2.2) + activesupport (= 3.2.2) + arel (~> 3.0.2) + tzinfo (~> 0.3.29) + activeresource (3.2.2) + activemodel (= 3.2.2) + activesupport (= 3.2.2) + activesupport (3.2.2) + i18n (~> 0.6) + multi_json (~> 1.0) + arel (3.0.2) + builder (3.0.0) + coffee-rails (3.2.2) + coffee-script (>= 2.2.0) + railties (~> 3.2.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.2.0) + erubis (2.7.0) + execjs (1.3.0) + multi_json (~> 1.0) + hike (1.2.1) + i18n (0.6.0) + journey (1.0.3) + jquery-rails (2.0.1) + railties (>= 3.2.0, < 5.0) + thor (~> 0.14) + json (1.6.5) + mail (2.4.1) + i18n (>= 0.4.0) + mime-types (~> 1.16) + treetop (~> 1.4.8) + mime-types (1.17.2) + multi_json (1.1.0) + mysql2 (0.3.11) + polyglot (0.3.3) + rack (1.4.1) + rack-cache (1.1) + rack (>= 0.4) + rack-ssl (1.3.2) + rack + rack-test (0.6.1) + rack (>= 1.0) + rails (3.2.2) + actionmailer (= 3.2.2) + actionpack (= 3.2.2) + activerecord (= 3.2.2) + activeresource (= 3.2.2) + activesupport (= 3.2.2) + bundler (~> 1.0) + railties (= 3.2.2) + railties (3.2.2) + actionpack (= 3.2.2) + activesupport (= 3.2.2) + rack-ssl (~> 1.3.2) + rake (>= 0.8.7) + rdoc (~> 3.4) + thor (~> 0.14.6) + rake (0.9.2.2) + rdoc (3.12) + json (~> 1.4) + sass (3.1.15) + sass-rails (3.2.4) + railties (~> 3.2.0) + sass (>= 3.1.10) + tilt (~> 1.3) + sprockets (2.1.2) + hike (~> 1.2) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + thor (0.14.6) + tilt (1.3.3) + treetop (1.4.10) + polyglot + polyglot (>= 0.3.1) + tzinfo (0.3.31) + uglifier (1.2.3) + execjs (>= 0.3.0) + multi_json (>= 1.0.2) + +PLATFORMS + ruby + +DEPENDENCIES + coffee-rails (~> 3.2.1) + jquery-rails + json + mysql2 + rails (= 3.2.2) + sass-rails (~> 3.2.3) + uglifier (>= 1.0.3) diff --git a/Rakefile b/Rakefile old mode 100755 new mode 100644 index 29283be..c1d2ddb --- a/Rakefile +++ b/Rakefile @@ -1,7 +1,7 @@ +#!/usr/bin/env rake # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. require File.expand_path('../config/application', __FILE__) -require 'rake' Mailr::Application.load_tasks diff --git a/TODO b/TODO deleted file mode 100755 index 2979b2d..0000000 --- a/TODO +++ /dev/null @@ -1,20 +0,0 @@ -## Todo - -app/controllers/folders_controller.rb: - - * [ 30] [TODO] recreate local copy of folders - * [ 99] [TODO] save system folders - -app/controllers/messages_controller.rb: - - * [101] [FIXME] missing fields and support arrays - -app/controllers/messages_ops_controller.rb: - - * [249] [FIXME] edit does not support attachments - * [304] [TODO] check if email address is valid if not get address from contacts - -app/models/prefs.rb: - - * [ 19] [TODO] move refresh to prefs and make refresh page with messages - diff --git a/UNLICENSE b/UNLICENSE deleted file mode 100755 index 68a49da..0000000 --- a/UNLICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -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 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. - -For more information, please refer to diff --git a/public/images/rails.png b/app/assets/images/rails.png old mode 100755 new mode 100644 similarity index 100% rename from public/images/rails.png rename to app/assets/images/rails.png diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 0000000..9097d83 --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,15 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// the compiled file. +// +// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD +// GO AFTER THE REQUIRES BELOW. +// +//= require jquery +//= require jquery_ujs +//= require_tree . diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 0000000..3b5cc66 --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,13 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the top of the + * compiled file, but it's generally better to create a new file per style scope. + * + *= require_self + *= require_tree . +*/ diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb old mode 100755 new mode 100644 index d9697a4..e8065d9 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,99 +1,3 @@ -require 'yaml' - class ApplicationController < ActionController::Base - - protect_from_forgery - - before_filter :load_defaults,:current_user,:set_locale - before_filter :plugins_configuration - - def load_defaults - $defaults ||= YAML::load(File.open(Rails.root.join('config','defaults.yml'))) - end - - ################################# protected section ########################################### - - protected - - def theme_resolver - if @current_user.nil? - $defaults['theme'] - else - @current_user.prefs.theme || $defaults['theme'] - end - end - - def set_locale - if @current_user.nil? - I18n.locale = $defaults['locale'] || I18n.default_locale - else - I18n.locale = @current_user.prefs.locale.to_sym || I18n.default_locale - end - end - - def current_user - @current_user ||= User.find(session[:user_id]) if session[:user_id] - end - - def check_current_user - if @current_user.nil? - session["return_to"] = request.fullpath - redirect_to :controller => 'user', :action => 'login' - return false - end - end - - def selected_folder - if session[:selected_folder] - @selected_folder = session[:selected_folder] - else - folder = @current_user.folders.inbox.first - if not folder.nil? - @selected_folder = folder.full_name - end - end - end - - def get_current_folders - @folders_shown = @current_user.folders.shown.order("name asc") - if not @selected_folder.nil? - @current_folder = @current_user.folders.find_by_full_name(@selected_folder) - end - end - - def prepare_compose_buttons - @buttons = [] - @buttons << {:text => 'sendout',:scope=>:compose,:image => 'email.png'} - @buttons << {:text => 'save',:scope=>:compose,:image => 'save.png'} - end - - def create_message_with_params - @message = Message.new(params[:message]) -# if params[:message] -# @message.update_attributes(params[:message]) -# end - files = Dir.glob(File.join($defaults["msg_upload_dir"],@current_user.username + "*")) - @attachments = [] - files.each do |f| - @attachments << {:name => File.basename(f).gsub!(/#{@current_user.username}_/,"") , :size => File.stat(f).size } - end - end - - def get_system_folders - @drafts_folder = @current_user.folders.drafts.first - @sent_folder = @current_user.folders.sent.first - @inbox_folder = @current_user.folders.inbox.first - @trash_folder = @current_user.folders.trash.first - end - - ##################################### private section ########################################## - - private - - def plugins_configuration - WillPaginate::ViewHelpers.pagination_options[:previous_label] = t(:previous_page,:scope=>:common) - WillPaginate::ViewHelpers.pagination_options[:next_label] = t(:next_page,:scope=>:common) - end - + protect_from_forgery end - diff --git a/app/controllers/contacts_controller.rb b/app/controllers/contacts_controller.rb deleted file mode 100755 index c4c750b..0000000 --- a/app/controllers/contacts_controller.rb +++ /dev/null @@ -1,135 +0,0 @@ -require 'tempfile' - -class ContactsController < ApplicationController - - before_filter :check_current_user,:selected_folder, :get_current_folders - - before_filter :get_contacts, :only => [:index] - - before_filter :prepare_ops_buttons, :prepare_export_import_buttons,:only => [:index] - - theme :theme_resolver - - def index - - end - - def ops - if params["create_new"] - redirect_to(new_contact_path) - return - end - if !params["cids"] - flash[:warning] = t(:no_selected,:scope=>:contact) - else - if params["delete_selected"] - params["cids"].each do |id| - @current_user.contacts.find_by_id(id).destroy - end - elsif params["compose_to_selected"] - redirect_to :controller=>'messages',:action=>'compose',:cids=>params["cids"] - return - end - end - redirect_to(contacts_path) - end - - #problem http://binary10ve.blogspot.com/2011/05/migrating-to-rails-3-got-stuck-with.html - #def destroy - # @current_user.contacts.find(params[:id]).destroy - # redirect_to(contacts_path) - #end - - def new - @contact = Contact.new - end - - def edit - @contact = @current_user.contacts.find(params[:id]) - render 'edit' - end - - def create - @contact = @current_user.contacts.build(params[:contact]) - if @contact.valid? - @contact.save - flash[:notice] = t(:was_created,:scope=>:contact) - redirect_to(contacts_path) - else - render 'new' - end - end - - def update - @contact = @current_user.contacts.find(params[:id]) - if @contact.update_attributes(params[:contact]) - redirect_to(contacts_path) - else - render 'edit' - end - end - - def external - if params["export"] - redirect_to :action => 'export' - return - elsif params["import"] - begin - raise t(:no_file_chosen,:scope=>:common) if not params[:upload] - raise t(:no_tmp_dir,:scope=>:common) if not File.exists?($defaults["msg_upload_dir"]) - tmp_file = Tempfile.new($defaults["contact_tmp_filename"],$defaults["msg_upload_dir"]) - tmp_file.write(params[:upload][:datafile].read) - tmp_file.flush - tmp_file.rewind - tmp_file.readlines.each do |line| - next if line =~ /^#/ - Contact.import(@current_user,line) - end - rescue ActiveRecord::RecordInvalid => e - flash[:error] = {:title => e.to_s,:info => e.record.inspect + e.record.errors.inspect} - rescue Exception => e - flash[:error] = e.to_s - else - flash[:notice] = t(:were_imported,:scope=>:contact) - end - end - redirect_to :action => 'index' - end - - def export - contacts = @current_user.contacts - s = "" - contacts.each do |c| - s += c.export + "\r\n" - end - headers['Content-type'] = "text/csv" - headers['Content-Disposition'] = %(attachment; filename="contacts.csv") - render :text => s - end - - ####################################### protected section ################################ - - protected - - def prepare_ops_buttons - @buttons = [] - @buttons << {:text => 'compose_to_selected',:scope=> 'contact', :image => 'email.png'} - @buttons << {:text => 'create_new',:scope=> 'contact', :image => 'plus.png'} - @buttons << {:text => 'delete_selected',:scope=>'contact',:image => 'minus.png'} - end - - def prepare_export_import_buttons - @ei_buttons = [] - @ei_buttons << {:text => 'import',:scope=>'contact',:image => 'right.png'} - @ei_buttons << {:text => 'export',:scope=>'contact',:image => 'left.png'} - end - - ####################################### private section ################################## - - private - - def get_contacts - @contacts = Contact.getPageForUser(@current_user,params[:page],params[:sort_field],params[:sort_dir]) - end - -end diff --git a/app/controllers/folders_controller.rb b/app/controllers/folders_controller.rb deleted file mode 100755 index e60ff85..0000000 --- a/app/controllers/folders_controller.rb +++ /dev/null @@ -1,172 +0,0 @@ -require 'imap_mailbox' -require 'imap_session' - -class FoldersController < ApplicationController - - include ImapMailboxModule - include ImapSessionModule - - before_filter :check_current_user,:selected_folder, :get_current_folders - - before_filter :open_imap_session, :except => [:index,:show_hide,:system] - after_filter :close_imap_session, :except => [:index,:show_hide,:system] - - before_filter :get_folders - before_filter :prepare_buttons_to_folders - - theme :theme_resolver - - def index - #before_filter - end - - def create - if params[:folder][:target].empty? - flash[:warning] = t(:to_create_empty,:scope=>:folder) - render "index" - else - begin - #TODO recreate local copy of folders - if params[:folder][:parent].empty? - @mailbox.create_folder(params[:folder][:target]) - else - parent_folder = @current_user.folders.find(params[:folder][:parent]) - if parent_folder.depth >= $defaults["mailbox_max_parent_folder_depth"].to_i - raise Exception, t(:max_depth,:scope=>:folder) - end - @mailbox.create_folder(parent_folder.full_name + parent_folder.delim + params[:folder][:target]) - end - rescue Exception => e - flash[:error] = t(:can_not_create,:scope=>:folder) + ' (' + e.to_s + ')' - render 'index' - return - end - flash[:notice] = t(:was_created,:scope=>:folder) - redirect_to :action => 'index' - end - end - - def delete - if params[:folder][:delete].empty? - flash[:warning] = t(:to_delete_empty,:scope=>:folder) - render "index" - else - begin - folder = @current_user.folders.find(params[:folder][:delete]) - if @folders_system.include?(folder) - raise Exception, t(:system,:scope=>:folder) - end - @mailbox.delete_folder(folder.full_name) - if @current_folder.eql? folder - session[:selected_folder] = nil - end - folder.destroy - rescue Exception => e - flash[:error] = t(:can_not_delete,:scope=>:folder) + ' (' + e.to_s + ')' - render 'index' - return - end - flash[:notice] = t(:was_deleted,:scope=>:folder) - redirect_to :action => 'index' - end - end - - def system - logger.custom('sss',params[:folder].inspect) - @folders.each do |f| - logger.custom('s',f.inspect) - if f.isSystem? - f.setNone - end - if f.id == params[:folder][:mailbox_inbox].to_i - f.setInbox - end - if f.id == params[:folder][:mailbox_sent].to_i - f.setSent - end - if f.id == params[:folder][:mailbox_trash].to_i - f.setTrash - end - if f.id == params[:folder][:mailbox_drafts].to_i - f.setDrafts - end - end - redirect_to :action => 'index' - end - - def refresh - # TODO save system folders - if params[:refresh] - Folder.refresh(@mailbox,@current_user) - flash.keep - elsif params[:show_hide] - if !params["folders_to_show"].nil? - @folders.each do |f| - if params["folders_to_show"].include?(f.id.to_s) - f.shown = true - f.save - else - f.shown = false - f.save - end - end - end - end - redirect_to :action => 'index' - end - - def select - session[:selected_folder] = params[:id] - redirect_to :controller => 'messages', :action => 'index' - end - - def refresh_status - @folders_shown.each do |f| - @mailbox.set_folder(f.full_name) - folder_status = @mailbox.status - f.update_attributes(:total => folder_status['MESSAGES'], :unseen => folder_status['UNSEEN']) - end - redirect_to :controller=> 'messages', :action => 'index' - end - - def emptybin - begin - trash_folder = @current_user.folders.trash.first - if trash_folder.nil? - raise Exception, t(:not_configured_trash,:scope=>:folder) - end - @mailbox.set_folder(trash_folder.full_name) - trash_folder.messages.each do |m| - @mailbox.delete_message(m.uid) - end - @mailbox.expunge - trash_folder.messages.destroy_all - trash_folder.update_attributes(:unseen => 0, :total => 0) - rescue Exception => e - flash[:error] = "#{t(:imap_error,:scope=>:common)} (#{e.to_s})" - end - redirect_to :controller => 'messages', :action => 'index' - end - - - ############################################# protected section ####################################### - - protected - - def prepare_buttons_to_folders - @buttons = [] - @buttons << {:text => 'show_hide',:scope=>'folder',:image => 'flag.png'} - @buttons << {:text => 'refresh',:scope=>'folder',:image => 'refresh.png'} - end - - def get_folders - @folders = @current_user.folders - @folders_shown = @current_user.folders.shown - #@folders_system = @current_user.folders.sys - @current_user.folders.inbox.first.nil? ? @folder_inbox = "" : @folder_inbox = @current_user.folders.inbox.first.id - @current_user.folders.drafts.first.nil? ? @folder_drafts = "" : @folder_drafts = @current_user.folders.drafts.first.id - @current_user.folders.sent.first.nil? ? @folder_sent = "" : @folder_sent = @current_user.folders.sent.first.id - @current_user.folders.trash.first.nil? ? @folder_trash = "" : @folder_trash = @current_user.folders.trash.first.id - end - -end diff --git a/app/controllers/internal_controller.rb b/app/controllers/internal_controller.rb deleted file mode 100755 index c22b586..0000000 --- a/app/controllers/internal_controller.rb +++ /dev/null @@ -1,53 +0,0 @@ -class InternalController < ApplicationController - - before_filter :check_current_user ,:selected_folder, :get_current_folders, :only => [:about] - - theme :theme_resolver - layout "simple" - - - ERRORS = [ - :internal_server_error, - :not_found, - :unprocessable_entity - ].freeze - - ERRORS.each do |e| - define_method e do - @title = t(e,:scope=>:internal) - @error = t(e,:scope=>:internal) - render 'error' - end - end - - def error - @title = t(:unspecified_error,:scope=>:internal) - @error = params[:error] || t(:unspecified_error,:scope=>:internal) - end - - def imaperror - @title = t(:imap_error,:scope => :internal) - @error = params[:error] || t(:unspecified_error, :scope => :internal) - logger.error "!!! InternalControllerImapError: " + @error - render 'error' - end - - def loginfailure - reset_session - flash[:error] = t(:login_failure,:scope=>:user) - @current_user = nil - redirect_to :controller=>'user', :action => 'login' - end - - def onlycanlogins - reset_session - flash[:error] = t(:only_can_logins,:scope=>:user) - @current_user = nil - redirect_to :controller=>'user', :action => 'login' - end - - def about - render 'internal/about', :layout => 'application' - end - -end diff --git a/app/controllers/links_controller.rb b/app/controllers/links_controller.rb deleted file mode 100755 index ac11e1a..0000000 --- a/app/controllers/links_controller.rb +++ /dev/null @@ -1,133 +0,0 @@ -require 'tempfile' - -class LinksController < ApplicationController - - before_filter :check_current_user,:selected_folder, :get_current_folders - - before_filter :get_links, :only => [:index] - - before_filter :prepare_ops_buttons, :only => [:index] - - #, :prepare_export_import_buttons,:only => [:index] - - theme :theme_resolver - - def index - - end - - def ops - if params["create_new"] - redirect_to(new_link_path) - return - end - if !params["ids"] - flash[:warning] = t(:no_selected,:scope=>:link) - else - if params["delete_selected"] - params["ids"].each do |id| - @current_user.links.find_by_id(id).destroy - end - end - end - redirect_to(links_path) - end - - #problem http://binary10ve.blogspot.com/2011/05/migrating-to-rails-3-got-stuck-with.html - #def destroy - # @current_user.contacts.find(params[:id]).destroy - # redirect_to(contacts_path) - #end - - def new - @link = Link.new - end - - def edit - @link = @current_user.links.find(params[:id]) - render 'edit' - end - - def create - @link = @current_user.links.build(params[:link]) - if @link.valid? - @link.save - flash[:notice] = t(:was_created,:scope=>:link) - redirect_to(links_path) - else - render 'new' - end - end - - def update - @link = @current_user.links.find(params[:id]) - if @link.update_attributes(params[:link]) - redirect_to(links_path) - else - render 'edit' - end - end - - def external - if params["export"] - redirect_to :action => 'export' - return - elsif params["import"] - begin - raise t(:no_file_chosen,:scope=>:common) if not params[:upload] - raise t(:no_tmp_dir,:scope=>:common) if not File.exists?($defaults["msg_upload_dir"]) - tmp_file = Tempfile.new($defaults["contact_tmp_filename"],$defaults["msg_upload_dir"]) - tmp_file.write(params[:upload][:datafile].read) - tmp_file.flush - tmp_file.rewind - tmp_file.readlines.each do |line| - next if line =~ /^#/ - Contact.import(@current_user,line) - end - rescue ActiveRecord::RecordInvalid => e - flash[:error] = {:title => e.to_s,:info => e.record.inspect + e.record.errors.inspect} - rescue Exception => e - flash[:error] = e.to_s - else - flash[:notice] = t(:were_imported,:scope=>:contact) - end - end - redirect_to :action => 'index' - end - - def export - contacts = @current_user.contacts - s = "" - contacts.each do |c| - s += c.export + "\r\n" - end - headers['Content-type'] = "text/csv" - headers['Content-Disposition'] = %(attachment; filename="contacts.csv") - render :text => s - end - - ####################################### protected section ################################ - - protected - - def prepare_ops_buttons - @buttons = [] - @buttons << {:text => 'create_new',:scope=> 'link', :image => 'plus.png'} - @buttons << {:text => 'delete_selected',:scope=>'link',:image => 'minus.png'} - end - - def prepare_export_import_buttons - @ei_buttons = [] - @ei_buttons << {:text => 'import',:scope=>'link',:image => 'right.png'} - @ei_buttons << {:text => 'export',:scope=>'link',:image => 'left.png'} - end - - ####################################### private section ################################## - - private - - def get_links - @links = Link.getPageForUser(@current_user,params[:page],params[:sort_field],params[:sort_dir]) - end - -end diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb deleted file mode 100755 index 88d2892..0000000 --- a/app/controllers/messages_controller.rb +++ /dev/null @@ -1,210 +0,0 @@ -require 'imap_session' -require 'imap_mailbox' -require 'imap_message' -require 'mail' -require 'mail_plugin_extension' - -class MessagesController < ApplicationController - - include ImapMailboxModule - include ImapSessionModule - include ImapMessageModule - include MessagesHelper - - before_filter :check_current_user ,:selected_folder,:get_current_folders - before_filter :open_imap_session, :select_imap_folder - before_filter :prepare_compose_buttons, :only => [:compose] - before_filter :get_system_folders, :only => [:index] - before_filter :create_message_with_params, :only => [:compose] - before_filter :prepare_multi1_buttons, :only => [:index,:show] - before_filter :prepare_multi2_buttons, :only => [:index] - before_filter :prepare_multi3_buttons, :only => [:show] - after_filter :close_imap_session - - theme :theme_resolver - - def index - - if @sent_folder.nil? || @drafts_folder.nil? || @inbox_folder.nil? || @trash_folder.nil? - flash[:warning] = t(:not_all_configured,:scope => :folder) - end - - if @current_folder.nil? - flash[:warning] = t(:no_selected,:scope => :folder) - redirect_to :controller => 'folders', :action => 'index' - return - end - - @messages = [] - - folder_status = @mailbox.status - @current_folder.update_attributes(:total => folder_status['MESSAGES'], :unseen => folder_status['UNSEEN']) - - folder_status['MESSAGES'].zero? ? uids_remote = [] : uids_remote = @mailbox.fetch_uids - uids_local = @current_user.messages.where(:folder_id => @current_folder).collect(&:uid) - - logger.custom('current_folder',@current_folder.inspect) - logger.custom('uids_local',uids_local.join(",")) - logger.custom('uids_remote',uids_remote.join(",")) - logger.custom('to_delete',(uids_local-uids_remote).join(",")) - logger.custom('to_fetch',(uids_remote-uids_local).join(",")) - - (uids_local-uids_remote).each do |uid| - @current_folder.messages.find_by_uid(uid).destroy - end - - (uids_remote-uids_local).each_slice($defaults["imap_fetch_slice"].to_i) do |slice| - messages = @mailbox.uid_fetch(slice, ImapMessageModule::IMAPMessage.fetch_attr) - messages.each do |m| - Message.createForUser(@current_user,@current_folder,m) - end - end - - @messages = Message.getPageForUser(@current_user,@current_folder,params[:page],params[:sort_field],params[:sort_dir]) - - end - - def compose - #before filter :prepare_compose_buttons, :create_message_with_params - @operation = :new - if params["cid"].present? - contact = @current_user.contacts.find_by_id(params["cid"]) - if not contact.nil? - @message.to_addr = contact.email - end - elsif params["cids"].present? - contacts = [] - params["cids"].each do |c| - contact = @current_user.contacts.find_by_id(c) - if not contact.nil? - contacts << contact.email - end - end - @message.to_addr = contacts.join(';') - end - end - - def show - @images = [] - @attachments = [] - @text_part = nil - @html_part = nil - - @message = @current_user.messages.where('folder_id = ? and uid = ?',@current_folder,params[:id]).first - @message.update_attributes(:unseen => false) - imap_message = @mailbox.fetch_body(@message.uid) - - mail = Mail.new(imap_message) - @plain_header = mail.header.to_s - - - # FIXME missing fields and support arrays - #@from = mail.From.addrs.presence - #@to = mail.To.addrs.presence - @from = @message.from_addr - @to = @message.to_addr - @cc = mail.Cc.presence - @bcc = mail.Bcc.presence - #@subject = mail.Subject - @date = mail.date.presence - - if mail.multipart? == true - if not mail.text_part.nil? - @text_part = mail.text_part.decoded_and_charseted - end - if not mail.html_part.nil? - @html_part = mail.html_part.decoded_and_charseted - end - attachments = mail.attachments - if not attachments.size.zero? - for idx in 0..attachments.size - 1 - a = attachments[idx] - a.idx = idx - a.parent_id = @message.uid - if a.isImage? and @current_user.prefs.msg_image_view_as.to_sym.eql?(:thumbnail) - @images << a - else - @attachments << a - end - end - end - else - part = Mail::Part.new(mail) - part.idx = 0 - part.parent_id = @message.uid - if part.isText? - @text_part = part.decoded_and_charseted - elsif part.isImage? and @current_user.prefs.msg_image_view_as.to_sym.eql?(:thumbnail) - @images << part - elsif part.isHtml? - @html_part = part.decoded_and_charseted - else - @attachments << part - end - end - end - - def html_body - message = @current_user.messages.where('folder_id = ? and uid = ?',@current_folder,params[:id]).first - mail = Mail.new(@mailbox.fetch_body(message.uid)) - if mail.multipart? - @body = mail.html_part.decoded_and_charseted - else - @body = mail.decoded_and_charseted - end - - if @body.nil? - @body = t(:no_body,:scope=>:message) - else - if @body=~/cid:([\w@\.]+)/ - attachments = mail.attachments - if not attachments.size.zero? - for idx in 0..attachments.size - 1 - @body.gsub!(/cid:#{attachments[idx].cid}/,attachment_download_path(message.uid,idx)) - end - end - end - end - render 'html_body',:layout => 'html_body' - end - - def attachment - attachments = [] - message = @current_user.messages.where('folder_id = ? and uid = ?',@current_folder,params[:id]).first - mail = Mail.new(@mailbox.fetch_body(message.uid)) - if mail.multipart? == true - attachments = mail.attachments - else - attachments << Mail::Part.new(mail) - end - a = attachments[params[:idx].to_i] - headers['Content-type'] = a.main_type + "/" + a.sub_type - headers['Content-Disposition'] = %(attachment; filename="#{a.filename}") - render :text => a.decoded - end - - - ############################################# protected section ########################################## - - protected - - def prepare_multi2_buttons - @multi2_buttons = [] - @multi2_buttons << {:text => 'trash',:scope=>:message,:image => 'trash.png'} - @multi2_buttons << {:text => 'set_unread',:scope=>:message,:image => 'unseen.png'} - @multi2_buttons << {:text => 'set_read',:scope=>:message,:image => 'seen.png'} - end - - def prepare_multi1_buttons - @multi1_buttons = [] - @multi1_buttons << {:text => 'copy',:scope=>:message,:image => 'copy.png'} - @multi1_buttons << {:text => 'move',:scope=>:message,:image => 'move.png'} - end - - def prepare_multi3_buttons - @multi3_buttons = [] - @multi3_buttons << {:text => 'show_header',:scope=>:show,:image => 'zoom.png'} - @multi3_buttons << {:text => 'trash',:scope=>:show,:image => 'trash.png'} - @multi3_buttons << {:text => 'reply',:scope=>:show,:image => 'reply.png'} - end -end diff --git a/app/controllers/messages_ops_controller.rb b/app/controllers/messages_ops_controller.rb deleted file mode 100755 index 731a431..0000000 --- a/app/controllers/messages_ops_controller.rb +++ /dev/null @@ -1,354 +0,0 @@ -require 'imap_session' -require 'imap_mailbox' -require 'imap_message' -require 'mail' -require 'mail_plugin_extension' -require 'net/smtp' - -class MessagesOpsController < ApplicationController - - include ImapMailboxModule - include ImapSessionModule - include ImapMessageModule - include MessagesHelper - - before_filter :check_current_user ,:selected_folder,:get_current_folders - before_filter :open_imap_session, :select_imap_folder - before_filter :prepare_compose_buttons - before_filter :get_system_folders, :only => [:composed,:single,:multi] - before_filter :prepare_composed , :only => [:composed] - before_filter :create_message_with_params, :only=> [:composed,:single,:multi] - after_filter :close_imap_session - theme :theme_resolver - - - ############################################### single ##################################### - - def single - if params[:reply] - reply - return - elsif params[:trash] - trash - elsif params[:move] - move - elsif params[:copy] - copy - end - redirect_to :controller => 'messages', :action => 'index' - end - - ############################################### multi ###################################### - - def multi - begin - if !params[:uids] - flash[:warning] = t(:no_selected,:scope=>:message) - elsif params[:set_unread] - set_unread - elsif params[:set_read] - set_read - elsif params[:trash] - trash - elsif params[:copy] - copy - elsif params[:move] - move - end - rescue Exception => e - flash[:error] = "#{t(:imap_error,:scope=>:internal)} (#{e.to_s})" - end - redirect_to :controller => 'messages', :action => 'index' - end - - ############################################### ################################################ - - - def set_unread - params["uids"].each do |uid| - @mailbox.set_unread(uid) - @current_user.messages.where('folder_id = ? and uid = ?',@current_folder,uid).first.update_attributes(:unseen => 1) - end - end - - def set_read - params["uids"].each do |uid| - @mailbox.set_read(uid) - @current_user.messages.where('folder_id = ? and uid = ?',@current_folder,uid).first.update_attributes(:unseen => 0) - end - end - - def trash - if @trash_folder.nil? - flash[:warning] = t(:not_configured_trash, :scope=>:folder) - else - params["uids"].each do |uid| - @mailbox.move_message(uid,@trash_folder.full_name) - message = @current_folder.messages.find_by_uid(uid) - message.change_folder(@trash_folder) - end - @mailbox.expunge - @trash_folder.update_stats - @current_folder.update_stats - end - end - - def copy - if params[:folder][:target].empty? - flash[:warning] = t(:no_selected,:scope=>:folder) - else - dest_folder = @current_user.folders.find(params[:folder][:target]) - params["uids"].each do |uid| - @mailbox.copy_message(uid,dest_folder.full_name) - message = @current_folder.messages.find_by_uid(uid) - new_message = message.clone - new_message.folder_id = dest_folder.id - new_message.save - end - dest_folder.update_stats - @current_folder.update_stats - end - end - - def move - if params[:folder][:target].empty? - flash[:warning] = t(:no_selected,:scope=>:folder) - else - dest_folder = @current_user.folders.find(params[:folder][:target]) - logger.info "DEST: "+dest_folder.inspect - params["uids"].each do |uid| - logger.info "UID: "+uid - logger.info "DEST_FULL: "+dest_folder.full_name - @mailbox.move_message(uid,dest_folder.full_name) - message = @current_folder.messages.find_by_uid(uid) - logger.info "M: "+message.inspect - logger.info "UPDATE_DEST_BEFORE1: "+dest_folder.inspect - message.change_folder(dest_folder) - logger.info "UPDATE_DEST_BEFORE2: "+dest_folder.inspect - end - logger.info "UPDATE_DEST_BEFORE: "+dest_folder.inspect - @mailbox.expunge - dest_folder.update_stats - logger.info "UPDATE_DEST: "+dest_folder.inspect - @current_folder.update_stats - logger.info "UPDATE_CUT: "+@current_folder.inspect - end - end - - def upload - begin - raise MailrException.new :cause=>:no_tmp_dir,:scope=>:common if not File.exists?($defaults["msg_upload_dir"]) - raise MailrException.new :cause=>:no_file_chosen,:scope=>:common if not params[:upload] - @operation = :upload - name = params[:file][:data].original_filename - upload_dir = $defaults["msg_upload_dir"] - path = File.join(upload_dir, @current_user.username + "_" + name) - File.open(path, "wb") { |f| f.write(params[:file][:data].read) } - rescue MailrException => e - flash[:error] = t(e.message[:cause],:scope => e.message[:scope]) - rescue Exception => e - flash[:error] = t(:general_error,:scope=>:internal) + " (" + e.class.name + " " + e.to_s + ")" - end - create_message_with_params - render 'messages/compose' - end - -# Files uploaded from Internet Explorer: -# -#Internet Explorer includes the entire path of a file in the filename sent, so the original_filename routine will return something like: -# -#C:\Documents and Files\user_name\Pictures\My File.jpg -# -#instead of just: -# -#My File.jpg -# -#This is easily handled by File.basename, which strips out everything before the filename. -# -#def sanitize_filename(file_name) -# # get only the filename, not the whole path (from IE) -# just_filename = File.basename(file_name) -# # replace all none alphanumeric, underscore or perioids -# # with underscore -# just_filename.sub(/[^\w\.\-]/,'_') -#end -# -#Deleting an existing File: -# -#If you want to delete any existing file then its simple and need to write following code: -# -# def cleanup -# File.delete("#{RAILS_ROOT}/dirname/#{@filename}") -# if File.exist?("#{RAILS_ROOT}/dirname/#{@filename}") -# end - - def composed - if params[:delete_marked] and params[:files] - params[:files].each do |filename| - path = File.join(Rails.root,$defaults["msg_upload_dir"],@current_user.username + "_" +filename) - File.delete(path) if File.exist?(path) - end - create_message_with_params - @operation = :new - render 'messages/compose' - return - elsif params[:upload] - upload - elsif params[:save] - save - elsif params[:sendout] - sendout - else - redirect_to :controller => 'messages', :action => 'index' - end - end - - def sendout - begin - smtp_server = @current_user.servers.primary_for_smtp - raise MailrException.new :cause=>:not_configured_smtp,:scope => :compose if smtp_server.nil? - raise MailrException.new :cause=>:has_no_domain,:scope=>:user if @current_user.has_domain?.nil? - raise MailrException.new :cause=>:not_configured_sent,:scope=>:compose if @sent_folder.nil? - send_mail_message( smtp_server, - @current_user.has_domain?, - @current_user.login, - @current_user.get_cached_password(session), - @mail.to_s, - @current_user.email, - params[:message][:to_addr] - ) - @mailbox.append(@sent_folder.full_name,@mail.to_s,[:Seen]) - upload_dir = $defaults["msg_upload_dir"] - @attachments.each do |file| - path = File.join(upload_dir, @current_user.username + "_" + file[:name]) - File.delete(path) if File.exist?(path) - end - rescue MailrException => e - flash[:error] = t(e.message[:cause],:scope => e.message[:scope]) - rescue Exception => e - flash[:error] = t(:general_error,:scope=>:internal) + " (" + e.class.name + " " + e.to_s + ")" - else - flash[:notice] = t(:was_sent,:scope => :compose) - redirect_to :controller => 'messages', :action => 'index' - return - end - @operation = :new - render 'messages/compose' - end - - def save - begin - raise MailrException.new :cause=>:not_configured_drafts,:scope=>:folder if @drafts_folder.nil? - @mailbox.append(@drafts_folder.full_name,@mail.to_s,[:Seen]) - if params[:olduid].present? - @mailbox.move_message(params[:olduid],@trash_folder.full_name) - @mailbox.expunge - end - rescue MailrException => e - flash[:error] = t(e.message[:cause],:scope => e.message[:scope]) - rescue Exception => e - flash[:error] = t(:general_error,:scope=>:internal) + " (" + e.class.name + " " + e.to_s + ")" - else - @attachments.each do |filename| - path = File.join(Rails.root,filename) - File.delete(path) if File.exist?(path) - end - flash[:notice] = t(:was_saved,:scope => :compose) - end - redirect_to :controller => 'messages', :action => 'index' - end - - #FIXME edit does not support attachments - def edit - old_message = @current_user.messages.where('folder_id = ? and uid = ?',@current_folder,params[:uids].first).first - @message = Message.new - @message.to_addr = old_message.to_addr - @message.subject = old_message.subject - - imap_message = @mailbox.fetch_body(old_message.uid) - mail = Mail.new(imap_message) - if mail.multipart? - @message.body = mail.text_part.nil? ? "" : mail.text_part.decoded_and_charseted.gsub(/<\/?[^>]*>/, "") - else - @message.body = mail.decoded_and_charseted.gsub(/<\/?[^>]*>/, "") - end - @attachments = [] - @operation = :edit - @olduid = old_message.uid - render 'messages/compose' - end - - def reply - old_message = @current_user.messages.where('folder_id = ? and uid = ?',@current_folder,params[:uids].first).first - @message = Message.new - @message.to_addr = old_message.from_addr - @message.subject = old_message.subject - - imap_message = @mailbox.fetch_body(old_message.uid) - mail = Mail.new(imap_message) - if mail.multipart? - @message.body = mail.text_part.nil? ? "" : mail.text_part.decoded_and_charseted.gsub(/<\/?[^>]*>/, "") - else - @message.body = mail.decoded_and_charseted.gsub(/<\/?[^>]*>/, "") - end - @attachments = [] - @operation = :reply - render 'messages/compose' - end - ###################################### protected section ####################################### - - protected - - def send_mail_message(smtp_server,domain,username,password,msgstr,from,to) - if smtp_server.auth.nil? - smtp = Net::SMTP.start(smtp_server.name, smtp_server.port, domain) - else - smtp = Net::SMTP.start(smtp_server.name, smtp_server.port, domain, username, password, smtp_server.auth) - end - smtp.send_message msgstr, from, to - smtp.finish - end - - def prepare_composed - @mail = Mail.new - @mail.subject = params[:message][:subject] - @mail.from = @current_user.full_id - #TODO check if email address is valid if not get address from contacts - @mail.to = params[:message][:to_addr] - @mail.body = params[:message][:body] - @attachments = Dir.glob(File.join($defaults["msg_upload_dir"],@current_user.username + "*")) - @attachments.each do |a| - @mail.add_file :filename => File.basename(a.gsub(/#{@current_user.username}_/,"")), :content => File.read(a) - end - end - - ############################################ set_mail_defaults #################################### - - def set_mail_defaults(user,server,session) - if server.auth.nil? or server.auth == 'none' - password = nil - authentication = nil - enable_starttls_auto = nil - openssl_verify_mode = nil - user_name = nil - else - password = user.get_cached_password(session) - authentication = server.auth - enable_starttls_auto = server.use_tls - openssl_verify_mode = OpenSSL::SSL::VERIFY_NONE - user_name = user.login - end - Mail.defaults do - delivery_method :smtp, {:address => server.name, - :port => server.port, - :domain => user.domain, - :user_name => user_name, - :password => password, - :authentication => authentication, - :enable_starttls_auto => enable_starttls_auto, - :openssl_verify_mode => openssl_verify_mode - } - end - end - -end diff --git a/app/controllers/prefs_controller.rb b/app/controllers/prefs_controller.rb deleted file mode 100755 index a3032ad..0000000 --- a/app/controllers/prefs_controller.rb +++ /dev/null @@ -1,55 +0,0 @@ -class PrefsController < ApplicationController - - before_filter :check_current_user,:selected_folder - - before_filter :get_current_folders - - before_filter :get_prefs, :only => [:look,:update_look] - - theme :theme_resolver - - def update_look - if params[:prefs] - @prefs.update_attributes(params[:prefs]) - end - flash[:notice] = t(:were_saved,:scope=>:prefs) - redirect_to :action => 'look' - end - - def update_servers - - redirect_to :action => 'servers' - end - - def update_identity - if params[:user] - @current_user.first_name = params[:user][:first_name] - @current_user.last_name = params[:user][:last_name] - @current_user.domain = params[:user][:domain] - if @current_user.valid? - @current_user.save - flash[:notice] = t(:were_saved,:scope=>:prefs) - redirect_to :action => 'identity' - else - render 'prefs/identity' - end - end - end - - def look - - end - - def identity - end - - def servers - @servers = @current_user.servers - end - - ############################# protected section ################################## - - def get_prefs - @prefs = @current_user.prefs - end -end diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb deleted file mode 100755 index b07c1e1..0000000 --- a/app/controllers/user_controller.rb +++ /dev/null @@ -1,75 +0,0 @@ -class UserController < ApplicationController - - theme :theme_resolver - layout "simple" - - def login - end - - def logout - reset_session - flash[:notice] = t(:logged_out,:scope=>:user) - redirect_to :action => "login" - end - - def authenticate - - if not $defaults["only_can_logins"].nil? - if not $defaults["only_can_logins"].include?(params[:user][:login]) - redirect_to :controller => 'internal', :action => 'onlycanlogins' - return false - end - end - - user = User.find_by_login(params[:user][:login]) - if user.nil? - redirect_to :action => 'unknown' ,:login=> params[:user][:login] - else - session[:user_id] = user.id - user.set_cached_password(session,params[:user][:password]) - - if session["return_to"] - redirect_to(session["return_to"]) - session["return_to"] = nil - else - redirect_to :controller=> 'messages', :action=> 'index' - end - - end - end - - def loginfailure - end - - def setup - @user = User.new - @server = Server.new - end - - def unknown - end - - def create - - @user = User.new - @user.login = params[:user][:login] - @user.first_name = params[:user][:first_name] - @user.last_name = params[:user][:last_name] - - @server = Server.new - @server.name = params[:server][:name] - - if @user.valid? and @server.valid? - @user.save - #@server.user_id = @user.id - #@server.save - Prefs.create_default(@user) - Server.create_defaults(@user) - flash[:notice] = t(:setup_done,:scope=>:user) - redirect_to :action => 'login' - else - render "setup" - end - end - -end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb old mode 100755 new mode 100644 index 87fe879..de6be79 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,334 +1,2 @@ -require 'iconv' - module ApplicationHelper - -def form_field(object,field,flabel,example,val) - model_name = eval(object.class.model_name) - html = "" - html << "
" - if not object.errors[field.to_sym].empty? - html << "
" - - end - - html << "" - - if not object.errors[field.to_sym].empty? - html << " " - html << object.errors[field.to_sym].to_s - html << "" - html << "
" - end - html << "" - html << "" - html << t(:example,:scope=>:common) - html << ": " - html << example - html << "" - html << "
" - -end - -def show_param_view(object,field,value) - model_name = eval(object.class.model_name) - html = "" - html << "
" - html << "" - html << value - html << "
" - html -end - -def area_field(object,field,flabel,example,val,cols,rows) - model_name = eval(object.class.model_name) - html = "" - html << "
" - - if not object.errors[field.to_sym].empty? - html << "
" - end - - html << "" - - if not object.errors[field.to_sym].empty? - html << "" - html << object.errors[field.to_sym].to_s - html << "" - html << "
" - end - - name = object.class.name.downcase + '[' + field + ']' - id = object.class.name.downcase+"_"+field - value = val || object.instance_eval(field) || "" - html << "" - - desc = t(:example,:scope=>:common) + ": " + example - html << "#{desc}" - - html << "
" -end - -def form_button(text,image) - html = "" - html << "
" - html << "
" -end - -def single_action(text,scope,image) - html = "" - html << "
" - html << "
" -end - -def single_action_onclick(text,scope,image,onclick) - html = "" - html << "
" - html << "" - html << "
" -end - -def group_action(buttons) - html = "" - html << "
" - buttons.each do |b| - html << " " - end - html << "
" -end - -def group_action_text(buttons,text) - html = "" - html << "
" - buttons.each do |b| - html << " " - end - html << text - html << "
" -end - -def form_buttons(buttons) - html = "" - html << "
" - - buttons.each do |b| - html << " " - end - - html << "
" -end - -def form_button_value(text,image,onclick) - html = "" - html << "
" - html << "
" -end - -def simple_input_field(name,id,label,value) - html = "" - html << "
" - html << "" - html << "" - html << "
" -end - -def select_field(name,object,label,blank) - html = "" - html << "
" - html << "" - html << select(name, name, object.all.collect {|p| [ p.name, p.id ] }, { :include_blank => (blank == true ? true : false)}) - html << "
" -end - -def select_field_table(object,field,table_choices,choice,blank) - model_name = eval(object.class.model_name) - html = "" - html << "
" - html << "" - html << select(object.class.to_s.downcase, field, options_for_select(table_choices,choice), {:include_blank => blank}) - html << "
" -end - -def select_field_table_t(object,field,table_choices,choice,blank) - model_name = eval(object.class.model_name) - html = "" - html << "
" - html << "" - t = [] - table_choices.each do |c| - t << [t(c.to_sym,:scope=>:prefs),c.to_s] - end - html << select(object.class.to_s.downcase, field, options_for_select(t,choice), {:include_blank => blank}) - html << "
" -end - -#def form_simle_field(name,label,value) -# html = "" -# html << "
" -# html << "" -# html << "" -# html << "
" -#end - -#def nav_to_folders -# link_to( t(:folders,:scope=>:folder), :controller=>:folders, :action=>:index ) -#end -# -#def nav_to_messages -# link_to( t(:messages,:scope=>:message), :controller=>:messages, :action=>:index ) -#end -# -#def nav_to_compose -# link_to( t(:compose,:scope=>:compose), :controller=>:messages, :action=>:compose ) -#end -# -#def nav_to_contacts -# link_to( t(:contacts,:scope=>:contact), contacts_path ) -#end -# -#def nav_to_prefs -# link_to( t(:prefs,:scope=>:prefs), prefs_look_path ) -#end - -def single_navigation(label,scope) - s = "" - s += "
    " - s += "
  • #{link_to(t(label,:scope=>scope),'#')}
  • " - s += "
  •  
  • " - s += "
" -end - -def main_navigation(active) - instance_variable_set("@#{active}", "active") - s = "" - s += "
    " - s += "
  • #{link_to( t(:messages,:scope=>:message), messages_path )}
  • " - s += "
  • #{link_to( t(:compose,:scope=>:compose), compose_path )}
  • " - s += "
  • #{link_to( t(:folders,:scope=>:folder), folders_path )}
  • " - s += "
  • #{link_to( t(:contacts,:scope=>:contact), contacts_path )}
  • " - s += "
  • #{link_to( t(:prefs,:scope=>:prefs), prefs_look_path )}
  • " - s += "
  • #{link_to( t(:links,:scope=>:link), links_path )}
  • " - s += "
" -end - -def prefs_navigation(active) - instance_variable_set("@#{active}", "active") - s = "" - s += "
    " - s += "
  • #{link_to( t(:look,:scope=>:prefs), prefs_look_path )}
  • " - s += "
  • #{link_to( t(:identity,:scope=>:prefs), prefs_identity_path )}
  • " - s += "
  • #{link_to( t(:servers,:scope=>:prefs), prefs_servers_path )}
  • " - s += "
" -end - -def multi_select(id, name, objects, selected_objects, label, value,joiner,content = {}) - options = "" - objects.each do |o| - selected = selected_objects.include?(o) ? " selected=\"selected\"" : "" - option_value = escape_once(o.send(value)) - text = [option_value] - unless content[:text].nil? - text = [] - content[:text].each do |t| - text << o.send(t) - end - text = text.join(joiner) - end - text.gsub!(/^\./,'') - bracket = [] - unless content[:bracket].nil? - content[:bracket].each do |b| - bracket << o.send(b) - end - bracket = bracket.join(joiner) - end - option_content = bracket.empty? ? "#{text}" : "#{text} (#{bracket})" - options << "\n" - end - "
" -end - -def force_charset(text) - begin - Iconv.iconv("UTF-8",$defaults["msg_unknown_charset"],text) - rescue - text - end -end - -def content_for_sidebar - s = render :partial => 'sidebar/logo' - s += render :partial => 'folders/list' - s += render :partial => 'sidebar/calendar_view' - s += render :partial => 'internal/version' - s -end - -def boolean_answer(answer) - answer == true ? t(:true_answer,:scope=>:common) : t(:false_answer,:scope=>:common) -end - end diff --git a/app/helpers/contacts_helper.rb b/app/helpers/contacts_helper.rb deleted file mode 100755 index 7632685..0000000 --- a/app/helpers/contacts_helper.rb +++ /dev/null @@ -1,17 +0,0 @@ -module ContactsHelper - - def contacts_table_header - html = "" - $defaults["contacts_table_fields"].each do |f| - html << "" - if params[:sort_field] == f - params[:sort_dir].nil? ? dir = 'desc' : dir = nil - end - - html << link_to(Contact.human_attribute_name(f), {:controller => 'contacts',:action => 'index',:sort_field => f,:sort_dir => dir}, {:class=>"header"}) - html << "" - end - html - end - -end diff --git a/app/helpers/folder_helper.rb b/app/helpers/folder_helper.rb deleted file mode 100755 index 3e7f122..0000000 --- a/app/helpers/folder_helper.rb +++ /dev/null @@ -1,66 +0,0 @@ -module FolderHelper - - def folder_link(folder) - - folder.parent.empty? ? name = folder.name : name = folder.parent.gsub(/\./,'#') + "#" + folder.name - - if folder.isInbox? - name_shown = t(:inbox_name,:scope => :folder) - elsif folder.isSent? - name_shown = t(:sent_name,:scope => :folder) - elsif folder.isDrafts? - name_shown = t(:drafts_name,:scope => :folder) - elsif folder.isTrash? - name_shown = t(:trash_name,:scope => :folder) - else - name_shown = folder.name.capitalize - end - s = link_to name_shown, folders_select_path(:id => name) - - if folder.isTrash? - if not folder.total.zero? - s <<' (' - s << link_to(t(:emptybin,:scope=>:folder),folders_emptybin_path) - s << ')' - end - else - if !folder.unseen.zero? - s += ' (' + folder.unseen.to_s + ')' - end - end - s - end - - def pretty_folder_name(folder) - if folder.nil? - t(:no_selected,:scope=>:folder) - else - if folder.isInbox? - t(:inbox_name,:scope => :folder) - elsif folder.isSent? - t(:sent_name,:scope => :folder) - elsif folder.isDrafts? - t(:drafts_name,:scope => :folder) - elsif folder.isTrash? - t(:trash_name,:scope => :folder) - else - folder.name.capitalize - end - end - end - - def select_for_folders(name,id,collection,label,choice,blank) - html = "" - html << "
" - html << "" - html << simple_select_for_folders(name,id,collection,choice,blank) - html << "
" - end - - def simple_select_for_folders(name,id,collection,choice,blank) - html = "" - html << select(name , id, options_from_collection_for_select(collection, 'id', 'full_name', choice),{ :include_blank => (blank == true ? true : false)}) - html - end - -end diff --git a/app/helpers/internal_helper.rb b/app/helpers/internal_helper.rb deleted file mode 100755 index 250e09f..0000000 --- a/app/helpers/internal_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module InternalHelper -end diff --git a/app/helpers/links_helper.rb b/app/helpers/links_helper.rb deleted file mode 100755 index 5df409d..0000000 --- a/app/helpers/links_helper.rb +++ /dev/null @@ -1,17 +0,0 @@ -module LinksHelper - - def links_table_header - html = "" - $defaults["links_table_fields"].each do |f| - html << "" - if params[:sort_field] == f - params[:sort_dir].nil? ? dir = 'desc' : dir = nil - end - - html << link_to(Link.human_attribute_name(f), {:controller => 'links',:action => 'index',:sort_field => f,:sort_dir => dir}, {:class=>"header"}) - html << "" - end - html - end - -end diff --git a/app/helpers/messages_helper.rb b/app/helpers/messages_helper.rb deleted file mode 100755 index aa017f5..0000000 --- a/app/helpers/messages_helper.rb +++ /dev/null @@ -1,113 +0,0 @@ -module MessagesHelper - - def size_formatter(size) - if size <= 2**10 - "#{size} #{t(:bytes,:scope=>:common)}" - elsif size <= 2**20 - sprintf("%.1f #{t(:kbytes,:scope=>:common)}",size.to_f/2**10) - else - sprintf("%.1f #{t(:mbytes,:scope=>:common)}",size.to_f/2**20) - end - end - - def date_formatter(date) - date.nil? ? t(:no_date,:scope=>:message) : date.strftime("%Y-%m-%d %H:%M") - end - - def address_formatter(addr,op) - s = "" - return s if addr.nil? - length = $defaults["msg_address_length"].to_i - - case op - when :index - fs = addr.gsub(/\"/,"").split(/= length ? s = s[0,length]+"..." : s - return h(s) - when :show - #addr = addr[0].charseted.gsub(/\"/,"") - return h(addr.gsub(/\"/,"")) - when :raw - #fs = addr.gsub(/\"/,"").split(/" - s = h(addr) - return s - when :reply - return h(addr) - end - end - - def body_formatter(body,op) - case op - when :reply - s = "\n\n\n" - body.gsub(/^\s+/,"").split(/\n/).each do |line| - s += ">" + line + "\n" - end - s - when :edit - return body - end - end - - def subject_formatter(message,op) - case op - when :index - if message.subject.nil? or message.subject.size.zero? - s = t(:no_subject,:scope=>:message) - else - length = $defaults["msg_subject_length"].to_i - message.subject.length >= length ? s = message.subject[0,length]+"..." : s = message.subject - end - link_to s,{:controller => 'messages', :action => 'show', :id => message.uid} , :title => message.subject - when :show - if message.subject.nil? or message.subject.size.zero? - t(:no_subject,:scope=>:message) - else - message.subject - end - when :reply - if message.nil? or message.size.zero? - t(:reply_string,:scope=>:show) - else - t(:reply_string,:scope=>:show) + " " + message - end - end - end - - def attachment_formatter(message) - message.content_type =~ /^text\/plain/ ? "" : image_tag(current_theme_image_path('star.png')) - end - - def headers_links - #if @current_folder.hasFullName?(@folder_sent_name) || @current_folder.hasFullName?(@folder_drafts_name) - if @current_folder == @sent_folder || @current_folder == @drafts_folder - fields = $defaults["msgs_sent_view_fields"] - else - fields = $defaults["msgs_inbox_view_fields"] - end - - html = "" - fields.each do |f| - html << "" - if params[:sort_field] == f - params[:sort_dir].nil? ? dir = 'desc' : dir = nil - end - - html << link_to(Message.human_attribute_name(f), {:controller => 'messages',:action => 'index',:sort_field => f,:sort_dir => dir}, {:class=>"header"}) - html << "" - end - html - end - - def content_text_plain_for_render(text) - html = "
"
-        #html << text.gsub!(/\r\n/,"\n")
-        html << h(text)
-        html << "
" - html - end - -end - diff --git a/app/helpers/messages_ops_helper.rb b/app/helpers/messages_ops_helper.rb deleted file mode 100755 index 982ec32..0000000 --- a/app/helpers/messages_ops_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module MessagesOpsHelper -end diff --git a/app/helpers/prefs_helper.rb b/app/helpers/prefs_helper.rb deleted file mode 100755 index 1d01dcf..0000000 --- a/app/helpers/prefs_helper.rb +++ /dev/null @@ -1,16 +0,0 @@ -module PrefsHelper - def servers_table_header - html = "" - $defaults["servers_table_fields"].each do |f| - html << "" - if params[:sort_field] == f - params[:sort_dir].nil? ? dir = 'desc' : dir = nil - end - - html << link_to(Server.human_attribute_name(f), {:controller => 'prefs',:action => 'servers',:sort_field => f,:sort_dir => dir}, {:class=>"header"}) - html << "" - end - html - end - -end diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb deleted file mode 100755 index 0147c3f..0000000 --- a/app/helpers/user_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module UserHelper -end diff --git a/public/stylesheets/.gitkeep b/app/mailers/.gitkeep old mode 100755 new mode 100644 similarity index 100% rename from public/stylesheets/.gitkeep rename to app/mailers/.gitkeep diff --git a/themes/olive/images/.gitkeep b/app/models/.gitkeep old mode 100755 new mode 100644 similarity index 100% rename from themes/olive/images/.gitkeep rename to app/models/.gitkeep diff --git a/app/models/contact.rb b/app/models/contact.rb deleted file mode 100755 index 4af64b7..0000000 --- a/app/models/contact.rb +++ /dev/null @@ -1,54 +0,0 @@ -class Contact < ActiveRecord::Base - - validates_length_of :nick, :within => 5..15 - validates_length_of :first_name,:last_name, :within => 3..20 - validates_length_of :email, :within => 5..50 - validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i - validates_length_of :info, :maximum => 100 - validate :check_unique_nick, :on => :create - default_scope :order => 'nick ASC' - - belongs_to :user - - def self.getPageForUser(user,page,sort_field,sort_dir) - - if sort_field - if Contact.attribute_method?(sort_field) == true - order = sort_field - sort_dir == 'desc' ? order += ' desc' : sort_dir - end - end - - Contact.paginate :page => page , :per_page => $defaults["contacts_per_page"], :conditions=> ['user_id = ?', user.id],:order => order - end - - def full_name - first_name + ' ' + last_name - end - - def check_unique_nick - if !Contact.where('upper(nick) = ? and user_id = ?',nick.upcase,user_id).size.zero? - errors.add(:nick, :not_unique) - end - end - - def export - fields = [] - fields << nick.presence || "" - fields << first_name || "" - fields << last_name || "" - fields << email || "" - fields << info || "" - fields.join(';') - end - - def self.import(user,line) - fields = line.split(/;/) - contact = user.contacts.build( :nick => fields[0].strip, - :first_name => fields[1].strip, - :last_name => fields[2].strip, - :email => fields[3].strip, - :info => fields[4].strip) - contact.save! - end -end diff --git a/app/models/folder.rb b/app/models/folder.rb deleted file mode 100755 index 7dddffa..0000000 --- a/app/models/folder.rb +++ /dev/null @@ -1,146 +0,0 @@ -class Folder < ActiveRecord::Base - - belongs_to :user - validates_presence_of :name, :on => :create - before_save :check_fill_params, :on => :create - has_many :messages, :dependent => :destroy - - SYS_NONE = 0 - SYS_TRASH = 1 - SYS_INBOX = 2 - SYS_SENT = 3 - SYS_DRAFTS = 4 - - default_scope :order => 'name asc' - scope :shown, where(['shown = ?',true]) - scope :inbox, where(['sys = ?',SYS_INBOX]) - scope :sent, where(['sys = ?',SYS_SENT]) - scope :drafts, where(['sys = ?',SYS_DRAFTS]) - scope :trash, where(['sys = ?',SYS_TRASH]) - scope :sys, where(['sys > ?',SYS_NONE]) - - def full_name - if parent.empty? - name - else - parent + delim + name - end - end - - def depth - parent.split('.').size - end - - def selected?(session_folder) - fields = session_folder.split("#") - fields[1].nil? ? fields.insert(0,"") : fields - (fields[1].downcase == name.downcase) && (fields[0].downcase == parent.downcase) - end - - def update_stats - logger.info "MESS_BEFORE: "+messages.inspect - unseen = messages.where(:unseen => true).count - total = messages.count - logger.info "MESS: "+messages.inspect - logger.info "MESS: #{unseen} #{total}" - update_attributes(:unseen => unseen, :total => total) - end - - def hasFullName?(folder_name) - full_name.downcase == folder_name.downcase - end - - def isSystem? - sys > SYS_NONE - end - - def isTrash? - sys == SYS_TRASH - end - - def isSent? - sys == SYS_SENT - end - - def isInbox? - sys == SYS_INBOX - end - - def isDrafts? - sys == SYS_DRAFTS - end - - def setNone - update_attributes(:sys => SYS_NONE) - end - - def setTrash - update_attributes(:sys => SYS_TRASH) - end - - def setSent - update_attributes(:sys => SYS_SENT) - end - - def setInbox - update_attributes(:sys => SYS_INBOX) - end - - def setDrafts - update_attributes(:sys => SYS_DRAFTS) - end - - - - ############################################## private section ##################################### - - private - - def check_fill_params - self.total.nil? ? self.total = 0 : self.total - self.unseen.nil? ? self.unseen = 0 : self.unseen - self.parent.nil? ? self.parent = "" : self.parent - self.haschildren.nil? ? self.haschildren = false : self.haschildren - self.delim.nil? ? self.delim = "." : self.delim - self.sys.nil? ? self.sys = SYS_NONE : self.sys - end - - def self.createBulk(user,imapFolders) - imapFolders.each do |name,data| - data.attribs.find_index(:Haschildren).nil? ? has_children = 0 : has_children = 1 - name_fields = name.split(data.delim) - - if name_fields.count > 1 - name = name_fields.delete_at(name_fields.size - 1) - parent = name_fields.join(data.delim) - else - name = name_fields[0] - parent = "" - end - - user.folders.create( - :name => name, - :parent => parent, - :haschildren => has_children, - :delim => data.delim, - :total => data.messages, - :unseen => data.unseen, - :sys => SYS_NONE) - end - end - - def self.find_by_full_name(data) - folder = data.gsub(/\./,'#') - fields = folder.split("#") - nam = fields.delete_at(fields.size - 1) - fields.size.zero? == true ? par = "" : par = fields.join(".") - where(['name = ? and parent = ?',nam,par]).first - end - - def self.refresh(mailbox,user) - user.folders.destroy_all - folders=mailbox.folders - Folder.createBulk(user,folders) - end - -end diff --git a/app/models/link.rb b/app/models/link.rb deleted file mode 100644 index 30e75cb..0000000 --- a/app/models/link.rb +++ /dev/null @@ -1,19 +0,0 @@ -class Link < ActiveRecord::Base - validates_length_of :name, :within => 5..30 - validates_length_of :url, :within => 5..150 - validates_length_of :info, :maximum => 50 - belongs_to :user - default_scope :order => 'name asc' - - def self.getPageForUser(user,page,sort_field,sort_dir) - - if sort_field - if Link.attribute_method?(sort_field) == true - order = sort_field - sort_dir == 'desc' ? order += ' desc' : sort_dir - end - end - - Link.paginate :page => page , :per_page => $defaults["links_per_page"], :conditions=> ['user_id = ?', user.id],:order => order - end -end diff --git a/app/models/message.rb b/app/models/message.rb deleted file mode 100755 index 49806d3..0000000 --- a/app/models/message.rb +++ /dev/null @@ -1,72 +0,0 @@ -require 'iconv' -require 'mail' - -class Message < ActiveRecord::Base - - belongs_to :user - belongs_to :folder - - set_primary_key :uid - attr_accessible :unseen, :to_addr, :size, :content_type, :folder_id, :subject, :date, :uid, :from_addr, :user_id, :msg_id, :body,:cc_addr,:bcc_addr - attr_accessor :body - - def self.addr_to_db(addr) - ret = "" - name = addr.name - name.nil? ? ret : ret << ApplicationController.decode_quoted(name) - ret << "<" + addr.mailbox + "@" + addr.host - ret - end - - def self.getPageForUser(user,folder,page,sort_field,sort_dir) - - order = 'date desc' - if sort_field - if Message.attribute_method?(sort_field) == true - order = sort_field - sort_dir == 'desc' ? order += ' desc' : sort_dir - end - end - - Message.paginate :page => page , :per_page => user.prefs.msgs_per_page.to_i, :conditions=> ['user_id = ? and folder_id = ?', user.id,folder.id],:order => order - end - - def self.createForUser(user,folder,message) - -# envelope = imap_message.attr['ENVELOPE'] -# -# envelope.from.nil? ? from = "" : from = addr_to_db(envelope.from[0]) -# envelope.to.nil? ? to = "" : to = addr_to_db(envelope.to[0]) -# envelope.subject.nil? ? subject = "" : subject = ApplicationController.decode_quoted(envelope.subject) - - mail = Mail.new(message.attr['RFC822.HEADER']) - - mail.date.nil? ? date = nil : date = mail.date.to_s - mail.From.nil? ? from = nil : from = mail.From.charseted - mail.To.nil? ? to = nil : to = mail.To.charseted - mail.Subject.nil? ? subject = nil : subject = mail.Subject.charseted - - #logger.custom('subject',mail.Subject.encoded) - #logger.custom('subject',subject) - #logger.custom('mail',mail.inspect) - - create( - :user_id => user.id, - :folder_id => folder.id, - :msg_id => mail.message_id, - :uid => message.attr['UID'].to_i, - :from_addr => from, - :to_addr => to, - :subject => subject, - :content_type => mail.content_type, - :date => date, - :unseen => !(message.attr['FLAGS'].member? :Seen), - :size => message.attr['RFC822.SIZE'] - ) - end - - def change_folder(folder) - update_attributes(:folder_id => folder.id) - end - -end diff --git a/app/models/prefs.rb b/app/models/prefs.rb deleted file mode 100755 index 7285eea..0000000 --- a/app/models/prefs.rb +++ /dev/null @@ -1,19 +0,0 @@ -class Prefs < ActiveRecord::Base - - validates_presence_of :theme,:locale - - has_one :user - - protected - - def self.create_default(user) - Prefs.create(:user_id => user.id, - :theme => $defaults['theme'], - :locale => $defaults['locale'], - :msgs_per_page => $defaults['msgs_per_page'], - :msg_send_type => $defaults['msg_send_type'] - ) - end -end - -# TODO move refresh to prefs and make refresh page with messages diff --git a/app/models/server.rb b/app/models/server.rb deleted file mode 100755 index 02b4f41..0000000 --- a/app/models/server.rb +++ /dev/null @@ -1,41 +0,0 @@ -class Server < ActiveRecord::Base - - validates_presence_of :name - belongs_to :user - #before_save :fill_params - - def self.primary_for_imap - where(:for_imap=>true).first - end - - def self.primary_for_smtp - where(:for_smtp=>true).first - end - - def self.create_defaults(user) - create( :user_id=>user.id, - :name=>"localhost", - :port=>$defaults['imap_port'], - :use_ssl=>false, - :use_tls=>false, - :for_smtp=>false, - :for_imap=>true - ) - create( :user_id=>user.id, - :name=>"localhost", - :port=>$defaults['smtp_port'], - :use_ssl=>false, - :use_tls=>false, - :for_smtp=>true, - :for_imap=>false - ) - end - -# private - -# def fill_params -# port.nil? ? port = $defaults['imap_port'] : port -# $defaults['imap_use_ssl'] == true ? self.use_ssl = 1 : self.use_ssl = 0 -# end - -end diff --git a/app/models/user.rb b/app/models/user.rb deleted file mode 100755 index 1d4dac6..0000000 --- a/app/models/user.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'ezcrypto' - -class User < ActiveRecord::Base - - #acts_as_notes_owner - - validates_presence_of :first_name,:last_name - validates_uniqueness_of :login - has_many :servers, :dependent => :destroy - has_one :prefs, :dependent => :destroy - has_many :folders, :dependent => :destroy - has_many :messages, :dependent => :destroy - has_many :contacts, :dependent => :destroy - has_many :links, :dependent => :destroy - - def set_cached_password(session,password) - if $defaults['session_encryption'] - session[:session_salt] = generate_salt - session[:user_password] = EzCrypto::Key.encrypt_with_password($defaults['session_password'], session[:session_salt], password) - else - session[:user_password] = password - end - end - - def get_cached_password(session) - if $defaults['session_encryption'] - EzCrypto::Key.decrypt_with_password($defaults['session_password'], session[:session_salt], session[:user_password]) - else - session[:user_password] - end - end - - def generate_salt - (0...8).map{65.+(rand(25)).chr}.join - end - - def name - first_name + " " + last_name - end - - def full_id - (name + " <" + email + ">") if email - end - - def email - if login =~ /\@/ - login - else - (login + "@" + domain) if domain.presence - end - end - - def username - login.gsub(/\@/,"_").gsub(/\./,"_") - end - - def has_domain? - return domain if domain.presence - if login =~ /\@/ - login.split(/\@/)[1] - end - end - -end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 0000000..5b97df9 --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Mailr + <%= stylesheet_link_tag "application", :media => "all" %> + <%= javascript_include_tag "application" %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/arts/favicon.png b/arts/favicon.png deleted file mode 100755 index 34d2b60649ee24dac03b20e1b02583cd2bd8903b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16596 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 J){7g5{14W9(XRji diff --git a/arts/favicon.xcf b/arts/favicon.xcf deleted file mode 100755 index 0d2ad6af43b7b7abafda41c2166818ce2b6484a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44489 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 Q2*B5SDJ98jaigIB0a9)*LjV8( diff --git a/arts/logo.xcf b/arts/logo.xcf deleted file mode 100755 index 7ff1b6c1e557c9d469feaa0785e5579447eb86ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254283 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 z zRyjXE$pS{Z#_%a9u^m9Qjm-u&qNRKw!T4ra+`(DW*? z2_LEtF5$&@Lj}bwSw+Yi#d-DTRS{_tgD9(6K8}}N%}z!jOvI)p#}R}t2&Ifh)NS}= zHQ}&1b2$-$kkTAyP83Ep!<`;TiK*Wk&WoWq>kvv!_|jP}KXi`94Z$2@P3|l{zz{~T z>i1IwZOa%|Bw8Bh*Q&`X`(d+YM`wG4_6R@`BbzaupcQI{;^5SieKb`Q;TM1ce zLpU*in}c#@}m-LF}x07o<01=uKPA%%V@;{5{q;`YEjZo;9BdZw}%o07uR&(1Y;TBv!jWE znYzhG6SnDL#B9{y%7N@4VZEz-eiOKJ-i`mxXsIV8-jnsm3(+2k|-SoK->*yUZd%;`jz#yvUYmVV7PqNz^Xn$ z?+N!?Vt?$o(Rwr?ys*I16@jp!&d^}+AU)_dmYF5Cz24Su2NT{_@_)|TDdXZ}N7pE) zrJP}Nhv^~2kp?0pj$N#sRlV*X$2T*|NI;M8&Kv1;1yV?69l9E<234>qS2l3;fjD>( zqa}1&G1k;PDxVr1WuH9(LFq$8vtbT3!-TZN=^{lIRKNJb=;-KR>}Y4SN4WDX*YNOJ zovvR^5P2ImR1Ynea$?2sKo&6@)e^Gq`K|l#lRJtp=X6JM*TZ~@R1~W+K{WAITy`+@ zAQt6yGttttH)5mWL=y3=dR4xLW%;r&-6ql|K{X8G3$M58MW_lk_1yiVoRJO!AePoZ z1yzH6Dz_e3N(~TwM1(BcW~K3Kqf#jCQGBZ>@K*Y((N}#;aE4XLRtBkU#NB*KMG6t8 zRrSDn7Kp3o{I0L1*GrGR>Qgh-a5c;sT4@TMV%INK_W!Ld6CG+*#hP+H*vOukYV6el zn8XgMbh1{Jb=EBHQmO!da6g z;Tfwg!B44q$aMyLQU-dUeo6h-1RIG;>Rxq33$p{WP~#mIs7d%!3S2G|&!qn9{(i{ zf3U<<QVsMWcZdqVgr-38wGTy+Y+QTky>1t`0Y#70Nqz2u{b4as)1vQQ+0K^h#<{A3Uo>7>k;GV z6YCQfQ^c4=4`~3-3zglTv&H8iLOtVj(od^CvU5!Icl#uWjr1Y!7*=Sk&{*LSUhSgE z-jW9$Ne}w;PVMcJa}@8Y7o#ZQ2;s9Kq1#D4?Xe4?*S)EXZF<3;Di7&*DmX=t3zj!_R9&1QoaUQ{mzFTAK<^awM*kcMXNa|tTavjkY& zkW_Vao>EWV_kz>S$4ZB6sOHfwQ5+L0B=Vdm>vi*lAt^2 z_V;wr1Wt%VN6E;4T6V_NCaQM7?40sUO2`mJxZ7U0YtY$$rt>o?&!l#8Lt3YU!*joF zn`hKB9?|S)>OZ48QA31NcZ?y*F`PHrwrRtD5!v0tWk~9Gib4{7DjJdmZQJNJ515B3 zPsLC%O3vn?Y7N8F)H?5Jw!o;TgHBJ!VD+Es_*Cqv6xc-v!aHqr>jqEz9iJw);}IhY z6W#VicO-AWb(_|@wg0D19itu9Q*OulhBwyUvB}Za>WM_;(!8giy8o%PC;bjjc2KC` zw`Jv}zfo$5__U$m?c zSq210jnQyjf=jyZL3aIXpJ{wR$iEccf}N>)ih5s7t^{%?w2go@Ojl%YhlrA8u(DVc zKg6b)iGr!FVbXUnAt{i-t-|uLR9OwElm)cCdrr-WW~3SxXL9iFL^V-Qs1lp-p?c#I z&QA{&lvT8{*p*eZQ|nKyVkSWhlJ_Vd$MY6C-WeMRle~h)?UHXo<%1A)Ta@ex80u0};Qp2>(Yyd^7Z zSdnOHoL{RZ3!1yjoU6yw4HFE^flQphD7%KPgr?lofP`85YZl&i@5TXn zzvGgB%*jj;cGT7I+c!NmvMSx|Tp|L0(^fOHD4Afd$6|Y&5=@*>Z-RqJEf$(mU|wPb zuRP^OqFKi*JgR4l^>}foKXyFx62?l$S{bC9cZ@1wMVuNC^q0*`y+dx6 z_jfjvG-K1oIz~l@mnzoMF((H_Js^3*%l!eF7 z+ojqa-?;aU1T!6@MmoH0jlh9wm^SK}%3^Fv3RB%G%%+7-9XraW4Q`O>BlD^j>WuH&wQUD+@HjO=rp78>HZ_mRrv^m_Fu&B#lRiW= z>+Vo9%#?*VU8Kl@{Kp?-zC3uDX?c(7tO2g!;RUm|?wMd_rF%Estz62fOQ%kq**#)Z zOUTOn0r%l2x1YuUM{?KQeTq~Rt72}0ttR*?E}LmuG1uTdYG%XI`p5dkd5glcs%M2v z$uRLEOt+ayflCZxDx*-T7 zdDZOhbgMLlPOF)52+S<9WPjRb^sJY8^tIuAcZ` zch;TMQ)VKmt!k@V->8+#h8GuJA;vM!<4yV6K%!h`s*0+sI|ib&gIsOQ)kbKvMbI1( z37IT2^@EAME^envTx2}!wDUSpimJ6I^3-EYD{1@`Wn&BPcy4FEtIU+eY4g|??W8*1 z?m&6iqSsic9v9aNORR;{+=oha_91nc=j+5fYDYG4bZ93no(kVqUZW_*kmZr!;TFPm z>miwS<3IkXj)|u_QRKRVOs(OGsNryI`6W5n&Vw2$9Xw{`+Qr(%#RM@T(MoE(^H{~B zElq(*{?X=aqiI)#%A&X1F42}78OP9GqrFD^1e0Y}7x$r{8Hqu=wyAA>@{Hn5^>`HV zPD@YrZKbquo4f4Gxv#ZDg7I23^x7lp;Z&3AG>b8j*UD+-Ki=wb=kXZaZc9yaN{d)? z=OLF3FONO09uFRSTtDtHLHJl2TDUEPM;=xWr=hU>P_&t9df#Ktqds;xhShKJFcWu@ z<~DPh)_c@zNu!IAq#wSA$59?fo8E^d)YFIMSqjgh&D^G{N&QDs9=4;xrB#HCN3& z<`A3zqInAYr5hmk5NfZvhVWWn+p+DoHW`El(t!Zi#muD#r6OoHkA8K}gvj*hiH*V6{fiK!n zKd2+#!EGFBCn%)a}v~iRK=fOzRdy5?KYy83sg@R#|1k@3@94D_{k$W-aLW+4F z&3De}vkptUoxI@GMdxDT!bSeoH_6OU)=5^UetsdfFiK|8eAh791>6lT)aNM^p7~Lp zS`p5v%0gfe<=?%9u>!}i2%wJ}F24RnVM_SaHBTM0lKK9^RP!`yaDiNO(x*Ij>=f27 zOd}x`ZCoS4HRLMy7v`yuJD4U8wI_eYm zo%7G0I~zM2Jrg5;Nt2A66YOI+7o25g`CgM0B?(8#HYS(UAp7jk&Zfd5&&4z+C&3J) zY@29s)<1LhO!SP;0bI{1jes(71bV?{m@^Z3+<7e*YVJdbwC!>Z| z)`mN$%}Rg%@1D~>aPZN*DCv@yFgeE`FdY6#SyArh#&{}wkg^2;{}?PD2=IAnh9_ot zbasN&<4jJ*@>qL+FG2JsT63$hYoZuPhD21-+M}wNg>Zz$n73;js~Yr{_LdeiLsB}>?p)6k3SNVx!#yb zN<&_Zd?ZO7jkB!(uv8~y67ON>7@Nx6oKzzzN}l>~a4`2?`#jY=j~^kv_6Dg(yqNKVOK{o|>ydRc4*vdmSo z;R9wik!+Kq&p!UZ@ie5XEJuXv{XPWBoSxwUYkvIavc>E8vD9NxiomIrZ}Uh90QvFy z>=QeF?4DyOhQu*PUm9q1mFYvEwgj7x{Vf@ISx2%Chhp?T*=S=FQQHC`@;85X?B~Xs z*iojg4~szxSb0y(t26bygHQH%X^=s!WeFL!eXU%#>eXn>rFb ztjS9b<#aGkTN1s+`OX9MooRD7OCL!w`6Ou^qr67>@AP+pK&-n*@Zk~nFuryVCk{&O zaLLl!gUj?TO|FWAT0@R10h3?1_Hca!2Zs;pgVFtR*qXb`1Nt5J8>>Uw3QN0Y&B1yH zeNN$w?brKUNNclHo1O1`@Zr@uwN|fbKq>9t=kC*cVi@CwVzn_>fhg{;UAIQ9@&EGm zKD1+Ye_xFHwr`IdPD0&sb~)Ao+qbH%4qnpV=?y_L?;8M-Q!@BmF2j(DB2nWp81xnm zgW90}>a430&~*b`e(x@S=dPVXrnfsLQx_UC<>VCYHEMdm%3a@?BQUM0Bmz|Pkpc7#~3@vI`= zs;^dY{E~lR=e8(?;cnAgeGbuyn#@IO*C-THt5pv0-3gXiW^Q%1Qc<^VN!{XXj(!&h z79MxI>-;sM2`J|vq>Bami^QK-tXM8FwD`p%TVhn(Et`eIH$d{9K-r7UPROGTPh5DG zf0uDzr)vL0ulmVq_9M6ITwgsd$$aFct!- zL}C37o!I(uOt55#rN}Hs9q^fMb+K~DV$sVXN_x@u})uW=#&g z3PTPImj&y{7Fg1yD8wgGSYkJ7$=l1$ol>#ag6&v+WTwfIv)s?X=UDaqc0JfjR4m9y z;(yWJ7MKNgss-n<rloFAWS$4awyL z(iGRVrwKt@`u2QcAB4OdOPT(#GjcMo=Gnrk)kfQxz1Oa72ewJ6m#)gpTC$`K79+K4hH(Irbik@tY2#qGC>#u)V1{DSKZ3*cp}1TJt-|SMQZgh>DU^@G0 z%^aS1h}G3AShA_f*eLPbA%WvCqMcT3HhnA-COr9nu}N3_fTk0!35Z(AusQNX#IUws z9BC7&!n03IzZPj5Nwj+6_ZK7WBmSHcR{LGBfLan`moOWVC!$gztdd}_SZorrN%f*2 zB}wdGLgNAuWT8|907(-W6L1vW)Nj&)5lmwK0w;BaIHk!|Vy_ZGH4rz+T>U1kp=Gsx zPr{QGlC6QpQf(`fpeK&OtkDFK{3g#sTSNraMn6qhpIl8`_KsXt6SgYwsv+1cCQ52y za4e=0x+e3~M3-=+P!bkpA_V)1{e?l|J2i!JA(Xm%X-F3uUkhj>esYLk`Hj~=NaR&! zW3CAxm|(Niwa0o?Ln*tT`0AGHdq7+X`0fk-{j3c3wBGOG%<6xK!>|M%;0UJ8wou3qsBXkReuJhGSokK&Y z8ivez(J|TS#=$Nb_%XxO3hQcC{99*R*BGfyWW4WmU83YkKbsPq{xGyFN2sh(iK%1 zzZy3ZT7E5-(TjXwYq>|pF8es0k;^=6`e(*1lk2cD8MWZ?Tdrly3K~9$>?U&=wBVgk zCPUVP4ac09A?y7jhAa!mp@~i=@h+}_vtf}jGC5js3nwz}l1|vbnIvI5oMV@dCV@o^ z5Qvcd^)Phasgn|gwJ0wZxTCZdkwY?+x4IYeR@MWyzlAmTN$5RU8g9O!cENT;hTwMSRL1` zEfy_}DJI?v*(HflT7(&aNs&`>*R5M4;1Nkk6Dzp5j$nHER_0a zv9(3eMGX3hSiN@5T7jMrOKhP?IJQL4UL=Hc_?Jp5a1pp^m6mr<&MaU$=Ei!?AI!xqN z?J2FXRLa(z$#~PySrZDa38r98Z8oNg(69E%AQW0!5R%zqu(jSejyT#m=&aE5cUTZo zg=b%`x+VjbiI3aB@&4klv}$q_&wcgPPKF%o5EI+h*ieEEVRa&gxz-r5Djzz5%5sk8 zi>+bVCu^Otm9s*>`r;;Z1dIhCN20hA&%SKUO?po>#9j{W%Vx9^?^TE)gxdE>oHw&n z2yIms*Xse#}^jBYOkr58jhVZ;(X=}?JggEhwFA8O} zvy!0_$;DEu5N+zRJqHxgU&STM8e0mjEz&4AC#&fiVuPzzeUZ;#mz)MLA^J>}Sz>LW z5sA?VCdV(TAj}I(Sh5S7T9_Tx9xBMrGZf}oza)z;bc`t!@itU{O+aR*4X#=$;}vm> zM09T&R}0;ri)08TTy16-RA#X;L2Na-Q6Prun2e~@0SUN!(#i;<%faL8ZlD+Xqu8HU zTos~y`P5EZQA{C72M|hw=FevsRxcRmTdx{#h1G;?h|zj0wkBlkMN*-hcWVpX^dr_& zXuV>2seGRj(^uQBQP|1S7H3j}G?^?vD}!?81*r_SHlPS`>Cm7*FBdptm04&6)bg8j z@ym)o-+-W?CRutY$v!MB4u8JH$gPMD>+i}Y zD`dpCaeESN^c#i#te5-SZplZjl)tcjYYxd2kyVIXo_R}N1Vod+BushA^X1DwJ6s_z z1Tt}ORWdWRK@9lpc$^o5E0PiQy!P=aUJojaT&Wb|3ORW*pZ5f&5QNYux?;In4#Xn+ z6AiEaqEdAD?C1@7Yp{;+c_OT5d3%rmd-!{EseJolP?a#8NyvMI5#oJz^eV3sA=%m@ z`2dDwMSeowCYJvh>`C4x3gWy?fR+>@DTTO7A<9ySxfCKWg?LOMI#Vx(I`{;+DGB5R z%9F))3PO~p5c5e8pqf<&x9H%xh3HTrR+Jz|0VgFmQrtpRDZ!WmcuEkbxP|yrf=1QY zVpDMwq$=R6!$g2!NLoo?tq^A`MBNH8 zxRQ`uAwpM(*A=37g;-umXs;yHR}%Uw2?dsf21`PPg~(wcj#v^_ED19fqK+j&$daIB zF;K{!r(j(mzQ$9iy4v$TY#?P?od79`GR=5^GW}06uiQu^A+Y>Bo_hhH8{YPai*>J*(WatGER9)V!>Cc;{HHonjB_^-^ ztrv@u2d6yJG=;EB(Sdr&g5WkSoQP3~j;O3XffXw+Xt!~OGm zHfxd^a=0WV8g-trN7UQ((ePGH8pj%^A|>(gp!u1iT;k}OKTa6X`LX6rn>23JsBzPW z9_iR`?7Y8ZC6dZr&fTmx*ZVWfIoi;B)4( zW(rTQjjr+J^k2tJuW2FO0_rWQU(Y`(Q-~?+JWfaESZc{re=T&b^nWWd&t4T%ZWf)~ z!t|a)x}3gDR_<4NmHI;eIq~(03pd238^vdiuUq39{;25Wev!z^D=HV$g4<=q`FSUf z?b^KdFJFDV=DVFoPn^mxD!UaVO?&l+>c^}7A6^yhe?9Mf^*>a5=jZ)eD!{WJovChC z?Vb7PS<&Oy?{2)sF6G3njqmHc%#RKAjU;=i&S%^hJOobTKG4&NWD6L*RS*UJ$3$WQ0MRa z_&c?_x>|AF=I@j`X%B>d|2=p6Kc!CCKWbEUBT6MA>ia0y&$xJ9`M&ubG|J(%!eI<@ zp62S!HH>Q4S6q*BJjov_<^tt0o~``F|H-wA>pQN!T)AAAnAWHOTN#xT6$dtNiL|4?+`VPXR)%Zu zdgd0^bF__AUMDoLb=&qx>qy0o?VC4m-MTH4@%?s1=0+ZG%iJM9c5mFgMG|&IT19Rh z+^~sX+qU!T@yN|%8#Zj-yhRA*yqFvL>o#n%$^3o{RHAk3H*VS_3WG zJjmR+C-RSx>xb7svT@VqZCkhR*twH8&fDj|U9*0}21IUC+gOFNhZobUl^ecUv!1L( z^0v&KyXDz|Zy*$2lReM=AyRhX>uCgft4#)nT*!0+lax&Me^=`Yo%IQX7XCIW?fRx?WB|(UcS=ig>aEA%5Ej0 zY}N7=k{OmEUM!R4Ra@!)FXev5D|M(qXyBGD+azV(GD!(lkfeZ<7k~13Q=GqKNo|(mif`AflTy!+ zDtJSx;MGe~1--K3OH@HWQOa4o+~b!o=}Vws#N}*WRnjI>ktiuHzI3VNvQ#UL-$-QocpJn-`0URk38q*`HG3sxI;*q&E*P@qqk< zrSyu_z^jGkNihd5 z=COE0m8i=PM-mB^;F1r^hpjI9l8+O?lPb&47Y0wniaH6&NNS;%&#BLnqzVI@B$>5{ zR9!s>izLL!3^%D_j}uB^5iqBaN8}i%>r2fe73F8oSspP&U9?tnn88Dl#6?M}5u`3^ zRNy#qFm`iooDlQb+93`!kw6jSylD<*J4@Ii-ZHmd!5g%U^c|g-Qjoi2iAX81A z8e}I8wp8)mI(WAZ{(qtleklFm%4+EcANU@WANs$BM|gGS-uzUxuBIPsex}-~Zo~6a z)oyib1347s9(-RNt7cMWWpxTrLLdsI3b4>C01N#(;{Vz+caV(gRX--UM)j-zQBaQV zsRom%!Fh8B1F1oE%SiBi^}TZ2&yDVAeD!^TX9ReX+{yO-YWkPI^UNKjrJq%|K!t?4 zgTwT5euB#M^J+SeSF3*^w;#BHn)K`H2jn)--p+F)to1BkM;Xq)Ms9dz`A7F`UH{FO z%a<-$tQOx|vh4HK>$dL8E%Eqlsw~Ofy^U!=TctVMzFEDBsME?D5@q^q+0vy#xkxS23vbP5=kuJ|vu4izoH&nHe0bA0>Knp$ ztAkZvsxQ^b3!lSb7?ympXwkp4ayM_# z8}#}x(DyA0>ebg*eJO@pwk2ZAt&c=Egw2}CruRpbJ?YCCw zswAtp0oKqek;k{)&3G+q_Y7*br=7uhyTI$RH}OUMG+tUVnx-yJZ%gE%TBkpI|8kWeg>VQCYGZeEqFkw%WD4!ml=- z+OScA>TAChXRWSlaneoL8*z9C$cE2ljXCdOvc^|!I<=8^kM+z$)ksbX4z(7+5gn;2 z-m!(K@^)wYO%^H3f1<=@wfW}8O&iI;6cq(kVx*f=qUvDx0+WFPGI8rRy-jVe$lQ^+ zeMe^Ij_qo@T_S!64{q3Cv#_3%0$aK?bov5vm=n3ShgV9ZX71R*E3n$>?C`cTF{8HW zEtfapKv6;LUrn(|pmwQRTE4`ZAeFpOELPj~j>PVr{8PKt&V##m?j*DA%mHrQym=FT zST9E4!BwWpP@B=f6df7xmWyn)!{51kPwF1w*O}QYz@`pth86pz*lS9ihLbEec~gZk z*ty5qOvlFpmQyDzWcpw9*S4x}8AwfJhc2d`MYS#3Ni zQsFfvZc5Ea#pUzoZRd4*_ntlb_8mBwc2FJ2+P7!-ZX;FZ4K{5+sMR;Dq#+~KY}<|< zJ6Rkb9AK5c>;X^*4lsYSdndk@Sw=Bc>WZmm6q9w5t)Zgpo_z-n96WgVNQ!I^IJn>N zVyu~t*kr1Suu?>y3oBw5EfQ0A!iuT~4<9~qBrD4H1DOLA=AApX^L9?@Y@~F)U4yN- zc*XK%(hFGL`8$w$03<(sgsmM%*`mXYSJn}AWItIj+q#>&hU${V`Z}818Y-o`V7>?! zrH^C@``6hy*~hYvW@U*IMu(kD$ZR!bCBRWs3^y*RKnGC!IrB#TPDE5Go-2IXSs*?ru~-0puSrKCpGgmKrXQ-T@bw2J+E@ z`NnlrEi*u@gW&df|5a~0sPLHg1j1bJU~067^R_@CPp{$PmzC- zaw_96T}Cm z6si3*bi*H7VE9cPtjm8?`18(yajMSj%(DuF8OXex=_gD#A+4^~fR7fMQjjVn6+m3@ zPmzC0I^l@aBPt^8pvDQNvq)x8QwUf<9S{}r&g7XgF!hK+r2R@)Wi3d0Ald3oE0ShF z12QhmJw*;whTS>Gj@nv4DX{K9T*zQi)A~)1^QjCnQi#cBAcf$ve{h$r#n%5j=M-(YMYa*JCM0{8=q~P;8i@O)6-w75eOB00N;AfIgxelK8X@&K zn+<=*WUG=6TY#N6H63l;&d0PshQ|fA6EJN!*$D_c`;w&pq6J#%)ZZHAP45+UeDnc3 zr0){_^$|DAIdaJM9(!bfklxF5K*>H{#+OiYx(^~QhF2Z**{Kyf!VV{O@DO6H$MKmR z-b^=dUJFdG84k^iW?{Ff4kp;>CA0e4cG;%N$PyK)b;%yv)H>-p>;SW1o`i&U(`Ean zuSYKSN?%XEDa9q7u60>WeGPjp8DDl_x8CC(p!+-!?BmbGZpK8qs}q~IY_k1Dvcock zZF*fZ!VqfOhF~js51XreEOr>7j_%k_OGP-c!_rRH^<hyJWheXVMf8^Q=1I_r_Xm%60mgD~ClyTZ&c>KbWXpIieVz1G$==QmRbgo_ zgKg8mo65ZKX>M|bNcq# za|IVKT`8{&cxg{mmX{XsRj%d5CrTo5gA&L=ZcY;tB>sT`yvWGegT5wGf6aiK0uDNyHi9dU+A4y^Kk z?B%uGyIERvQD2O+1-r12JlS)s5nOwaB8$reH5lmMYgN$WcZsIhgJao>V5fE?tsvPEbrl%z??dsNuj6%c5X$@~mru6TECEDobIge@PX) zMT9^u1fta)=nK(eEM?zQhiyMC|Gn+ z!lM=%c_Y@qMRyCyW+rANzjktDkePU!6*^2u$)Aawobof>L6VP{QtcE`!vddL@4EFNt*Mz<7$`w;e zDy($4OxfC9Wetb_y5%psdR3&C-w^iVJK2e?<8bM~bisw6IL&xFWK}oxO?^Y5d`VKe z5pUUPBDScD>pJ~E<;V1z^0xf7jk%8Qm|lLPR)HGxjrYlbMrsWxy3+vhz1Uvkx}Vr? zg$t_{Ui9xMZyguKaTQ6&QSWt4O${x-lI$>TRW*XuRa5ASLU+pJmfIG3l@z*B+&7&| zl`VA|7ibN(AEPzWE^H3TDrcF?O(Qc^CaHRbX_{wF3$s4yNp*$xKdS2$rmjnUwPvex zWzzSG=G2!ujV#qvbccExm$H_cu9N*?SWyk12u+w~Eh;;-FfP+T!qycw>!i9ee3d6f zN=I@TYjv4>)xGA@D4i?P6)?agWl0}WTQSVQV*5C!tX|m1;S^~`wcYQX`c+7O1&{3* zV^>|e98YYLo{?C1T}hS6S|Das<;p~jbint(BHg@C50`9nrtn0&%SoP^PWv)O=__ev zuI<`%$t^RUB>T475|@FiO4Q4hVK}%MzKGU+7rFZ) zdiO>2?u+REvKP_+!3ysO|GNd@?7|M0jQh7XO0ZLwlQ*d*qA9D)AF94T;qk6+ntHT4E#fr*d+M?3R5=BT)#L4tVGHUX^NV7dn_*Pgm)|Hg(ZqU6}o}_`%QsP&C8oJ8|}iX zVCcqKPo%#B#2ESY?<;6QYThYhM(7W09Y4+xT7L|Z184gF<})@`sd*=blHxN4a@fvgXr_HQCfcXh#eu z+rdVG-aW=an?2tYjL?eDYgI6`L%}uc50ZZGo-Ycxm6~_LSVl_u8P(nx%gMm z%&UO3excg}Lx0@R*E%m$hRP!4D~BS8M+CKN5BplwJT>QpDL=eI?Rv*}keY1O!Gjq3 zo8AWB?oH^kq+ZmPx2>|ZH6LR|fT4f(+0`ts`jJIkb(-osb=__i8qklk42*zhd*6uM zFB~;h&lJ?1Rg{`6{51*j`V3`{wJfy_QY|0*vk|*zai86O^-OpY8I@ zGi8x`BZpz4{HUR(Q#D=X=r>IhA5o{)QG6n&)6+|ZhZ;fysA($bW@9{7+K$vXVn4TqUwy2j-y~w za}I|ci0zIhh8<11bVpQoX&R;iCz(1PW6I5Pg$W{SwU_~{kgieV%EoCe90kc5Q z+a0NIb|d;Fw;4LsF)#N*xeT4zV3!`vxp<4A)5|_C2(DgMUMWLof?sl|r^-tFc&sSS z*r~E*Gri8zKl%k#44j&E0w6H(TOIZb6AYR%TWJ;n=`8hQoSo%a#SEHvJgwyEp+hIG z$)L#$Xl)MqkazH0LPpFwkD1gzqz*B;pLK-+6D(VxWG##O@s`PnH8uzG889ma##oFI z4a!yo8L}}rU@7udKJI-)f!NR1Zg4SjF&`nWcKNNeiDi|$8 zk{T_`LM=j?J%?{HT5=HV9bULuYw7;IYHwoC?n5^jE&~G-UE?c(8aZ@Gd}ZbB*>$Lb z(ek!rR;$&Wh9^WZX88Rhf)ije6eot2;!aw2%nHqETL$~FhsCJW|D9a7O?N9N&>G>{qytzb5z!_}Ya0RC=* zl@xh0ZvOWwv%2I^WtcasM&iai&>8$6N*Fq=Dy9|MYAWQ{>ZpR&JD~P{*eg(7LSCzm zING+B+FFH~zyW8fAA*x1{ZCvd0xs1NAQ%v6|HBX4ugKULx{(r>W`4!Gu}&r0Eif57 zfJFGg-+mAVQ%CM-?Sdatr#wv^2_}ImPjM zcYK%ehv-=$4q-8C>D|Hf?qFKeX6_EAcL!761?~=}^1^#}FugmNn%Bku`N0(65xz_< zB1t>YcMMQT>qv@$FKHD?tM-Zj-gzuizuFTVo<}1MEHKYMMD8<4J�y{QxRp6+Zhw8v2lLJMf2A@(K69SNq>Tz?T{z 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 GEE3vd0X2CXRH||c z)v>sl1R`RU1)aqcX+z+Vg`}n^8J9V68R9CcWb8N94j64lHXxEW(Z!taS8Z3k zoESWkiilH_(1OgkU#d3iF1LjzL8b{;2}@;!jL^8f-1c?Y2P6btopUy5XG2vYj1GAm z1FR2u%LDzoL4_mG*CPF>!6Kx&Hr4iZAX=On1V}q8lF?NWMfF%|uKtWzekKx4Xio5I zEy-1glokg-NPre1-L2NGK#*XKP)jjitsU=`f$~h*I#&;>yywbV(cTaN0b*3{qmjV~ zK05IIMM>Wt{8}Q~Mx9Q*_EAc^=RA|A^gp76|&qnIjEZwR4Qyu1ZfCyLoNVhJ&2FsXU;QRP4& zUnKf?R@kJvW|fi*6u7Nwj9A2|g0T;&=A+aZQSiuu$*wQOSnUFrOFY5roPeTd35Sm6t0=>pRZ`Jna!T z+A{xyKr?T9azKF-D#sN-sz(|;N8s8`VAe2A+{!X$^7fqJc>gx$?&qc9+!3i3hfVNBB8E8HnxKfh!|1|NMh@R}PN^sKrXhm2Z)P zK{xd1B|KjVk7ht^Kg6Pgr!DMfsq(NP;n_t58wg8OsE~b7flbuQFaFJF^q=+4U;d>~ zKC1A+o@p=So0Qn@#nxChe6fRwUCGPX!^NI5&YxyWrtQn*EoCqNk%difPkZ4-f%$Dm z0&8Wz@nSNmYu}OJR<2sPs>spRxQ3LUIrRmhdF9ntUzJ&J)*Gf_fwu1hUwGUn57-Q+H%}NvT|~-ldPTnP;5$#muD-M#~d7eWMT8WQ=XqX z4T{(zYkRX^XWy4L(y>W)v35flNQqThxAe%uhw~>-nd*zHv^MNQ5iE!#Hpg-Z@|#PO zrOr0Q9$DBq<+;g$9BQ{MyV_vQelE5(FXYr;&c|L7zu8XoDGw``V2VEYY~pjzO@<

3^}NYf)Y&d)kIQ5> z9}N&3(%{NOp=)7#_RRPR&w{FfiydbsIpF5PRx~e~&ylY!af_Q@BUl)i5564t%mhzg zgFtJXS+mdpapvAA&Z9Uo0UmC4JpGK&OnUCQDNtvvDM`Hg8ck%vAg$-zrZ=i{2}1zE zhwGktdK_uL5di>GQ7|t$HR;S*q?n)WUMC^_+#1R=C!W)-ux;5>PmMF8Ow?)~AW%v~ zAZBPIH@nO0>Fn33ee1k2W1o5&dL~F(rZ1GHxZ0D}5m9bdL{fgT=_j)wf5w0Zlbz1H+vx5AF8PpbNHCRP}x<&B&iLo~y^n$3LGy;__ZzuK*^ z{n^n^TJ7V;kAL>rNk)*b9tNZ@(JQ3zoY7?lWIQ#BvR3yq6P{I5KQ~3vnI>Yy?(}GS zXJwL~u67;ugfHzmeRiTLq0!=tM=!aT)9EiykEf?EPk%Xj8E<^#SAuzR>{Fh6+KUr? zCx0D)jO7he<7#RL_iRmw+;gOypVIz3QhR>N z^HZWJ-3p(KePjekMj9^?u2=_zOr+1ciP@y*lIPrHl8ZJ?&YlCqXA>TNEH{83uwZ#(X;In#T9?W ziP^K_2W0O7gTXV@@)HrXMvtD0f67P-2cFXKzLrBcw&@+ zR84B`>FPN4B0S@siO0JM)$tSfi^rp8?A?4H0EWi6A!+DHFo`x00Te%#JY5&X@d++`CKj=vk>tr=W!m8gr zNfQ6DrKf67KlL;q-3ni2_fT3@i)T1+kG5HZs66R>pG?O*ImV44>*CmWtQ(V!<;xL; zkH-!N42nSF!5)1~(i-`Mdx8|GqvI#zG49E1%#-nxM-;xEao6y>jU*U;=wbJ888j;I z9w!6r6DeIK9+i$BHM%&u3XP+%rRC*!8jQO)x<7mHA@`7bID3SAuI|z3vFveDza~#) zqrlY$to}vR(w2q%sqZ&;me6bhEj64Do0pI%RLatiXN$s5Q@^H*<+6uAH}0x zJY=XF8r|uJySv*=v?3*XFjK|xBefAwR2oqQ<`F3PYWLv5Lx!qy$haGsx_h(x?sxaQ z2cid~hoXlK%01Hd@FTGD@WT%=;_rTF(4fIXh71#ofbNDOqv`$!;s?qw@F0K94`mNh z_OqD-D4b)k(%^_Zj`9Qdi?j!#2i$|%0}r|fqX&*Ee7R-7fPn*r0IE!&ZutJY?-6PD z8SBOStAe{fx&P?G@9(``g{}0kMsas{a!-733Q^I0?%tT!(S^#a+i$;Pz(6-J8#LGr zt{Th8=q@)ry?glG?(P%}@jdQdcTaZjJ<&bc-8k9pAKiM}?ROZI8{`IOlB*jgsFFc7 z-R*``@aV$6(YM}un-v`ZS&cBg=YQ@dBx?A0CDa1qrqCpX5 z-O#Gh9^IJ@yR-A1#}@VvyZPo@s1b_q7~lpR7&yqYh!~4QlVLROuo}$bLzm~?bkohZ z+(MPvZMVDIYj+^KXrLRE4jwc(8r*qEHgrfd||>E~x&e?4W~jRz?MrJmM=`l@%_&R^3V z2!g~mwYJ-TcfGqlyWvK6qw62t6y2QM65m?A4H?|l={9nhwf^>Z?sw7k?Kj+bWB(g( z>VK2FDY-emrRml(EP+^Q&hEeNx9+#@ckX(3Lv&*bRjz+bsq7ZxA_aML^S25IH~i+> zYp=WRx4#p<+6~v=aAR^~)W0VAG~JY`VshnA{>`<&xz1e|QC)m}=?0akfVY2t$oqDo z(ssu+*Zk&McWp$81geg>A-nzt^S8}SQNDrMayz|~ii?W79sKP`{&o^v?d@{4@lxcb z$x)S`>bLlthrWD;Tam3?)wC*Fc~oKhOx&gyErEb{IL*z*o0pp{FWW75mb)ujex&)> zQ(sW>fV^rEBR9U`V@Gc_TgI0o$opgNEOk>_b$gGQBtz7WgYDi-mXR9WARc(@^@@+GMb8R#sD@~9j zEyOkV4bcSi2pnwrmPz6V}*9n0vXRHkt8i1VHW8nZj1lz53H<*EB@sYjU)c=}n~RPtDW*f-qt4 zmosNkn@_~iBJ0Bl`-z<0Dka!o^lO?)1h3fg{snPRj=_tIp$IM$cN6{oI zCl;>Flc)YE(ev4q=i}#N-0P3V;AY@x$-NHLNT&obF`CFpRL`Z8pPSruGW}&do~V2> zDwi9YJIN~itb`i;>U7d`lVaTJFQ(@HE_D0Kagm>9Ch`o4`0?IToa$&|G^sSPTjA3g zIG6G*H9Ht-eyH4B_f$mjXnZ^&1x4xEctW?rp5RKGQ_SSU*KLJyzuma#nIh%A8|`qT zzcM%4+;wxK@d?XD&X}=s*>f+t_>3sa#v$yFH_O|V=PkDljvH8_F%cj|m;hBgF2a@m z0$2JzydCo-&1u!41-Q7GT<-R_YTcHLtKANP*B`Rek$-Kf$NM-)EY6?yzy2JKOSxi;r{}k;!e|FSj|A!+Uh{9Pi8S$Ca(A z=IEiehoztTUwZhc!v2R2Il;r-@TyfD-51>-J&-);9;%9#hl<{1-fJ#%NB6gk9OcNn z``rBrzOwWFa?A%F8*jlYYs2jvJX9{Z!#k~Mn&9q9AgS~H*#q~-c*?bV&5x}Z9mAqw zDgHjr>D}=?a>nucllwAZNbkK5&v(Ch%Q&+t?rmWgm$U5fs-2u)hsRt6LZsDb zE)X75*uTR3R&$1P|2-B-@vzQ!W_R5g<1yEU;V{duj_^I@07tm^YM|Kr);R9%kc87b z6tB5`F5V~rw^9D~XaEsbg9ahMXz?-JV2y9b-;D>9@QbTf&JD^2;zw8a-axs?d(xRGjKNsO@s$JKX@I+fm2&bF z&Gb&P>+kS-ALJ@X-?^BD?jruDHt8*6Yl- zbvMMg(g)>siyM*3EWxGTdZ~q3wPgVR^#lq9?e^?q;0+;?2=5a+e+Ma<&0K z*Inm+8{t^jZn#kny7#TCh^hZgo#if1kxMOSScOV>-#FBAmW$>r-!5l4!ddp-c~!*Y zdw0WQ&d#d;$2yl0{<4h=i!R+c%8E;Wf0^ws2e`0K)T{oVbh*Y~p7ED8Tv%&zHM?ft zvoo=>ANk9*{_=poO!k)+e_87X0=|I#N4^$M znI{x3L^qefMc_#s!oB$A61WetkYo^-#-rB(72#tB}-+i&9*LgjZaA z`YWFei%Fc4W97NBSQSy~tUQxeNURmoY;jT2EzT)Y3a&gOmvSMqoNr0ZwKT5v)&S6HJ}NpY{Wy|8MhKnJ1`LVSj;xLZQ4 z280CBiPCw_D}_)9NHoBCHk*{Y_;UldX~X(bg7sXQzJ8bzYUTBlpB&FGd&H;2_@3cG5v@|l0j zmi;}6`=Hg=BuaxuiBRx?-FQQh8!9L|O9EB8BYFz81_ql1f>4g~kqBNCo{FL^Ia4?< zt7vi-F?~o&vu{830)-2(UhWlKdWhf@h@F!|d=E96Y|)7>A!C-RjkIW5vH!Ir=>7zl zP+!;TK4ESA<#C``jQNC-MmIxzoVOZP0ZOMV^^8RRX-#gX?2t@OQ|vbF?{ zm9iCM#h)J#8TJJ<#ApUB_bEV{82&TLUm#Vv!QWh6te9IHpClJPl30 zR*R4kHiBPdprA-W1X?DSmLz4hx&?-Gu~>u7p=bLY0!?K?-T;O$h1+;DM^Y{oN-F#P zinr+yEA&?A$Zt?@szDdh61v6X7t48GIHRvqmE>6>o_GJD*kLWdbD1!aM*p>_k1%*x zUk0oT>SMbLj+M+qALsWYq}h@~r!rAA#5VY}d6W?AftJqYZpz38V*f%nx`@|jl$i>^wzhi4J? z!WIeJVNq!}Hf>O~x1+s*P#c$zvb`BFRWh}=*5^&iDKcSB%^(^@Z2Qra66cf-dS=bk zjSU**cGu2+n!LrWp@c!LqCOIc(pHmld)%&CLf=11gsbVQ#v^-Ogi+f&A`sd=-q1L2 zhbTp5Mp7r0Y6ziQgQ&bu2D&|Q5!IPE8Qx$_J6$5*8T9p-z(OWIj;-ts?J2tTv8yDI zln+9?|5J30Y>Vw@@!Z+g8EbJ(vdy8DdU$u`0RDw8BjPIgWV`q{?g(Bn%W8Cr9)IQKT+g@*3CKmhM zX?|y?GAd|u-Lwwb4YavX+w=YAX3LT@cpy9Dv@hH?x3MpkjltU5t=;)bQNZqezqL4Q z@AsPv*&P?MBn=vc9FIZyE5(^L%{a0d_c z7doMDQI0vmYh$anc4}*?_NH2P0KYv@o5MW^+McLHWdrUo+LaY=9;x)^-bZ!><+Z%`a~$8E&* zEDYQmI6K=pu+}%AHpjxi_@|%tyPJ^!`%|^OR}vToes)aFkLC|imb^Sop1>_}2(b%! z0~olaiGqCJgm(=cN)xgH!_tn-746DXV%lfogL}U_(>C`%$>w0+0Jgu=ws#K_{H?_B zv|S4>tS2Nr1YE-RJEPehYS|f( zp9tXDo8R8;GqqR?-hSJyT2@dX&dj?7ZH?~}d>H#a&5OW0^uW9C(*9s+0Gpx2xJVc6 z>N|8E?Tj_y(|Y3!d&th<(_HyHR|40*4wf9;O!w*n4-M@CC%dC>e89<$;rCYi&E0{0 z$Y--0n~nl%_sTL@M{_MXq-BSc@{B`!o*ZrB7xxlhXnrIAHuh`Hi2T9D?&Y^$lIT!< zsScSb0=yEW_(Xpazip3}36TEU#*|ldn6P_!v7iB;O4sq+E61GIUe5J31NP7Zmf%Af zN~C|1A6s#ddIOx)me%&LZ^|$G5%7BkSe~~YJj4|EHtn;!@g?_C^rCwqQ|ipOL_N|| z-x;staK*pyLjaKlK>!dS1%daPSESw+ zJ;zGP|HIsS$9YxV`Tw7D?q|T7Y<9CHyJ?$^$(pviZg%tC*cBBEq6kt&Ku|=Q%Ga_M z)Kz2DB^qNiRzxHkBQ{(KAiWHAV5mc9Xfs0}VCFNQazEea>wWH>8Qgq-|9$uIQ|{cE zd(Qj3>pAcD>2ECoH+mb7;;%kJfB!*9$#n{bc&qU}qJ񤿝+$gy@av^}|s9ikX~f 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

diff --git a/public/favicon.ico b/public/favicon.ico old mode 100755 new mode 100644 index ffc053f1d340b3b759cb0c18d71f81cb1b17c4ae..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmb7^*-sNu6voHIKfouSeG*)w4;rJm#+WGjLR_LT?)#477LA&KaU&X+utXCSAsPh{ zMHFNaDuO6dS}1m*!)CRVZnULEq(ARmVxkxyypx$b_s%)rJ>U7hjG~MZ*O)Pic#czc zjaHPgilW4dTWpD);e9bFiug8iFk(cbQG&L1+H>-0xp<4_)HLjmpAqbGjEMYu88Wxg zvMCW=?0nwD%%gn#TwaZj<9SRRPo^xO=D?|c;`qyJFw9s^)6^w2O<96|@?sh$E~0M2 z0;&X7iNJXl8%N>ncwF_3e;gh%ex`N)YB~-l)4u-tYrk$PKgoyF@(C~gv^PwcjGB6#s8+3V1toC@HbTv2`rg*llV6OQp3TQY zXV7g;ME0t|fOYjAzFxhJ=V>YSElJonC(*Vc5!>2*SQ2)~TFfi9$T;ivV}wM1p9?NN zlLgnkJk;&S@s(EN%*>_ZNQ$@xkAvq>cb^hiN3gBgi#dK1rg^I{PFqS}y`Hj33$di% zC*N+~#hI2(&z*;o|A5duqIThXtwY^;0_)0Mv@TwUzp|FbxCELHoyAk|ir(A; z!b1Dr+@}OT8W{BW=+o6pEXU;xye}(>*gNSuc}eo{mFX}o-;8=Wosgk*xZfX|WS_(K z4uX0UzOuKt?mvSpbbQ+2b;C}o9Z&5k^>h}Z$PDE%s z;BYeN_R2Z<$%tEM=eU@LJFl3baD=YYsYJgIN)LoBcD%)v1nNG~-)beKZxI~d$()|7 zN3sr2K?(kXT4W#>!p z{L0s64MVHjUr~dvq)PVHm7OOv$wK2VJt4g9uXy)Y?(aAnH_fw}W|}TNw;#y!G*ABs PhJFu~?<4;Q|GWMPQ(8Nn diff --git a/public/images/ui-icons_222222_256x240.png b/public/images/ui-icons_222222_256x240.png deleted file mode 100755 index ee039dc096a38a3753f92519546eee94bcfbeffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/public/images/ui-icons_454545_256x240.png b/public/images/ui-icons_454545_256x240.png deleted file mode 100755 index 7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 k*Kv;w;*%(i9W@fAqs5i2wiq diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..a1d5099 --- /dev/null +++ b/public/index.html @@ -0,0 +1,241 @@ + + + + Ruby on Rails: Welcome aboard + + + + + + + diff --git a/public/javascripts/application.js b/public/javascripts/application.js deleted file mode 100755 index fe45776..0000000 --- a/public/javascripts/application.js +++ /dev/null @@ -1,2 +0,0 @@ -// Place your application-specific JavaScript functions and classes here -// This file is automatically included by javascript_include_tag :defaults diff --git a/public/javascripts/controls.js b/public/javascripts/controls.js deleted file mode 100755 index 7392fb6..0000000 --- a/public/javascripts/controls.js +++ /dev/null @@ -1,965 +0,0 @@ -// script.aculo.us controls.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 - -// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005-2009 Ivan Krstic (http://blogs.law.harvard.edu/ivan) -// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com) -// Contributors: -// Richard Livsey -// Rahul Bhargava -// Rob Wills -// -// script.aculo.us is freely distributable under the terms of an MIT-style license. -// For details, see the script.aculo.us web site: http://script.aculo.us/ - -// Autocompleter.Base handles all the autocompletion functionality -// that's independent of the data source for autocompletion. This -// includes drawing the autocompletion menu, observing keyboard -// and mouse events, and similar. -// -// Specific autocompleters need to provide, at the very least, -// a getUpdatedChoices function that will be invoked every time -// the text inside the monitored textbox changes. This method -// should get the text for which to provide autocompletion by -// invoking this.getToken(), NOT by directly accessing -// this.element.value. This is to allow incremental tokenized -// autocompletion. Specific auto-completion logic (AJAX, etc) -// belongs in getUpdatedChoices. -// -// Tokenized incremental autocompletion is enabled automatically -// when an autocompleter is instantiated with the 'tokens' option -// in the options parameter, e.g.: -// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' }); -// will incrementally autocomplete with a comma as the token. -// Additionally, ',' in the above example can be replaced with -// a token array, e.g. { tokens: [',', '\n'] } which -// enables autocompletion on multiple tokens. This is most -// useful when one of the tokens is \n (a newline), as it -// allows smart autocompletion after linebreaks. - -if(typeof Effect == 'undefined') - throw("controls.js requires including script.aculo.us' effects.js library"); - -var Autocompleter = { }; -Autocompleter.Base = Class.create({ - baseInitialize: function(element, update, options) { - element = $(element); - this.element = element; - this.update = $(update); - this.hasFocus = false; - this.changed = false; - this.active = false; - this.index = 0; - this.entryCount = 0; - this.oldElementValue = this.element.value; - - if(this.setOptions) - this.setOptions(options); - else - this.options = options || { }; - - this.options.paramName = this.options.paramName || this.element.name; - this.options.tokens = this.options.tokens || []; - this.options.frequency = this.options.frequency || 0.4; - this.options.minChars = this.options.minChars || 1; - this.options.onShow = this.options.onShow || - function(element, update){ - if(!update.style.position || update.style.position=='absolute') { - update.style.position = 'absolute'; - Position.clone(element, update, { - setHeight: false, - offsetTop: element.offsetHeight - }); - } - Effect.Appear(update,{duration:0.15}); - }; - this.options.onHide = this.options.onHide || - function(element, update){ new Effect.Fade(update,{duration:0.15}) }; - - if(typeof(this.options.tokens) == 'string') - this.options.tokens = new Array(this.options.tokens); - // Force carriage returns as token delimiters anyway - if (!this.options.tokens.include('\n')) - this.options.tokens.push('\n'); - - this.observer = null; - - this.element.setAttribute('autocomplete','off'); - - Element.hide(this.update); - - Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this)); - Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this)); - }, - - show: function() { - if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update); - if(!this.iefix && - (Prototype.Browser.IE) && - (Element.getStyle(this.update, 'position')=='absolute')) { - new Insertion.After(this.update, - ''); - this.iefix = $(this.update.id+'_iefix'); - } - if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50); - }, - - fixIEOverlapping: function() { - Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)}); - this.iefix.style.zIndex = 1; - this.update.style.zIndex = 2; - Element.show(this.iefix); - }, - - hide: function() { - this.stopIndicator(); - if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update); - if(this.iefix) Element.hide(this.iefix); - }, - - startIndicator: function() { - if(this.options.indicator) Element.show(this.options.indicator); - }, - - stopIndicator: function() { - if(this.options.indicator) Element.hide(this.options.indicator); - }, - - onKeyPress: function(event) { - if(this.active) - switch(event.keyCode) { - case Event.KEY_TAB: - case Event.KEY_RETURN: - this.selectEntry(); - Event.stop(event); - case Event.KEY_ESC: - this.hide(); - this.active = false; - Event.stop(event); - return; - case Event.KEY_LEFT: - case Event.KEY_RIGHT: - return; - case Event.KEY_UP: - this.markPrevious(); - this.render(); - Event.stop(event); - return; - case Event.KEY_DOWN: - this.markNext(); - this.render(); - Event.stop(event); - return; - } - else - if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || - (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return; - - this.changed = true; - this.hasFocus = true; - - if(this.observer) clearTimeout(this.observer); - this.observer = - setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); - }, - - activate: function() { - this.changed = false; - this.hasFocus = true; - this.getUpdatedChoices(); - }, - - onHover: function(event) { - var element = Event.findElement(event, 'LI'); - if(this.index != element.autocompleteIndex) - { - this.index = element.autocompleteIndex; - this.render(); - } - Event.stop(event); - }, - - onClick: function(event) { - var element = Event.findElement(event, 'LI'); - this.index = element.autocompleteIndex; - this.selectEntry(); - this.hide(); - }, - - onBlur: function(event) { - // needed to make click events working - setTimeout(this.hide.bind(this), 250); - this.hasFocus = false; - this.active = false; - }, - - render: function() { - if(this.entryCount > 0) { - for (var i = 0; i < this.entryCount; i++) - this.index==i ? - Element.addClassName(this.getEntry(i),"selected") : - Element.removeClassName(this.getEntry(i),"selected"); - if(this.hasFocus) { - this.show(); - this.active = true; - } - } else { - this.active = false; - this.hide(); - } - }, - - markPrevious: function() { - if(this.index > 0) this.index--; - else this.index = this.entryCount-1; - this.getEntry(this.index).scrollIntoView(true); - }, - - markNext: function() { - if(this.index < this.entryCount-1) this.index++; - else this.index = 0; - this.getEntry(this.index).scrollIntoView(false); - }, - - getEntry: function(index) { - return this.update.firstChild.childNodes[index]; - }, - - getCurrentEntry: function() { - return this.getEntry(this.index); - }, - - selectEntry: function() { - this.active = false; - this.updateElement(this.getCurrentEntry()); - }, - - updateElement: function(selectedElement) { - if (this.options.updateElement) { - this.options.updateElement(selectedElement); - return; - } - var value = ''; - if (this.options.select) { - var nodes = $(selectedElement).select('.' + this.options.select) || []; - if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select); - } else - value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal'); - - var bounds = this.getTokenBounds(); - if (bounds[0] != -1) { - var newValue = this.element.value.substr(0, bounds[0]); - var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/); - if (whitespace) - newValue += whitespace[0]; - this.element.value = newValue + value + this.element.value.substr(bounds[1]); - } else { - this.element.value = value; - } - this.oldElementValue = this.element.value; - this.element.focus(); - - if (this.options.afterUpdateElement) - this.options.afterUpdateElement(this.element, selectedElement); - }, - - updateChoices: function(choices) { - if(!this.changed && this.hasFocus) { - this.update.innerHTML = choices; - Element.cleanWhitespace(this.update); - Element.cleanWhitespace(this.update.down()); - - if(this.update.firstChild && this.update.down().childNodes) { - this.entryCount = - this.update.down().childNodes.length; - for (var i = 0; i < this.entryCount; i++) { - var entry = this.getEntry(i); - entry.autocompleteIndex = i; - this.addObservers(entry); - } - } else { - this.entryCount = 0; - } - - this.stopIndicator(); - this.index = 0; - - if(this.entryCount==1 && this.options.autoSelect) { - this.selectEntry(); - this.hide(); - } else { - this.render(); - } - } - }, - - addObservers: function(element) { - Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this)); - Event.observe(element, "click", this.onClick.bindAsEventListener(this)); - }, - - onObserverEvent: function() { - this.changed = false; - this.tokenBounds = null; - if(this.getToken().length>=this.options.minChars) { - this.getUpdatedChoices(); - } else { - this.active = false; - this.hide(); - } - this.oldElementValue = this.element.value; - }, - - getToken: function() { - var bounds = this.getTokenBounds(); - return this.element.value.substring(bounds[0], bounds[1]).strip(); - }, - - getTokenBounds: function() { - if (null != this.tokenBounds) return this.tokenBounds; - var value = this.element.value; - if (value.strip().empty()) return [-1, 0]; - var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue); - var offset = (diff == this.oldElementValue.length ? 1 : 0); - var prevTokenPos = -1, nextTokenPos = value.length; - var tp; - for (var index = 0, l = this.options.tokens.length; index < l; ++index) { - tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1); - if (tp > prevTokenPos) prevTokenPos = tp; - tp = value.indexOf(this.options.tokens[index], diff + offset); - if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp; - } - return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]); - } -}); - -Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) { - var boundary = Math.min(newS.length, oldS.length); - for (var index = 0; index < boundary; ++index) - if (newS[index] != oldS[index]) - return index; - return boundary; -}; - -Ajax.Autocompleter = Class.create(Autocompleter.Base, { - initialize: function(element, update, url, options) { - this.baseInitialize(element, update, options); - this.options.asynchronous = true; - this.options.onComplete = this.onComplete.bind(this); - this.options.defaultParams = this.options.parameters || null; - this.url = url; - }, - - getUpdatedChoices: function() { - this.startIndicator(); - - var entry = encodeURIComponent(this.options.paramName) + '=' + - encodeURIComponent(this.getToken()); - - this.options.parameters = this.options.callback ? - this.options.callback(this.element, entry) : entry; - - if(this.options.defaultParams) - this.options.parameters += '&' + this.options.defaultParams; - - new Ajax.Request(this.url, this.options); - }, - - onComplete: function(request) { - this.updateChoices(request.responseText); - } -}); - -// The local array autocompleter. Used when you'd prefer to -// inject an array of autocompletion options into the page, rather -// than sending out Ajax queries, which can be quite slow sometimes. -// -// The constructor takes four parameters. The first two are, as usual, -// the id of the monitored textbox, and id of the autocompletion menu. -// The third is the array you want to autocomplete from, and the fourth -// is the options block. -// -// Extra local autocompletion options: -// - choices - How many autocompletion choices to offer -// -// - partialSearch - If false, the autocompleter will match entered -// text only at the beginning of strings in the -// autocomplete array. Defaults to true, which will -// match text at the beginning of any *word* in the -// strings in the autocomplete array. If you want to -// search anywhere in the string, additionally set -// the option fullSearch to true (default: off). -// -// - fullSsearch - Search anywhere in autocomplete array strings. -// -// - partialChars - How many characters to enter before triggering -// a partial match (unlike minChars, which defines -// how many characters are required to do any match -// at all). Defaults to 2. -// -// - ignoreCase - Whether to ignore case when autocompleting. -// Defaults to true. -// -// It's possible to pass in a custom function as the 'selector' -// option, if you prefer to write your own autocompletion logic. -// In that case, the other options above will not apply unless -// you support them. - -Autocompleter.Local = Class.create(Autocompleter.Base, { - initialize: function(element, update, array, options) { - this.baseInitialize(element, update, options); - this.options.array = array; - }, - - getUpdatedChoices: function() { - this.updateChoices(this.options.selector(this)); - }, - - setOptions: function(options) { - this.options = Object.extend({ - choices: 10, - partialSearch: true, - partialChars: 2, - ignoreCase: true, - fullSearch: false, - selector: function(instance) { - var ret = []; // Beginning matches - var partial = []; // Inside matches - var entry = instance.getToken(); - var count = 0; - - for (var i = 0; i < instance.options.array.length && - ret.length < instance.options.choices ; i++) { - - var elem = instance.options.array[i]; - var foundPos = instance.options.ignoreCase ? - elem.toLowerCase().indexOf(entry.toLowerCase()) : - elem.indexOf(entry); - - while (foundPos != -1) { - if (foundPos == 0 && elem.length != entry.length) { - ret.push("
  • " + elem.substr(0, entry.length) + "" + - elem.substr(entry.length) + "
  • "); - break; - } else if (entry.length >= instance.options.partialChars && - instance.options.partialSearch && foundPos != -1) { - if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) { - partial.push("
  • " + elem.substr(0, foundPos) + "" + - elem.substr(foundPos, entry.length) + "" + elem.substr( - foundPos + entry.length) + "
  • "); - break; - } - } - - foundPos = instance.options.ignoreCase ? - elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : - elem.indexOf(entry, foundPos + 1); - - } - } - if (partial.length) - ret = ret.concat(partial.slice(0, instance.options.choices - ret.length)); - return "
      " + ret.join('') + "
    "; - } - }, options || { }); - } -}); - -// AJAX in-place editor and collection editor -// Full rewrite by Christophe Porteneuve (April 2007). - -// Use this if you notice weird scrolling problems on some browsers, -// the DOM might be a bit confused when this gets called so do this -// waits 1 ms (with setTimeout) until it does the activation -Field.scrollFreeActivate = function(field) { - setTimeout(function() { - Field.activate(field); - }, 1); -}; - -Ajax.InPlaceEditor = Class.create({ - initialize: function(element, url, options) { - this.url = url; - this.element = element = $(element); - this.prepareOptions(); - this._controls = { }; - arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!! - Object.extend(this.options, options || { }); - if (!this.options.formId && this.element.id) { - this.options.formId = this.element.id + '-inplaceeditor'; - if ($(this.options.formId)) - this.options.formId = ''; - } - if (this.options.externalControl) - this.options.externalControl = $(this.options.externalControl); - if (!this.options.externalControl) - this.options.externalControlOnly = false; - this._originalBackground = this.element.getStyle('background-color') || 'transparent'; - this.element.title = this.options.clickToEditText; - this._boundCancelHandler = this.handleFormCancellation.bind(this); - this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this); - this._boundFailureHandler = this.handleAJAXFailure.bind(this); - this._boundSubmitHandler = this.handleFormSubmission.bind(this); - this._boundWrapperHandler = this.wrapUp.bind(this); - this.registerListeners(); - }, - checkForEscapeOrReturn: function(e) { - if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return; - if (Event.KEY_ESC == e.keyCode) - this.handleFormCancellation(e); - else if (Event.KEY_RETURN == e.keyCode) - this.handleFormSubmission(e); - }, - createControl: function(mode, handler, extraClasses) { - var control = this.options[mode + 'Control']; - var text = this.options[mode + 'Text']; - if ('button' == control) { - var btn = document.createElement('input'); - btn.type = 'submit'; - btn.value = text; - btn.className = 'editor_' + mode + '_button'; - if ('cancel' == mode) - btn.onclick = this._boundCancelHandler; - this._form.appendChild(btn); - this._controls[mode] = btn; - } else if ('link' == control) { - var link = document.createElement('a'); - link.href = '#'; - link.appendChild(document.createTextNode(text)); - link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler; - link.className = 'editor_' + mode + '_link'; - if (extraClasses) - link.className += ' ' + extraClasses; - this._form.appendChild(link); - this._controls[mode] = link; - } - }, - createEditField: function() { - var text = (this.options.loadTextURL ? this.options.loadingText : this.getText()); - var fld; - if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) { - fld = document.createElement('input'); - fld.type = 'text'; - var size = this.options.size || this.options.cols || 0; - if (0 < size) fld.size = size; - } else { - fld = document.createElement('textarea'); - fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows); - fld.cols = this.options.cols || 40; - } - fld.name = this.options.paramName; - fld.value = text; // No HTML breaks conversion anymore - fld.className = 'editor_field'; - if (this.options.submitOnBlur) - fld.onblur = this._boundSubmitHandler; - this._controls.editor = fld; - if (this.options.loadTextURL) - this.loadExternalText(); - this._form.appendChild(this._controls.editor); - }, - createForm: function() { - var ipe = this; - function addText(mode, condition) { - var text = ipe.options['text' + mode + 'Controls']; - if (!text || condition === false) return; - ipe._form.appendChild(document.createTextNode(text)); - }; - this._form = $(document.createElement('form')); - this._form.id = this.options.formId; - this._form.addClassName(this.options.formClassName); - this._form.onsubmit = this._boundSubmitHandler; - this.createEditField(); - if ('textarea' == this._controls.editor.tagName.toLowerCase()) - this._form.appendChild(document.createElement('br')); - if (this.options.onFormCustomization) - this.options.onFormCustomization(this, this._form); - addText('Before', this.options.okControl || this.options.cancelControl); - this.createControl('ok', this._boundSubmitHandler); - addText('Between', this.options.okControl && this.options.cancelControl); - this.createControl('cancel', this._boundCancelHandler, 'editor_cancel'); - addText('After', this.options.okControl || this.options.cancelControl); - }, - destroy: function() { - if (this._oldInnerHTML) - this.element.innerHTML = this._oldInnerHTML; - this.leaveEditMode(); - this.unregisterListeners(); - }, - enterEditMode: function(e) { - if (this._saving || this._editing) return; - this._editing = true; - this.triggerCallback('onEnterEditMode'); - if (this.options.externalControl) - this.options.externalControl.hide(); - this.element.hide(); - this.createForm(); - this.element.parentNode.insertBefore(this._form, this.element); - if (!this.options.loadTextURL) - this.postProcessEditField(); - if (e) Event.stop(e); - }, - enterHover: function(e) { - if (this.options.hoverClassName) - this.element.addClassName(this.options.hoverClassName); - if (this._saving) return; - this.triggerCallback('onEnterHover'); - }, - getText: function() { - return this.element.innerHTML.unescapeHTML(); - }, - handleAJAXFailure: function(transport) { - this.triggerCallback('onFailure', transport); - if (this._oldInnerHTML) { - this.element.innerHTML = this._oldInnerHTML; - this._oldInnerHTML = null; - } - }, - handleFormCancellation: function(e) { - this.wrapUp(); - if (e) Event.stop(e); - }, - handleFormSubmission: function(e) { - var form = this._form; - var value = $F(this._controls.editor); - this.prepareSubmission(); - var params = this.options.callback(form, value) || ''; - if (Object.isString(params)) - params = params.toQueryParams(); - params.editorId = this.element.id; - if (this.options.htmlResponse) { - var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions); - Object.extend(options, { - parameters: params, - onComplete: this._boundWrapperHandler, - onFailure: this._boundFailureHandler - }); - new Ajax.Updater({ success: this.element }, this.url, options); - } else { - var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); - Object.extend(options, { - parameters: params, - onComplete: this._boundWrapperHandler, - onFailure: this._boundFailureHandler - }); - new Ajax.Request(this.url, options); - } - if (e) Event.stop(e); - }, - leaveEditMode: function() { - this.element.removeClassName(this.options.savingClassName); - this.removeForm(); - this.leaveHover(); - this.element.style.backgroundColor = this._originalBackground; - this.element.show(); - if (this.options.externalControl) - this.options.externalControl.show(); - this._saving = false; - this._editing = false; - this._oldInnerHTML = null; - this.triggerCallback('onLeaveEditMode'); - }, - leaveHover: function(e) { - if (this.options.hoverClassName) - this.element.removeClassName(this.options.hoverClassName); - if (this._saving) return; - this.triggerCallback('onLeaveHover'); - }, - loadExternalText: function() { - this._form.addClassName(this.options.loadingClassName); - this._controls.editor.disabled = true; - var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); - Object.extend(options, { - parameters: 'editorId=' + encodeURIComponent(this.element.id), - onComplete: Prototype.emptyFunction, - onSuccess: function(transport) { - this._form.removeClassName(this.options.loadingClassName); - var text = transport.responseText; - if (this.options.stripLoadedTextTags) - text = text.stripTags(); - this._controls.editor.value = text; - this._controls.editor.disabled = false; - this.postProcessEditField(); - }.bind(this), - onFailure: this._boundFailureHandler - }); - new Ajax.Request(this.options.loadTextURL, options); - }, - postProcessEditField: function() { - var fpc = this.options.fieldPostCreation; - if (fpc) - $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate'](); - }, - prepareOptions: function() { - this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions); - Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks); - [this._extraDefaultOptions].flatten().compact().each(function(defs) { - Object.extend(this.options, defs); - }.bind(this)); - }, - prepareSubmission: function() { - this._saving = true; - this.removeForm(); - this.leaveHover(); - this.showSaving(); - }, - registerListeners: function() { - this._listeners = { }; - var listener; - $H(Ajax.InPlaceEditor.Listeners).each(function(pair) { - listener = this[pair.value].bind(this); - this._listeners[pair.key] = listener; - if (!this.options.externalControlOnly) - this.element.observe(pair.key, listener); - if (this.options.externalControl) - this.options.externalControl.observe(pair.key, listener); - }.bind(this)); - }, - removeForm: function() { - if (!this._form) return; - this._form.remove(); - this._form = null; - this._controls = { }; - }, - showSaving: function() { - this._oldInnerHTML = this.element.innerHTML; - this.element.innerHTML = this.options.savingText; - this.element.addClassName(this.options.savingClassName); - this.element.style.backgroundColor = this._originalBackground; - this.element.show(); - }, - triggerCallback: function(cbName, arg) { - if ('function' == typeof this.options[cbName]) { - this.options[cbName](this, arg); - } - }, - unregisterListeners: function() { - $H(this._listeners).each(function(pair) { - if (!this.options.externalControlOnly) - this.element.stopObserving(pair.key, pair.value); - if (this.options.externalControl) - this.options.externalControl.stopObserving(pair.key, pair.value); - }.bind(this)); - }, - wrapUp: function(transport) { - this.leaveEditMode(); - // Can't use triggerCallback due to backward compatibility: requires - // binding + direct element - this._boundComplete(transport, this.element); - } -}); - -Object.extend(Ajax.InPlaceEditor.prototype, { - dispose: Ajax.InPlaceEditor.prototype.destroy -}); - -Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, { - initialize: function($super, element, url, options) { - this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions; - $super(element, url, options); - }, - - createEditField: function() { - var list = document.createElement('select'); - list.name = this.options.paramName; - list.size = 1; - this._controls.editor = list; - this._collection = this.options.collection || []; - if (this.options.loadCollectionURL) - this.loadCollection(); - else - this.checkForExternalText(); - this._form.appendChild(this._controls.editor); - }, - - loadCollection: function() { - this._form.addClassName(this.options.loadingClassName); - this.showLoadingText(this.options.loadingCollectionText); - var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); - Object.extend(options, { - parameters: 'editorId=' + encodeURIComponent(this.element.id), - onComplete: Prototype.emptyFunction, - onSuccess: function(transport) { - var js = transport.responseText.strip(); - if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check - throw('Server returned an invalid collection representation.'); - this._collection = eval(js); - this.checkForExternalText(); - }.bind(this), - onFailure: this.onFailure - }); - new Ajax.Request(this.options.loadCollectionURL, options); - }, - - showLoadingText: function(text) { - this._controls.editor.disabled = true; - var tempOption = this._controls.editor.firstChild; - if (!tempOption) { - tempOption = document.createElement('option'); - tempOption.value = ''; - this._controls.editor.appendChild(tempOption); - tempOption.selected = true; - } - tempOption.update((text || '').stripScripts().stripTags()); - }, - - checkForExternalText: function() { - this._text = this.getText(); - if (this.options.loadTextURL) - this.loadExternalText(); - else - this.buildOptionList(); - }, - - loadExternalText: function() { - this.showLoadingText(this.options.loadingText); - var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); - Object.extend(options, { - parameters: 'editorId=' + encodeURIComponent(this.element.id), - onComplete: Prototype.emptyFunction, - onSuccess: function(transport) { - this._text = transport.responseText.strip(); - this.buildOptionList(); - }.bind(this), - onFailure: this.onFailure - }); - new Ajax.Request(this.options.loadTextURL, options); - }, - - buildOptionList: function() { - this._form.removeClassName(this.options.loadingClassName); - this._collection = this._collection.map(function(entry) { - return 2 === entry.length ? entry : [entry, entry].flatten(); - }); - var marker = ('value' in this.options) ? this.options.value : this._text; - var textFound = this._collection.any(function(entry) { - return entry[0] == marker; - }.bind(this)); - this._controls.editor.update(''); - var option; - this._collection.each(function(entry, index) { - option = document.createElement('option'); - option.value = entry[0]; - option.selected = textFound ? entry[0] == marker : 0 == index; - option.appendChild(document.createTextNode(entry[1])); - this._controls.editor.appendChild(option); - }.bind(this)); - this._controls.editor.disabled = false; - Field.scrollFreeActivate(this._controls.editor); - } -}); - -//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! **** -//**** This only exists for a while, in order to let **** -//**** users adapt to the new API. Read up on the new **** -//**** API and convert your code to it ASAP! **** - -Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) { - if (!options) return; - function fallback(name, expr) { - if (name in options || expr === undefined) return; - options[name] = expr; - }; - fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' : - options.cancelLink == options.cancelButton == false ? false : undefined))); - fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' : - options.okLink == options.okButton == false ? false : undefined))); - fallback('highlightColor', options.highlightcolor); - fallback('highlightEndColor', options.highlightendcolor); -}; - -Object.extend(Ajax.InPlaceEditor, { - DefaultOptions: { - ajaxOptions: { }, - autoRows: 3, // Use when multi-line w/ rows == 1 - cancelControl: 'link', // 'link'|'button'|false - cancelText: 'cancel', - clickToEditText: 'Click to edit', - externalControl: null, // id|elt - externalControlOnly: false, - fieldPostCreation: 'activate', // 'activate'|'focus'|false - formClassName: 'inplaceeditor-form', - formId: null, // id|elt - highlightColor: '#ffff99', - highlightEndColor: '#ffffff', - hoverClassName: '', - htmlResponse: true, - loadingClassName: 'inplaceeditor-loading', - loadingText: 'Loading...', - okControl: 'button', // 'link'|'button'|false - okText: 'ok', - paramName: 'value', - rows: 1, // If 1 and multi-line, uses autoRows - savingClassName: 'inplaceeditor-saving', - savingText: 'Saving...', - size: 0, - stripLoadedTextTags: false, - submitOnBlur: false, - textAfterControls: '', - textBeforeControls: '', - textBetweenControls: '' - }, - DefaultCallbacks: { - callback: function(form) { - return Form.serialize(form); - }, - onComplete: function(transport, element) { - // For backward compatibility, this one is bound to the IPE, and passes - // the element directly. It was too often customized, so we don't break it. - new Effect.Highlight(element, { - startcolor: this.options.highlightColor, keepBackgroundImage: true }); - }, - onEnterEditMode: null, - onEnterHover: function(ipe) { - ipe.element.style.backgroundColor = ipe.options.highlightColor; - if (ipe._effect) - ipe._effect.cancel(); - }, - onFailure: function(transport, ipe) { - alert('Error communication with the server: ' + transport.responseText.stripTags()); - }, - onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls. - onLeaveEditMode: null, - onLeaveHover: function(ipe) { - ipe._effect = new Effect.Highlight(ipe.element, { - startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor, - restorecolor: ipe._originalBackground, keepBackgroundImage: true - }); - } - }, - Listeners: { - click: 'enterEditMode', - keydown: 'checkForEscapeOrReturn', - mouseover: 'enterHover', - mouseout: 'leaveHover' - } -}); - -Ajax.InPlaceCollectionEditor.DefaultOptions = { - loadingCollectionText: 'Loading options...' -}; - -// Delayed observer, like Form.Element.Observer, -// but waits for delay after last key input -// Ideal for live-search fields - -Form.Element.DelayedObserver = Class.create({ - initialize: function(element, delay, callback) { - this.delay = delay || 0.5; - this.element = $(element); - this.callback = callback; - this.timer = null; - this.lastValue = $F(this.element); - Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); - }, - delayedListener: function(event) { - if(this.lastValue == $F(this.element)) return; - if(this.timer) clearTimeout(this.timer); - this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000); - this.lastValue = $F(this.element); - }, - onTimerEvent: function() { - this.timer = null; - this.callback(this.element, $F(this.element)); - } -}); \ No newline at end of file diff --git a/public/javascripts/dragdrop.js b/public/javascripts/dragdrop.js deleted file mode 100755 index 15c6dbc..0000000 --- a/public/javascripts/dragdrop.js +++ /dev/null @@ -1,974 +0,0 @@ -// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 - -// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// -// script.aculo.us is freely distributable under the terms of an MIT-style license. -// For details, see the script.aculo.us web site: http://script.aculo.us/ - -if(Object.isUndefined(Effect)) - throw("dragdrop.js requires including script.aculo.us' effects.js library"); - -var Droppables = { - drops: [], - - remove: function(element) { - this.drops = this.drops.reject(function(d) { return d.element==$(element) }); - }, - - add: function(element) { - element = $(element); - var options = Object.extend({ - greedy: true, - hoverclass: null, - tree: false - }, arguments[1] || { }); - - // cache containers - if(options.containment) { - options._containers = []; - var containment = options.containment; - if(Object.isArray(containment)) { - containment.each( function(c) { options._containers.push($(c)) }); - } else { - options._containers.push($(containment)); - } - } - - if(options.accept) options.accept = [options.accept].flatten(); - - Element.makePositioned(element); // fix IE - options.element = element; - - this.drops.push(options); - }, - - findDeepestChild: function(drops) { - deepest = drops[0]; - - for (i = 1; i < drops.length; ++i) - if (Element.isParent(drops[i].element, deepest.element)) - deepest = drops[i]; - - return deepest; - }, - - isContained: function(element, drop) { - var containmentNode; - if(drop.tree) { - containmentNode = element.treeNode; - } else { - containmentNode = element.parentNode; - } - return drop._containers.detect(function(c) { return containmentNode == c }); - }, - - isAffected: function(point, element, drop) { - return ( - (drop.element!=element) && - ((!drop._containers) || - this.isContained(element, drop)) && - ((!drop.accept) || - (Element.classNames(element).detect( - function(v) { return drop.accept.include(v) } ) )) && - Position.within(drop.element, point[0], point[1]) ); - }, - - deactivate: function(drop) { - if(drop.hoverclass) - Element.removeClassName(drop.element, drop.hoverclass); - this.last_active = null; - }, - - activate: function(drop) { - if(drop.hoverclass) - Element.addClassName(drop.element, drop.hoverclass); - this.last_active = drop; - }, - - show: function(point, element) { - if(!this.drops.length) return; - var drop, affected = []; - - this.drops.each( function(drop) { - if(Droppables.isAffected(point, element, drop)) - affected.push(drop); - }); - - if(affected.length>0) - drop = Droppables.findDeepestChild(affected); - - if(this.last_active && this.last_active != drop) this.deactivate(this.last_active); - if (drop) { - Position.within(drop.element, point[0], point[1]); - if(drop.onHover) - drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); - - if (drop != this.last_active) Droppables.activate(drop); - } - }, - - fire: function(event, element) { - if(!this.last_active) return; - Position.prepare(); - - if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) - if (this.last_active.onDrop) { - this.last_active.onDrop(element, this.last_active.element, event); - return true; - } - }, - - reset: function() { - if(this.last_active) - this.deactivate(this.last_active); - } -}; - -var Draggables = { - drags: [], - observers: [], - - register: function(draggable) { - if(this.drags.length == 0) { - this.eventMouseUp = this.endDrag.bindAsEventListener(this); - this.eventMouseMove = this.updateDrag.bindAsEventListener(this); - this.eventKeypress = this.keyPress.bindAsEventListener(this); - - Event.observe(document, "mouseup", this.eventMouseUp); - Event.observe(document, "mousemove", this.eventMouseMove); - Event.observe(document, "keypress", this.eventKeypress); - } - this.drags.push(draggable); - }, - - unregister: function(draggable) { - this.drags = this.drags.reject(function(d) { return d==draggable }); - if(this.drags.length == 0) { - Event.stopObserving(document, "mouseup", this.eventMouseUp); - Event.stopObserving(document, "mousemove", this.eventMouseMove); - Event.stopObserving(document, "keypress", this.eventKeypress); - } - }, - - activate: function(draggable) { - if(draggable.options.delay) { - this._timeout = setTimeout(function() { - Draggables._timeout = null; - window.focus(); - Draggables.activeDraggable = draggable; - }.bind(this), draggable.options.delay); - } else { - window.focus(); // allows keypress events if window isn't currently focused, fails for Safari - this.activeDraggable = draggable; - } - }, - - deactivate: function() { - this.activeDraggable = null; - }, - - updateDrag: function(event) { - if(!this.activeDraggable) return; - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - // Mozilla-based browsers fire successive mousemove events with - // the same coordinates, prevent needless redrawing (moz bug?) - if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; - this._lastPointer = pointer; - - this.activeDraggable.updateDrag(event, pointer); - }, - - endDrag: function(event) { - if(this._timeout) { - clearTimeout(this._timeout); - this._timeout = null; - } - if(!this.activeDraggable) return; - this._lastPointer = null; - this.activeDraggable.endDrag(event); - this.activeDraggable = null; - }, - - keyPress: function(event) { - if(this.activeDraggable) - this.activeDraggable.keyPress(event); - }, - - addObserver: function(observer) { - this.observers.push(observer); - this._cacheObserverCallbacks(); - }, - - removeObserver: function(element) { // element instead of observer fixes mem leaks - this.observers = this.observers.reject( function(o) { return o.element==element }); - this._cacheObserverCallbacks(); - }, - - notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' - if(this[eventName+'Count'] > 0) - this.observers.each( function(o) { - if(o[eventName]) o[eventName](eventName, draggable, event); - }); - if(draggable.options[eventName]) draggable.options[eventName](draggable, event); - }, - - _cacheObserverCallbacks: function() { - ['onStart','onEnd','onDrag'].each( function(eventName) { - Draggables[eventName+'Count'] = Draggables.observers.select( - function(o) { return o[eventName]; } - ).length; - }); - } -}; - -/*--------------------------------------------------------------------------*/ - -var Draggable = Class.create({ - initialize: function(element) { - var defaults = { - handle: false, - reverteffect: function(element, top_offset, left_offset) { - var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; - new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, - queue: {scope:'_draggable', position:'end'} - }); - }, - endeffect: function(element) { - var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0; - new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, - queue: {scope:'_draggable', position:'end'}, - afterFinish: function(){ - Draggable._dragging[element] = false - } - }); - }, - zindex: 1000, - revert: false, - quiet: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] } - delay: 0 - }; - - if(!arguments[1] || Object.isUndefined(arguments[1].endeffect)) - Object.extend(defaults, { - starteffect: function(element) { - element._opacity = Element.getOpacity(element); - Draggable._dragging[element] = true; - new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); - } - }); - - var options = Object.extend(defaults, arguments[1] || { }); - - this.element = $(element); - - if(options.handle && Object.isString(options.handle)) - this.handle = this.element.down('.'+options.handle, 0); - - if(!this.handle) this.handle = $(options.handle); - if(!this.handle) this.handle = this.element; - - if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { - options.scroll = $(options.scroll); - this._isScrollChild = Element.childOf(this.element, options.scroll); - } - - Element.makePositioned(this.element); // fix IE - - this.options = options; - this.dragging = false; - - this.eventMouseDown = this.initDrag.bindAsEventListener(this); - Event.observe(this.handle, "mousedown", this.eventMouseDown); - - Draggables.register(this); - }, - - destroy: function() { - Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); - Draggables.unregister(this); - }, - - currentDelta: function() { - return([ - parseInt(Element.getStyle(this.element,'left') || '0'), - parseInt(Element.getStyle(this.element,'top') || '0')]); - }, - - initDrag: function(event) { - if(!Object.isUndefined(Draggable._dragging[this.element]) && - Draggable._dragging[this.element]) return; - if(Event.isLeftClick(event)) { - // abort on form elements, fixes a Firefox issue - var src = Event.element(event); - if((tag_name = src.tagName.toUpperCase()) && ( - tag_name=='INPUT' || - tag_name=='SELECT' || - tag_name=='OPTION' || - tag_name=='BUTTON' || - tag_name=='TEXTAREA')) return; - - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - var pos = this.element.cumulativeOffset(); - this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); - - Draggables.activate(this); - Event.stop(event); - } - }, - - startDrag: function(event) { - this.dragging = true; - if(!this.delta) - this.delta = this.currentDelta(); - - if(this.options.zindex) { - this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); - this.element.style.zIndex = this.options.zindex; - } - - if(this.options.ghosting) { - this._clone = this.element.cloneNode(true); - this._originallyAbsolute = (this.element.getStyle('position') == 'absolute'); - if (!this._originallyAbsolute) - Position.absolutize(this.element); - this.element.parentNode.insertBefore(this._clone, this.element); - } - - if(this.options.scroll) { - if (this.options.scroll == window) { - var where = this._getWindowScroll(this.options.scroll); - this.originalScrollLeft = where.left; - this.originalScrollTop = where.top; - } else { - this.originalScrollLeft = this.options.scroll.scrollLeft; - this.originalScrollTop = this.options.scroll.scrollTop; - } - } - - Draggables.notify('onStart', this, event); - - if(this.options.starteffect) this.options.starteffect(this.element); - }, - - updateDrag: function(event, pointer) { - if(!this.dragging) this.startDrag(event); - - if(!this.options.quiet){ - Position.prepare(); - Droppables.show(pointer, this.element); - } - - Draggables.notify('onDrag', this, event); - - this.draw(pointer); - if(this.options.change) this.options.change(this); - - if(this.options.scroll) { - this.stopScrolling(); - - var p; - if (this.options.scroll == window) { - with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } - } else { - p = Position.page(this.options.scroll); - p[0] += this.options.scroll.scrollLeft + Position.deltaX; - p[1] += this.options.scroll.scrollTop + Position.deltaY; - p.push(p[0]+this.options.scroll.offsetWidth); - p.push(p[1]+this.options.scroll.offsetHeight); - } - var speed = [0,0]; - if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); - if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); - if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); - if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); - this.startScrolling(speed); - } - - // fix AppleWebKit rendering - if(Prototype.Browser.WebKit) window.scrollBy(0,0); - - Event.stop(event); - }, - - finishDrag: function(event, success) { - this.dragging = false; - - if(this.options.quiet){ - Position.prepare(); - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - Droppables.show(pointer, this.element); - } - - if(this.options.ghosting) { - if (!this._originallyAbsolute) - Position.relativize(this.element); - delete this._originallyAbsolute; - Element.remove(this._clone); - this._clone = null; - } - - var dropped = false; - if(success) { - dropped = Droppables.fire(event, this.element); - if (!dropped) dropped = false; - } - if(dropped && this.options.onDropped) this.options.onDropped(this.element); - Draggables.notify('onEnd', this, event); - - var revert = this.options.revert; - if(revert && Object.isFunction(revert)) revert = revert(this.element); - - var d = this.currentDelta(); - if(revert && this.options.reverteffect) { - if (dropped == 0 || revert != 'failure') - this.options.reverteffect(this.element, - d[1]-this.delta[1], d[0]-this.delta[0]); - } else { - this.delta = d; - } - - if(this.options.zindex) - this.element.style.zIndex = this.originalZ; - - if(this.options.endeffect) - this.options.endeffect(this.element); - - Draggables.deactivate(this); - Droppables.reset(); - }, - - keyPress: function(event) { - if(event.keyCode!=Event.KEY_ESC) return; - this.finishDrag(event, false); - Event.stop(event); - }, - - endDrag: function(event) { - if(!this.dragging) return; - this.stopScrolling(); - this.finishDrag(event, true); - Event.stop(event); - }, - - draw: function(point) { - var pos = this.element.cumulativeOffset(); - if(this.options.ghosting) { - var r = Position.realOffset(this.element); - pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; - } - - var d = this.currentDelta(); - pos[0] -= d[0]; pos[1] -= d[1]; - - if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { - pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; - pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; - } - - var p = [0,1].map(function(i){ - return (point[i]-pos[i]-this.offset[i]) - }.bind(this)); - - if(this.options.snap) { - if(Object.isFunction(this.options.snap)) { - p = this.options.snap(p[0],p[1],this); - } else { - if(Object.isArray(this.options.snap)) { - p = p.map( function(v, i) { - return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this)); - } else { - p = p.map( function(v) { - return (v/this.options.snap).round()*this.options.snap }.bind(this)); - } - }} - - var style = this.element.style; - if((!this.options.constraint) || (this.options.constraint=='horizontal')) - style.left = p[0] + "px"; - if((!this.options.constraint) || (this.options.constraint=='vertical')) - style.top = p[1] + "px"; - - if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering - }, - - stopScrolling: function() { - if(this.scrollInterval) { - clearInterval(this.scrollInterval); - this.scrollInterval = null; - Draggables._lastScrollPointer = null; - } - }, - - startScrolling: function(speed) { - if(!(speed[0] || speed[1])) return; - this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; - this.lastScrolled = new Date(); - this.scrollInterval = setInterval(this.scroll.bind(this), 10); - }, - - scroll: function() { - var current = new Date(); - var delta = current - this.lastScrolled; - this.lastScrolled = current; - if(this.options.scroll == window) { - with (this._getWindowScroll(this.options.scroll)) { - if (this.scrollSpeed[0] || this.scrollSpeed[1]) { - var d = delta / 1000; - this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); - } - } - } else { - this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; - this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; - } - - Position.prepare(); - Droppables.show(Draggables._lastPointer, this.element); - Draggables.notify('onDrag', this); - if (this._isScrollChild) { - Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); - Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; - Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; - if (Draggables._lastScrollPointer[0] < 0) - Draggables._lastScrollPointer[0] = 0; - if (Draggables._lastScrollPointer[1] < 0) - Draggables._lastScrollPointer[1] = 0; - this.draw(Draggables._lastScrollPointer); - } - - if(this.options.change) this.options.change(this); - }, - - _getWindowScroll: function(w) { - var T, L, W, H; - with (w.document) { - if (w.document.documentElement && documentElement.scrollTop) { - T = documentElement.scrollTop; - L = documentElement.scrollLeft; - } else if (w.document.body) { - T = body.scrollTop; - L = body.scrollLeft; - } - if (w.innerWidth) { - W = w.innerWidth; - H = w.innerHeight; - } else if (w.document.documentElement && documentElement.clientWidth) { - W = documentElement.clientWidth; - H = documentElement.clientHeight; - } else { - W = body.offsetWidth; - H = body.offsetHeight; - } - } - return { top: T, left: L, width: W, height: H }; - } -}); - -Draggable._dragging = { }; - -/*--------------------------------------------------------------------------*/ - -var SortableObserver = Class.create({ - initialize: function(element, observer) { - this.element = $(element); - this.observer = observer; - this.lastValue = Sortable.serialize(this.element); - }, - - onStart: function() { - this.lastValue = Sortable.serialize(this.element); - }, - - onEnd: function() { - Sortable.unmark(); - if(this.lastValue != Sortable.serialize(this.element)) - this.observer(this.element) - } -}); - -var Sortable = { - SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, - - sortables: { }, - - _findRootElement: function(element) { - while (element.tagName.toUpperCase() != "BODY") { - if(element.id && Sortable.sortables[element.id]) return element; - element = element.parentNode; - } - }, - - options: function(element) { - element = Sortable._findRootElement($(element)); - if(!element) return; - return Sortable.sortables[element.id]; - }, - - destroy: function(element){ - element = $(element); - var s = Sortable.sortables[element.id]; - - if(s) { - Draggables.removeObserver(s.element); - s.droppables.each(function(d){ Droppables.remove(d) }); - s.draggables.invoke('destroy'); - - delete Sortable.sortables[s.element.id]; - } - }, - - create: function(element) { - element = $(element); - var options = Object.extend({ - element: element, - tag: 'li', // assumes li children, override with tag: 'tagname' - dropOnEmpty: false, - tree: false, - treeTag: 'ul', - overlap: 'vertical', // one of 'vertical', 'horizontal' - constraint: 'vertical', // one of 'vertical', 'horizontal', false - containment: element, // also takes array of elements (or id's); or false - handle: false, // or a CSS class - only: false, - delay: 0, - hoverclass: null, - ghosting: false, - quiet: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - format: this.SERIALIZE_RULE, - - // these take arrays of elements or ids and can be - // used for better initialization performance - elements: false, - handles: false, - - onChange: Prototype.emptyFunction, - onUpdate: Prototype.emptyFunction - }, arguments[1] || { }); - - // clear any old sortable with same element - this.destroy(element); - - // build options for the draggables - var options_for_draggable = { - revert: true, - quiet: options.quiet, - scroll: options.scroll, - scrollSpeed: options.scrollSpeed, - scrollSensitivity: options.scrollSensitivity, - delay: options.delay, - ghosting: options.ghosting, - constraint: options.constraint, - handle: options.handle }; - - if(options.starteffect) - options_for_draggable.starteffect = options.starteffect; - - if(options.reverteffect) - options_for_draggable.reverteffect = options.reverteffect; - else - if(options.ghosting) options_for_draggable.reverteffect = function(element) { - element.style.top = 0; - element.style.left = 0; - }; - - if(options.endeffect) - options_for_draggable.endeffect = options.endeffect; - - if(options.zindex) - options_for_draggable.zindex = options.zindex; - - // build options for the droppables - var options_for_droppable = { - overlap: options.overlap, - containment: options.containment, - tree: options.tree, - hoverclass: options.hoverclass, - onHover: Sortable.onHover - }; - - var options_for_tree = { - onHover: Sortable.onEmptyHover, - overlap: options.overlap, - containment: options.containment, - hoverclass: options.hoverclass - }; - - // fix for gecko engine - Element.cleanWhitespace(element); - - options.draggables = []; - options.droppables = []; - - // drop on empty handling - if(options.dropOnEmpty || options.tree) { - Droppables.add(element, options_for_tree); - options.droppables.push(element); - } - - (options.elements || this.findElements(element, options) || []).each( function(e,i) { - var handle = options.handles ? $(options.handles[i]) : - (options.handle ? $(e).select('.' + options.handle)[0] : e); - options.draggables.push( - new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); - Droppables.add(e, options_for_droppable); - if(options.tree) e.treeNode = element; - options.droppables.push(e); - }); - - if(options.tree) { - (Sortable.findTreeElements(element, options) || []).each( function(e) { - Droppables.add(e, options_for_tree); - e.treeNode = element; - options.droppables.push(e); - }); - } - - // keep reference - this.sortables[element.identify()] = options; - - // for onupdate - Draggables.addObserver(new SortableObserver(element, options.onUpdate)); - - }, - - // return all suitable-for-sortable elements in a guaranteed order - findElements: function(element, options) { - return Element.findChildren( - element, options.only, options.tree ? true : false, options.tag); - }, - - findTreeElements: function(element, options) { - return Element.findChildren( - element, options.only, options.tree ? true : false, options.treeTag); - }, - - onHover: function(element, dropon, overlap) { - if(Element.isParent(dropon, element)) return; - - if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { - return; - } else if(overlap>0.5) { - Sortable.mark(dropon, 'before'); - if(dropon.previousSibling != element) { - var oldParentNode = element.parentNode; - element.style.visibility = "hidden"; // fix gecko rendering - dropon.parentNode.insertBefore(element, dropon); - if(dropon.parentNode!=oldParentNode) - Sortable.options(oldParentNode).onChange(element); - Sortable.options(dropon.parentNode).onChange(element); - } - } else { - Sortable.mark(dropon, 'after'); - var nextElement = dropon.nextSibling || null; - if(nextElement != element) { - var oldParentNode = element.parentNode; - element.style.visibility = "hidden"; // fix gecko rendering - dropon.parentNode.insertBefore(element, nextElement); - if(dropon.parentNode!=oldParentNode) - Sortable.options(oldParentNode).onChange(element); - Sortable.options(dropon.parentNode).onChange(element); - } - } - }, - - onEmptyHover: function(element, dropon, overlap) { - var oldParentNode = element.parentNode; - var droponOptions = Sortable.options(dropon); - - if(!Element.isParent(dropon, element)) { - var index; - - var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only}); - var child = null; - - if(children) { - var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); - - for (index = 0; index < children.length; index += 1) { - if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { - offset -= Element.offsetSize (children[index], droponOptions.overlap); - } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { - child = index + 1 < children.length ? children[index + 1] : null; - break; - } else { - child = children[index]; - break; - } - } - } - - dropon.insertBefore(element, child); - - Sortable.options(oldParentNode).onChange(element); - droponOptions.onChange(element); - } - }, - - unmark: function() { - if(Sortable._marker) Sortable._marker.hide(); - }, - - mark: function(dropon, position) { - // mark on ghosting only - var sortable = Sortable.options(dropon.parentNode); - if(sortable && !sortable.ghosting) return; - - if(!Sortable._marker) { - Sortable._marker = - ($('dropmarker') || Element.extend(document.createElement('DIV'))). - hide().addClassName('dropmarker').setStyle({position:'absolute'}); - document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); - } - var offsets = dropon.cumulativeOffset(); - Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'}); - - if(position=='after') - if(sortable.overlap == 'horizontal') - Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'}); - else - Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'}); - - Sortable._marker.show(); - }, - - _tree: function(element, options, parent) { - var children = Sortable.findElements(element, options) || []; - - for (var i = 0; i < children.length; ++i) { - var match = children[i].id.match(options.format); - - if (!match) continue; - - var child = { - id: encodeURIComponent(match ? match[1] : null), - element: element, - parent: parent, - children: [], - position: parent.children.length, - container: $(children[i]).down(options.treeTag) - }; - - /* Get the element containing the children and recurse over it */ - if (child.container) - this._tree(child.container, options, child); - - parent.children.push (child); - } - - return parent; - }, - - tree: function(element) { - element = $(element); - var sortableOptions = this.options(element); - var options = Object.extend({ - tag: sortableOptions.tag, - treeTag: sortableOptions.treeTag, - only: sortableOptions.only, - name: element.id, - format: sortableOptions.format - }, arguments[1] || { }); - - var root = { - id: null, - parent: null, - children: [], - container: element, - position: 0 - }; - - return Sortable._tree(element, options, root); - }, - - /* Construct a [i] index for a particular node */ - _constructIndex: function(node) { - var index = ''; - do { - if (node.id) index = '[' + node.position + ']' + index; - } while ((node = node.parent) != null); - return index; - }, - - sequence: function(element) { - element = $(element); - var options = Object.extend(this.options(element), arguments[1] || { }); - - return $(this.findElements(element, options) || []).map( function(item) { - return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; - }); - }, - - setSequence: function(element, new_sequence) { - element = $(element); - var options = Object.extend(this.options(element), arguments[2] || { }); - - var nodeMap = { }; - this.findElements(element, options).each( function(n) { - if (n.id.match(options.format)) - nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; - n.parentNode.removeChild(n); - }); - - new_sequence.each(function(ident) { - var n = nodeMap[ident]; - if (n) { - n[1].appendChild(n[0]); - delete nodeMap[ident]; - } - }); - }, - - serialize: function(element) { - element = $(element); - var options = Object.extend(Sortable.options(element), arguments[1] || { }); - var name = encodeURIComponent( - (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); - - if (options.tree) { - return Sortable.tree(element, arguments[1]).children.map( function (item) { - return [name + Sortable._constructIndex(item) + "[id]=" + - encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); - }).flatten().join('&'); - } else { - return Sortable.sequence(element, arguments[1]).map( function(item) { - return name + "[]=" + encodeURIComponent(item); - }).join('&'); - } - } -}; - -// Returns true if child is contained within element -Element.isParent = function(child, element) { - if (!child.parentNode || child == element) return false; - if (child.parentNode == element) return true; - return Element.isParent(child.parentNode, element); -}; - -Element.findChildren = function(element, only, recursive, tagName) { - if(!element.hasChildNodes()) return null; - tagName = tagName.toUpperCase(); - if(only) only = [only].flatten(); - var elements = []; - $A(element.childNodes).each( function(e) { - if(e.tagName && e.tagName.toUpperCase()==tagName && - (!only || (Element.classNames(e).detect(function(v) { return only.include(v) })))) - elements.push(e); - if(recursive) { - var grandchildren = Element.findChildren(e, only, recursive, tagName); - if(grandchildren) elements.push(grandchildren); - } - }); - - return (elements.length>0 ? elements.flatten() : []); -}; - -Element.offsetSize = function (element, type) { - return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')]; -}; \ No newline at end of file diff --git a/public/javascripts/effects.js b/public/javascripts/effects.js deleted file mode 100755 index c81e6c7..0000000 --- a/public/javascripts/effects.js +++ /dev/null @@ -1,1123 +0,0 @@ -// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 - -// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// Contributors: -// Justin Palmer (http://encytemedia.com/) -// Mark Pilgrim (http://diveintomark.org/) -// Martin Bialasinki -// -// script.aculo.us is freely distributable under the terms of an MIT-style license. -// For details, see the script.aculo.us web site: http://script.aculo.us/ - -// converts rgb() and #xxx to #xxxxxx format, -// returns self (or first argument) if not convertable -String.prototype.parseColor = function() { - var color = '#'; - if (this.slice(0,4) == 'rgb(') { - var cols = this.slice(4,this.length-1).split(','); - var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); - } else { - if (this.slice(0,1) == '#') { - if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); - if (this.length==7) color = this.toLowerCase(); - } - } - return (color.length==7 ? color : (arguments[0] || this)); -}; - -/*--------------------------------------------------------------------------*/ - -Element.collectTextNodes = function(element) { - return $A($(element).childNodes).collect( function(node) { - return (node.nodeType==3 ? node.nodeValue : - (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); - }).flatten().join(''); -}; - -Element.collectTextNodesIgnoreClass = function(element, className) { - return $A($(element).childNodes).collect( function(node) { - return (node.nodeType==3 ? node.nodeValue : - ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? - Element.collectTextNodesIgnoreClass(node, className) : '')); - }).flatten().join(''); -}; - -Element.setContentZoom = function(element, percent) { - element = $(element); - element.setStyle({fontSize: (percent/100) + 'em'}); - if (Prototype.Browser.WebKit) window.scrollBy(0,0); - return element; -}; - -Element.getInlineOpacity = function(element){ - return $(element).style.opacity || ''; -}; - -Element.forceRerendering = function(element) { - try { - element = $(element); - var n = document.createTextNode(' '); - element.appendChild(n); - element.removeChild(n); - } catch(e) { } -}; - -/*--------------------------------------------------------------------------*/ - -var Effect = { - _elementDoesNotExistError: { - name: 'ElementDoesNotExistError', - message: 'The specified DOM element does not exist, but is required for this effect to operate' - }, - Transitions: { - linear: Prototype.K, - sinoidal: function(pos) { - return (-Math.cos(pos*Math.PI)/2) + .5; - }, - reverse: function(pos) { - return 1-pos; - }, - flicker: function(pos) { - var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4; - return pos > 1 ? 1 : pos; - }, - wobble: function(pos) { - return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5; - }, - pulse: function(pos, pulses) { - return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5; - }, - spring: function(pos) { - return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); - }, - none: function(pos) { - return 0; - }, - full: function(pos) { - return 1; - } - }, - DefaultOptions: { - duration: 1.0, // seconds - fps: 100, // 100= assume 66fps max. - sync: false, // true for combining - from: 0.0, - to: 1.0, - delay: 0.0, - queue: 'parallel' - }, - tagifyText: function(element) { - var tagifyStyle = 'position:relative'; - if (Prototype.Browser.IE) tagifyStyle += ';zoom:1'; - - element = $(element); - $A(element.childNodes).each( function(child) { - if (child.nodeType==3) { - child.nodeValue.toArray().each( function(character) { - element.insertBefore( - new Element('span', {style: tagifyStyle}).update( - character == ' ' ? String.fromCharCode(160) : character), - child); - }); - Element.remove(child); - } - }); - }, - multiple: function(element, effect) { - var elements; - if (((typeof element == 'object') || - Object.isFunction(element)) && - (element.length)) - elements = element; - else - elements = $(element).childNodes; - - var options = Object.extend({ - speed: 0.1, - delay: 0.0 - }, arguments[2] || { }); - var masterDelay = options.delay; - - $A(elements).each( function(element, index) { - new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); - }); - }, - PAIRS: { - 'slide': ['SlideDown','SlideUp'], - 'blind': ['BlindDown','BlindUp'], - 'appear': ['Appear','Fade'] - }, - toggle: function(element, effect, options) { - element = $(element); - effect = (effect || 'appear').toLowerCase(); - - return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({ - queue: { position:'end', scope:(element.id || 'global'), limit: 1 } - }, options || {})); - } -}; - -Effect.DefaultOptions.transition = Effect.Transitions.sinoidal; - -/* ------------- core effects ------------- */ - -Effect.ScopedQueue = Class.create(Enumerable, { - initialize: function() { - this.effects = []; - this.interval = null; - }, - _each: function(iterator) { - this.effects._each(iterator); - }, - add: function(effect) { - var timestamp = new Date().getTime(); - - var position = Object.isString(effect.options.queue) ? - effect.options.queue : effect.options.queue.position; - - switch(position) { - case 'front': - // move unstarted effects after this effect - this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { - e.startOn += effect.finishOn; - e.finishOn += effect.finishOn; - }); - break; - case 'with-last': - timestamp = this.effects.pluck('startOn').max() || timestamp; - break; - case 'end': - // start effect after last queued effect has finished - timestamp = this.effects.pluck('finishOn').max() || timestamp; - break; - } - - effect.startOn += timestamp; - effect.finishOn += timestamp; - - if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) - this.effects.push(effect); - - if (!this.interval) - this.interval = setInterval(this.loop.bind(this), 15); - }, - remove: function(effect) { - this.effects = this.effects.reject(function(e) { return e==effect }); - if (this.effects.length == 0) { - clearInterval(this.interval); - this.interval = null; - } - }, - loop: function() { - var timePos = new Date().getTime(); - for(var i=0, len=this.effects.length;i= this.startOn) { - if (timePos >= this.finishOn) { - this.render(1.0); - this.cancel(); - this.event('beforeFinish'); - if (this.finish) this.finish(); - this.event('afterFinish'); - return; - } - var pos = (timePos - this.startOn) / this.totalTime, - frame = (pos * this.totalFrames).round(); - if (frame > this.currentFrame) { - this.render(pos); - this.currentFrame = frame; - } - } - }, - cancel: function() { - if (!this.options.sync) - Effect.Queues.get(Object.isString(this.options.queue) ? - 'global' : this.options.queue.scope).remove(this); - this.state = 'finished'; - }, - event: function(eventName) { - if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); - if (this.options[eventName]) this.options[eventName](this); - }, - inspect: function() { - var data = $H(); - for(property in this) - if (!Object.isFunction(this[property])) data.set(property, this[property]); - return '#'; - } -}); - -Effect.Parallel = Class.create(Effect.Base, { - initialize: function(effects) { - this.effects = effects || []; - this.start(arguments[1]); - }, - update: function(position) { - this.effects.invoke('render', position); - }, - finish: function(position) { - this.effects.each( function(effect) { - effect.render(1.0); - effect.cancel(); - effect.event('beforeFinish'); - if (effect.finish) effect.finish(position); - effect.event('afterFinish'); - }); - } -}); - -Effect.Tween = Class.create(Effect.Base, { - initialize: function(object, from, to) { - object = Object.isString(object) ? $(object) : object; - var args = $A(arguments), method = args.last(), - options = args.length == 5 ? args[3] : null; - this.method = Object.isFunction(method) ? method.bind(object) : - Object.isFunction(object[method]) ? object[method].bind(object) : - function(value) { object[method] = value }; - this.start(Object.extend({ from: from, to: to }, options || { })); - }, - update: function(position) { - this.method(position); - } -}); - -Effect.Event = Class.create(Effect.Base, { - initialize: function() { - this.start(Object.extend({ duration: 0 }, arguments[0] || { })); - }, - update: Prototype.emptyFunction -}); - -Effect.Opacity = Class.create(Effect.Base, { - initialize: function(element) { - this.element = $(element); - if (!this.element) throw(Effect._elementDoesNotExistError); - // make this work on IE on elements without 'layout' - if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) - this.element.setStyle({zoom: 1}); - var options = Object.extend({ - from: this.element.getOpacity() || 0.0, - to: 1.0 - }, arguments[1] || { }); - this.start(options); - }, - update: function(position) { - this.element.setOpacity(position); - } -}); - -Effect.Move = Class.create(Effect.Base, { - initialize: function(element) { - this.element = $(element); - if (!this.element) throw(Effect._elementDoesNotExistError); - var options = Object.extend({ - x: 0, - y: 0, - mode: 'relative' - }, arguments[1] || { }); - this.start(options); - }, - setup: function() { - this.element.makePositioned(); - this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); - this.originalTop = parseFloat(this.element.getStyle('top') || '0'); - if (this.options.mode == 'absolute') { - this.options.x = this.options.x - this.originalLeft; - this.options.y = this.options.y - this.originalTop; - } - }, - update: function(position) { - this.element.setStyle({ - left: (this.options.x * position + this.originalLeft).round() + 'px', - top: (this.options.y * position + this.originalTop).round() + 'px' - }); - } -}); - -// for backwards compatibility -Effect.MoveBy = function(element, toTop, toLeft) { - return new Effect.Move(element, - Object.extend({ x: toLeft, y: toTop }, arguments[3] || { })); -}; - -Effect.Scale = Class.create(Effect.Base, { - initialize: function(element, percent) { - this.element = $(element); - if (!this.element) throw(Effect._elementDoesNotExistError); - var options = Object.extend({ - scaleX: true, - scaleY: true, - scaleContent: true, - scaleFromCenter: false, - scaleMode: 'box', // 'box' or 'contents' or { } with provided values - scaleFrom: 100.0, - scaleTo: percent - }, arguments[2] || { }); - this.start(options); - }, - setup: function() { - this.restoreAfterFinish = this.options.restoreAfterFinish || false; - this.elementPositioning = this.element.getStyle('position'); - - this.originalStyle = { }; - ['top','left','width','height','fontSize'].each( function(k) { - this.originalStyle[k] = this.element.style[k]; - }.bind(this)); - - this.originalTop = this.element.offsetTop; - this.originalLeft = this.element.offsetLeft; - - var fontSize = this.element.getStyle('font-size') || '100%'; - ['em','px','%','pt'].each( function(fontSizeType) { - if (fontSize.indexOf(fontSizeType)>0) { - this.fontSize = parseFloat(fontSize); - this.fontSizeType = fontSizeType; - } - }.bind(this)); - - this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; - - this.dims = null; - if (this.options.scaleMode=='box') - this.dims = [this.element.offsetHeight, this.element.offsetWidth]; - if (/^content/.test(this.options.scaleMode)) - this.dims = [this.element.scrollHeight, this.element.scrollWidth]; - if (!this.dims) - this.dims = [this.options.scaleMode.originalHeight, - this.options.scaleMode.originalWidth]; - }, - update: function(position) { - var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); - if (this.options.scaleContent && this.fontSize) - this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); - this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); - }, - finish: function(position) { - if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle); - }, - setDimensions: function(height, width) { - var d = { }; - if (this.options.scaleX) d.width = width.round() + 'px'; - if (this.options.scaleY) d.height = height.round() + 'px'; - if (this.options.scaleFromCenter) { - var topd = (height - this.dims[0])/2; - var leftd = (width - this.dims[1])/2; - if (this.elementPositioning == 'absolute') { - if (this.options.scaleY) d.top = this.originalTop-topd + 'px'; - if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; - } else { - if (this.options.scaleY) d.top = -topd + 'px'; - if (this.options.scaleX) d.left = -leftd + 'px'; - } - } - this.element.setStyle(d); - } -}); - -Effect.Highlight = Class.create(Effect.Base, { - initialize: function(element) { - this.element = $(element); - if (!this.element) throw(Effect._elementDoesNotExistError); - var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { }); - this.start(options); - }, - setup: function() { - // Prevent executing on elements not in the layout flow - if (this.element.getStyle('display')=='none') { this.cancel(); return; } - // Disable background image during the effect - this.oldStyle = { }; - if (!this.options.keepBackgroundImage) { - this.oldStyle.backgroundImage = this.element.getStyle('background-image'); - this.element.setStyle({backgroundImage: 'none'}); - } - if (!this.options.endcolor) - this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); - if (!this.options.restorecolor) - this.options.restorecolor = this.element.getStyle('background-color'); - // init color calculations - this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); - this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); - }, - update: function(position) { - this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ - return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) }); - }, - finish: function() { - this.element.setStyle(Object.extend(this.oldStyle, { - backgroundColor: this.options.restorecolor - })); - } -}); - -Effect.ScrollTo = function(element) { - var options = arguments[1] || { }, - scrollOffsets = document.viewport.getScrollOffsets(), - elementOffsets = $(element).cumulativeOffset(); - - if (options.offset) elementOffsets[1] += options.offset; - - return new Effect.Tween(null, - scrollOffsets.top, - elementOffsets[1], - options, - function(p){ scrollTo(scrollOffsets.left, p.round()); } - ); -}; - -/* ------------- combination effects ------------- */ - -Effect.Fade = function(element) { - element = $(element); - var oldOpacity = element.getInlineOpacity(); - var options = Object.extend({ - from: element.getOpacity() || 1.0, - to: 0.0, - afterFinishInternal: function(effect) { - if (effect.options.to!=0) return; - effect.element.hide().setStyle({opacity: oldOpacity}); - } - }, arguments[1] || { }); - return new Effect.Opacity(element,options); -}; - -Effect.Appear = function(element) { - element = $(element); - var options = Object.extend({ - from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), - to: 1.0, - // force Safari to render floated elements properly - afterFinishInternal: function(effect) { - effect.element.forceRerendering(); - }, - beforeSetup: function(effect) { - effect.element.setOpacity(effect.options.from).show(); - }}, arguments[1] || { }); - return new Effect.Opacity(element,options); -}; - -Effect.Puff = function(element) { - element = $(element); - var oldStyle = { - opacity: element.getInlineOpacity(), - position: element.getStyle('position'), - top: element.style.top, - left: element.style.left, - width: element.style.width, - height: element.style.height - }; - return new Effect.Parallel( - [ new Effect.Scale(element, 200, - { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), - new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], - Object.extend({ duration: 1.0, - beforeSetupInternal: function(effect) { - Position.absolutize(effect.effects[0].element); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide().setStyle(oldStyle); } - }, arguments[1] || { }) - ); -}; - -Effect.BlindUp = function(element) { - element = $(element); - element.makeClipping(); - return new Effect.Scale(element, 0, - Object.extend({ scaleContent: false, - scaleX: false, - restoreAfterFinish: true, - afterFinishInternal: function(effect) { - effect.element.hide().undoClipping(); - } - }, arguments[1] || { }) - ); -}; - -Effect.BlindDown = function(element) { - element = $(element); - var elementDimensions = element.getDimensions(); - return new Effect.Scale(element, 100, Object.extend({ - scaleContent: false, - scaleX: false, - scaleFrom: 0, - scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, - restoreAfterFinish: true, - afterSetup: function(effect) { - effect.element.makeClipping().setStyle({height: '0px'}).show(); - }, - afterFinishInternal: function(effect) { - effect.element.undoClipping(); - } - }, arguments[1] || { })); -}; - -Effect.SwitchOff = function(element) { - element = $(element); - var oldOpacity = element.getInlineOpacity(); - return new Effect.Appear(element, Object.extend({ - duration: 0.4, - from: 0, - transition: Effect.Transitions.flicker, - afterFinishInternal: function(effect) { - new Effect.Scale(effect.element, 1, { - duration: 0.3, scaleFromCenter: true, - scaleX: false, scaleContent: false, restoreAfterFinish: true, - beforeSetup: function(effect) { - effect.element.makePositioned().makeClipping(); - }, - afterFinishInternal: function(effect) { - effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); - } - }); - } - }, arguments[1] || { })); -}; - -Effect.DropOut = function(element) { - element = $(element); - var oldStyle = { - top: element.getStyle('top'), - left: element.getStyle('left'), - opacity: element.getInlineOpacity() }; - return new Effect.Parallel( - [ new Effect.Move(element, {x: 0, y: 100, sync: true }), - new Effect.Opacity(element, { sync: true, to: 0.0 }) ], - Object.extend( - { duration: 0.5, - beforeSetup: function(effect) { - effect.effects[0].element.makePositioned(); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); - } - }, arguments[1] || { })); -}; - -Effect.Shake = function(element) { - element = $(element); - var options = Object.extend({ - distance: 20, - duration: 0.5 - }, arguments[1] || {}); - var distance = parseFloat(options.distance); - var split = parseFloat(options.duration) / 10.0; - var oldStyle = { - top: element.getStyle('top'), - left: element.getStyle('left') }; - return new Effect.Move(element, - { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) { - effect.element.undoPositioned().setStyle(oldStyle); - }}); }}); }}); }}); }}); }}); -}; - -Effect.SlideDown = function(element) { - element = $(element).cleanWhitespace(); - // SlideDown need to have the content of the element wrapped in a container element with fixed height! - var oldInnerBottom = element.down().getStyle('bottom'); - var elementDimensions = element.getDimensions(); - return new Effect.Scale(element, 100, Object.extend({ - scaleContent: false, - scaleX: false, - scaleFrom: window.opera ? 0 : 1, - scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, - restoreAfterFinish: true, - afterSetup: function(effect) { - effect.element.makePositioned(); - effect.element.down().makePositioned(); - if (window.opera) effect.element.setStyle({top: ''}); - effect.element.makeClipping().setStyle({height: '0px'}).show(); - }, - afterUpdateInternal: function(effect) { - effect.element.down().setStyle({bottom: - (effect.dims[0] - effect.element.clientHeight) + 'px' }); - }, - afterFinishInternal: function(effect) { - effect.element.undoClipping().undoPositioned(); - effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } - }, arguments[1] || { }) - ); -}; - -Effect.SlideUp = function(element) { - element = $(element).cleanWhitespace(); - var oldInnerBottom = element.down().getStyle('bottom'); - var elementDimensions = element.getDimensions(); - return new Effect.Scale(element, window.opera ? 0 : 1, - Object.extend({ scaleContent: false, - scaleX: false, - scaleMode: 'box', - scaleFrom: 100, - scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, - restoreAfterFinish: true, - afterSetup: function(effect) { - effect.element.makePositioned(); - effect.element.down().makePositioned(); - if (window.opera) effect.element.setStyle({top: ''}); - effect.element.makeClipping().show(); - }, - afterUpdateInternal: function(effect) { - effect.element.down().setStyle({bottom: - (effect.dims[0] - effect.element.clientHeight) + 'px' }); - }, - afterFinishInternal: function(effect) { - effect.element.hide().undoClipping().undoPositioned(); - effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); - } - }, arguments[1] || { }) - ); -}; - -// Bug in opera makes the TD containing this element expand for a instance after finish -Effect.Squish = function(element) { - return new Effect.Scale(element, window.opera ? 1 : 0, { - restoreAfterFinish: true, - beforeSetup: function(effect) { - effect.element.makeClipping(); - }, - afterFinishInternal: function(effect) { - effect.element.hide().undoClipping(); - } - }); -}; - -Effect.Grow = function(element) { - element = $(element); - var options = Object.extend({ - direction: 'center', - moveTransition: Effect.Transitions.sinoidal, - scaleTransition: Effect.Transitions.sinoidal, - opacityTransition: Effect.Transitions.full - }, arguments[1] || { }); - var oldStyle = { - top: element.style.top, - left: element.style.left, - height: element.style.height, - width: element.style.width, - opacity: element.getInlineOpacity() }; - - var dims = element.getDimensions(); - var initialMoveX, initialMoveY; - var moveX, moveY; - - switch (options.direction) { - case 'top-left': - initialMoveX = initialMoveY = moveX = moveY = 0; - break; - case 'top-right': - initialMoveX = dims.width; - initialMoveY = moveY = 0; - moveX = -dims.width; - break; - case 'bottom-left': - initialMoveX = moveX = 0; - initialMoveY = dims.height; - moveY = -dims.height; - break; - case 'bottom-right': - initialMoveX = dims.width; - initialMoveY = dims.height; - moveX = -dims.width; - moveY = -dims.height; - break; - case 'center': - initialMoveX = dims.width / 2; - initialMoveY = dims.height / 2; - moveX = -dims.width / 2; - moveY = -dims.height / 2; - break; - } - - return new Effect.Move(element, { - x: initialMoveX, - y: initialMoveY, - duration: 0.01, - beforeSetup: function(effect) { - effect.element.hide().makeClipping().makePositioned(); - }, - afterFinishInternal: function(effect) { - new Effect.Parallel( - [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), - new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), - new Effect.Scale(effect.element, 100, { - scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, - sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) - ], Object.extend({ - beforeSetup: function(effect) { - effect.effects[0].element.setStyle({height: '0px'}).show(); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); - } - }, options) - ); - } - }); -}; - -Effect.Shrink = function(element) { - element = $(element); - var options = Object.extend({ - direction: 'center', - moveTransition: Effect.Transitions.sinoidal, - scaleTransition: Effect.Transitions.sinoidal, - opacityTransition: Effect.Transitions.none - }, arguments[1] || { }); - var oldStyle = { - top: element.style.top, - left: element.style.left, - height: element.style.height, - width: element.style.width, - opacity: element.getInlineOpacity() }; - - var dims = element.getDimensions(); - var moveX, moveY; - - switch (options.direction) { - case 'top-left': - moveX = moveY = 0; - break; - case 'top-right': - moveX = dims.width; - moveY = 0; - break; - case 'bottom-left': - moveX = 0; - moveY = dims.height; - break; - case 'bottom-right': - moveX = dims.width; - moveY = dims.height; - break; - case 'center': - moveX = dims.width / 2; - moveY = dims.height / 2; - break; - } - - return new Effect.Parallel( - [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), - new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), - new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) - ], Object.extend({ - beforeStartInternal: function(effect) { - effect.effects[0].element.makePositioned().makeClipping(); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } - }, options) - ); -}; - -Effect.Pulsate = function(element) { - element = $(element); - var options = arguments[1] || { }, - oldOpacity = element.getInlineOpacity(), - transition = options.transition || Effect.Transitions.linear, - reverser = function(pos){ - return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5); - }; - - return new Effect.Opacity(element, - Object.extend(Object.extend({ duration: 2.0, from: 0, - afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } - }, options), {transition: reverser})); -}; - -Effect.Fold = function(element) { - element = $(element); - var oldStyle = { - top: element.style.top, - left: element.style.left, - width: element.style.width, - height: element.style.height }; - element.makeClipping(); - return new Effect.Scale(element, 5, Object.extend({ - scaleContent: false, - scaleX: false, - afterFinishInternal: function(effect) { - new Effect.Scale(element, 1, { - scaleContent: false, - scaleY: false, - afterFinishInternal: function(effect) { - effect.element.hide().undoClipping().setStyle(oldStyle); - } }); - }}, arguments[1] || { })); -}; - -Effect.Morph = Class.create(Effect.Base, { - initialize: function(element) { - this.element = $(element); - if (!this.element) throw(Effect._elementDoesNotExistError); - var options = Object.extend({ - style: { } - }, arguments[1] || { }); - - if (!Object.isString(options.style)) this.style = $H(options.style); - else { - if (options.style.include(':')) - this.style = options.style.parseStyle(); - else { - this.element.addClassName(options.style); - this.style = $H(this.element.getStyles()); - this.element.removeClassName(options.style); - var css = this.element.getStyles(); - this.style = this.style.reject(function(style) { - return style.value == css[style.key]; - }); - options.afterFinishInternal = function(effect) { - effect.element.addClassName(effect.options.style); - effect.transforms.each(function(transform) { - effect.element.style[transform.style] = ''; - }); - }; - } - } - this.start(options); - }, - - setup: function(){ - function parseColor(color){ - if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; - color = color.parseColor(); - return $R(0,2).map(function(i){ - return parseInt( color.slice(i*2+1,i*2+3), 16 ); - }); - } - this.transforms = this.style.map(function(pair){ - var property = pair[0], value = pair[1], unit = null; - - if (value.parseColor('#zzzzzz') != '#zzzzzz') { - value = value.parseColor(); - unit = 'color'; - } else if (property == 'opacity') { - value = parseFloat(value); - if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) - this.element.setStyle({zoom: 1}); - } else if (Element.CSS_LENGTH.test(value)) { - var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/); - value = parseFloat(components[1]); - unit = (components.length == 3) ? components[2] : null; - } - - var originalValue = this.element.getStyle(property); - return { - style: property.camelize(), - originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), - targetValue: unit=='color' ? parseColor(value) : value, - unit: unit - }; - }.bind(this)).reject(function(transform){ - return ( - (transform.originalValue == transform.targetValue) || - ( - transform.unit != 'color' && - (isNaN(transform.originalValue) || isNaN(transform.targetValue)) - ) - ); - }); - }, - update: function(position) { - var style = { }, transform, i = this.transforms.length; - while(i--) - style[(transform = this.transforms[i]).style] = - transform.unit=='color' ? '#'+ - (Math.round(transform.originalValue[0]+ - (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() + - (Math.round(transform.originalValue[1]+ - (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() + - (Math.round(transform.originalValue[2]+ - (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() : - (transform.originalValue + - (transform.targetValue - transform.originalValue) * position).toFixed(3) + - (transform.unit === null ? '' : transform.unit); - this.element.setStyle(style, true); - } -}); - -Effect.Transform = Class.create({ - initialize: function(tracks){ - this.tracks = []; - this.options = arguments[1] || { }; - this.addTracks(tracks); - }, - addTracks: function(tracks){ - tracks.each(function(track){ - track = $H(track); - var data = track.values().first(); - this.tracks.push($H({ - ids: track.keys().first(), - effect: Effect.Morph, - options: { style: data } - })); - }.bind(this)); - return this; - }, - play: function(){ - return new Effect.Parallel( - this.tracks.map(function(track){ - var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options'); - var elements = [$(ids) || $$(ids)].flatten(); - return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) }); - }).flatten(), - this.options - ); - } -}); - -Element.CSS_PROPERTIES = $w( - 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + - 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + - 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + - 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + - 'fontSize fontWeight height left letterSpacing lineHeight ' + - 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ - 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + - 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + - 'right textIndent top width wordSpacing zIndex'); - -Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; - -String.__parseStyleElement = document.createElement('div'); -String.prototype.parseStyle = function(){ - var style, styleRules = $H(); - if (Prototype.Browser.WebKit) - style = new Element('div',{style:this}).style; - else { - String.__parseStyleElement.innerHTML = '
    '; - style = String.__parseStyleElement.childNodes[0].style; - } - - Element.CSS_PROPERTIES.each(function(property){ - if (style[property]) styleRules.set(property, style[property]); - }); - - if (Prototype.Browser.IE && this.include('opacity')) - styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]); - - return styleRules; -}; - -if (document.defaultView && document.defaultView.getComputedStyle) { - Element.getStyles = function(element) { - var css = document.defaultView.getComputedStyle($(element), null); - return Element.CSS_PROPERTIES.inject({ }, function(styles, property) { - styles[property] = css[property]; - return styles; - }); - }; -} else { - Element.getStyles = function(element) { - element = $(element); - var css = element.currentStyle, styles; - styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) { - results[property] = css[property]; - return results; - }); - if (!styles.opacity) styles.opacity = element.getOpacity(); - return styles; - }; -} - -Effect.Methods = { - morph: function(element, style) { - element = $(element); - new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { })); - return element; - }, - visualEffect: function(element, effect, options) { - element = $(element); - var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1); - new Effect[klass](element, options); - return element; - }, - highlight: function(element, options) { - element = $(element); - new Effect.Highlight(element, options); - return element; - } -}; - -$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+ - 'pulsate shake puff squish switchOff dropOut').each( - function(effect) { - Effect.Methods[effect] = function(element, options){ - element = $(element); - Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options); - return element; - }; - } -); - -$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( - function(f) { Effect.Methods[f] = Element[f]; } -); - -Element.addMethods(Effect.Methods); \ No newline at end of file diff --git a/public/javascripts/jquery.js b/public/javascripts/jquery.js deleted file mode 100755 index 48590ec..0000000 --- a/public/javascripts/jquery.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * jQuery JavaScript Library v1.6.2 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Jun 30 14:16:56 2011 -0400 - */ -(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(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(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
    a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. -shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j -)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/public/javascripts/old_rails.js b/public/javascripts/old_rails.js deleted file mode 100755 index aed6aed..0000000 --- a/public/javascripts/old_rails.js +++ /dev/null @@ -1,191 +0,0 @@ -(function() { - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - function isEventSupported(eventName) { - var el = document.createElement('div'); - eventName = 'on' + eventName; - var isSupported = (eventName in el); - if (!isSupported) { - el.setAttribute(eventName, 'return;'); - isSupported = typeof el[eventName] == 'function'; - } - el = null; - return isSupported; - } - - function isForm(element) { - return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM' - } - - function isInput(element) { - if (Object.isElement(element)) { - var name = element.nodeName.toUpperCase() - return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA' - } - else return false - } - - var submitBubbles = isEventSupported('submit'), - changeBubbles = isEventSupported('change') - - if (!submitBubbles || !changeBubbles) { - // augment the Event.Handler class to observe custom events when needed - Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap( - function(init, element, eventName, selector, callback) { - init(element, eventName, selector, callback) - // is the handler being attached to an element that doesn't support this event? - if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) || - (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) { - // "submit" => "emulated:submit" - this.eventName = 'emulated:' + this.eventName - } - } - ) - } - - if (!submitBubbles) { - // discover forms on the page by observing focus events which always bubble - document.on('focusin', 'form', function(focusEvent, form) { - // special handler for the real "submit" event (one-time operation) - if (!form.retrieve('emulated:submit')) { - form.on('submit', function(submitEvent) { - var emulated = form.fire('emulated:submit', submitEvent, true) - // if custom event received preventDefault, cancel the real one too - if (emulated.returnValue === false) submitEvent.preventDefault() - }) - form.store('emulated:submit', true) - } - }) - } - - if (!changeBubbles) { - // discover form inputs on the page - document.on('focusin', 'input, select, texarea', function(focusEvent, input) { - // special handler for real "change" events - if (!input.retrieve('emulated:change')) { - input.on('change', function(changeEvent) { - input.fire('emulated:change', changeEvent, true) - }) - input.store('emulated:change', true) - } - }) - } - - function handleRemote(element) { - var method, url, params; - - var event = element.fire("ajax:before"); - if (event.stopped) return false; - - if (element.tagName.toLowerCase() === 'form') { - method = element.readAttribute('method') || 'post'; - url = element.readAttribute('action'); - params = element.serialize(); - } else { - method = element.readAttribute('data-method') || 'get'; - url = element.readAttribute('href'); - params = {}; - } - - new Ajax.Request(url, { - method: method, - parameters: params, - evalScripts: true, - - onComplete: function(request) { element.fire("ajax:complete", request); }, - onSuccess: function(request) { element.fire("ajax:success", request); }, - onFailure: function(request) { element.fire("ajax:failure", request); } - }); - - element.fire("ajax:after"); - } - - function handleMethod(element) { - var method = element.readAttribute('data-method'), - url = element.readAttribute('href'), - csrf_param = $$('meta[name=csrf-param]')[0], - csrf_token = $$('meta[name=csrf-token]')[0]; - - var form = new Element('form', { method: "POST", action: url, style: "display: none;" }); - element.parentNode.insert(form); - - if (method !== 'post') { - var field = new Element('input', { type: 'hidden', name: '_method', value: method }); - form.insert(field); - } - - if (csrf_param) { - var param = csrf_param.readAttribute('content'), - token = csrf_token.readAttribute('content'), - field = new Element('input', { type: 'hidden', name: param, value: token }); - form.insert(field); - } - - form.submit(); - } - - - document.on("click", "*[data-confirm]", function(event, element) { - var message = element.readAttribute('data-confirm'); - if (!confirm(message)) event.stop(); - }); - - document.on("click", "a[data-remote]", function(event, element) { - if (event.stopped) return; - handleRemote(element); - event.stop(); - }); - - document.on("click", "a[data-method]", function(event, element) { - if (event.stopped) return; - handleMethod(element); - event.stop(); - }); - - document.on("submit", function(event) { - var element = event.findElement(), - message = element.readAttribute('data-confirm'); - if (message && !confirm(message)) { - event.stop(); - return false; - } - - var inputs = element.select("input[type=submit][data-disable-with]"); - inputs.each(function(input) { - input.disabled = true; - input.writeAttribute('data-original-value', input.value); - input.value = input.readAttribute('data-disable-with'); - }); - - var element = event.findElement("form[data-remote]"); - if (element) { - handleRemote(element); - event.stop(); - } - }); - - document.on("ajax:after", "form", function(event, element) { - var inputs = element.select("input[type=submit][disabled=true][data-disable-with]"); - inputs.each(function(input) { - input.value = input.readAttribute('data-original-value'); - input.removeAttribute('data-original-value'); - input.disabled = false; - }); - }); - - Ajax.Responders.register({ - onCreate: function(request) { - var csrf_meta_tag = $$('meta[name=csrf-token]')[0]; - - if (csrf_meta_tag) { - var header = 'X-CSRF-Token', - token = csrf_meta_tag.readAttribute('content'); - - if (!request.options.requestHeaders) { - request.options.requestHeaders = {}; - } - request.options.requestHeaders[header] = token; - } - } - }); -})(); diff --git a/public/javascripts/prototype.js b/public/javascripts/prototype.js deleted file mode 100755 index 06249a6..0000000 --- a/public/javascripts/prototype.js +++ /dev/null @@ -1,6001 +0,0 @@ -/* Prototype JavaScript framework, version 1.7_rc2 - * (c) 2005-2010 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://www.prototypejs.org/ - * - *--------------------------------------------------------------------------*/ - -var Prototype = { - - Version: '1.7_rc2', - - Browser: (function(){ - var ua = navigator.userAgent; - var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; - return { - IE: !!window.attachEvent && !isOpera, - Opera: isOpera, - WebKit: ua.indexOf('AppleWebKit/') > -1, - Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, - MobileSafari: /Apple.*Mobile/.test(ua) - } - })(), - - BrowserFeatures: { - XPath: !!document.evaluate, - - SelectorsAPI: !!document.querySelector, - - ElementExtensions: (function() { - var constructor = window.Element || window.HTMLElement; - return !!(constructor && constructor.prototype); - })(), - SpecificElementExtensions: (function() { - if (typeof window.HTMLDivElement !== 'undefined') - return true; - - var div = document.createElement('div'), - form = document.createElement('form'), - isSupported = false; - - if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { - isSupported = true; - } - - div = form = null; - - return isSupported; - })() - }, - - ScriptFragment: ']*>([\\S\\s]*?)<\/script>', - JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, - - emptyFunction: function() { }, - - K: function(x) { return x } -}; - -if (Prototype.Browser.MobileSafari) - Prototype.BrowserFeatures.SpecificElementExtensions = false; - - -var Abstract = { }; - - -var Try = { - these: function() { - var returnValue; - - for (var i = 0, length = arguments.length; i < length; i++) { - var lambda = arguments[i]; - try { - returnValue = lambda(); - break; - } catch (e) { } - } - - return returnValue; - } -}; - -/* Based on Alex Arnell's inheritance implementation. */ - -var Class = (function() { - - var IS_DONTENUM_BUGGY = (function(){ - for (var p in { toString: 1 }) { - if (p === 'toString') return false; - } - return true; - })(); - - function subclass() {}; - function create() { - var parent = null, properties = $A(arguments); - if (Object.isFunction(properties[0])) - parent = properties.shift(); - - function klass() { - this.initialize.apply(this, arguments); - } - - Object.extend(klass, Class.Methods); - klass.superclass = parent; - klass.subclasses = []; - - if (parent) { - subclass.prototype = parent.prototype; - klass.prototype = new subclass; - parent.subclasses.push(klass); - } - - for (var i = 0, length = properties.length; i < length; i++) - klass.addMethods(properties[i]); - - if (!klass.prototype.initialize) - klass.prototype.initialize = Prototype.emptyFunction; - - klass.prototype.constructor = klass; - return klass; - } - - function addMethods(source) { - var ancestor = this.superclass && this.superclass.prototype, - properties = Object.keys(source); - - if (IS_DONTENUM_BUGGY) { - if (source.toString != Object.prototype.toString) - properties.push("toString"); - if (source.valueOf != Object.prototype.valueOf) - properties.push("valueOf"); - } - - for (var i = 0, length = properties.length; i < length; i++) { - var property = properties[i], value = source[property]; - if (ancestor && Object.isFunction(value) && - value.argumentNames()[0] == "$super") { - var method = value; - value = (function(m) { - return function() { return ancestor[m].apply(this, arguments); }; - })(property).wrap(method); - - value.valueOf = method.valueOf.bind(method); - value.toString = method.toString.bind(method); - } - this.prototype[property] = value; - } - - return this; - } - - return { - create: create, - Methods: { - addMethods: addMethods - } - }; -})(); -(function() { - - var _toString = Object.prototype.toString, - NULL_TYPE = 'Null', - UNDEFINED_TYPE = 'Undefined', - BOOLEAN_TYPE = 'Boolean', - NUMBER_TYPE = 'Number', - STRING_TYPE = 'String', - OBJECT_TYPE = 'Object', - BOOLEAN_CLASS = '[object Boolean]', - NUMBER_CLASS = '[object Number]', - STRING_CLASS = '[object String]', - ARRAY_CLASS = '[object Array]', - NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && - typeof JSON.stringify === 'function' && - JSON.stringify(0) === '0' && - typeof JSON.stringify(Prototype.K) === 'undefined'; - - function Type(o) { - switch(o) { - case null: return NULL_TYPE; - case (void 0): return UNDEFINED_TYPE; - } - var type = typeof o; - switch(type) { - case 'boolean': return BOOLEAN_TYPE; - case 'number': return NUMBER_TYPE; - case 'string': return STRING_TYPE; - } - return OBJECT_TYPE; - } - - function extend(destination, source) { - for (var property in source) - destination[property] = source[property]; - return destination; - } - - function inspect(object) { - try { - if (isUndefined(object)) return 'undefined'; - if (object === null) return 'null'; - return object.inspect ? object.inspect() : String(object); - } catch (e) { - if (e instanceof RangeError) return '...'; - throw e; - } - } - - function toJSON(value) { - return Str('', { '': value }, []); - } - - function Str(key, holder, stack) { - var value = holder[key], - type = typeof value; - - if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - - var _class = _toString.call(value); - - switch (_class) { - case NUMBER_CLASS: - case BOOLEAN_CLASS: - case STRING_CLASS: - value = value.valueOf(); - } - - switch (value) { - case null: return 'null'; - case true: return 'true'; - case false: return 'false'; - } - - type = typeof value; - switch (type) { - case 'string': - return value.inspect(true); - case 'number': - return isFinite(value) ? String(value) : 'null'; - case 'object': - - for (var i = 0, length = stack.length; i < length; i++) { - if (stack[i] === value) { throw new TypeError(); } - } - stack.push(value); - - var partial = []; - if (_class === ARRAY_CLASS) { - for (var i = 0, length = value.length; i < length; i++) { - var str = Str(i, value, stack); - partial.push(typeof str === 'undefined' ? 'null' : str); - } - partial = '[' + partial.join(',') + ']'; - } else { - var keys = Object.keys(value); - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i], str = Str(key, value, stack); - if (typeof str !== "undefined") { - partial.push(key.inspect(true)+ ':' + str); - } - } - partial = '{' + partial.join(',') + '}'; - } - stack.pop(); - return partial; - } - } - - function stringify(object) { - return JSON.stringify(object); - } - - function toQueryString(object) { - return $H(object).toQueryString(); - } - - function toHTML(object) { - return object && object.toHTML ? object.toHTML() : String.interpret(object); - } - - function keys(object) { - if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } - var results = []; - for (var property in object) { - if (object.hasOwnProperty(property)) { - results.push(property); - } - } - return results; - } - - function values(object) { - var results = []; - for (var property in object) - results.push(object[property]); - return results; - } - - function clone(object) { - return extend({ }, object); - } - - function isElement(object) { - return !!(object && object.nodeType == 1); - } - - function isArray(object) { - return _toString.call(object) === ARRAY_CLASS; - } - - var hasNativeIsArray = (typeof Array.isArray == 'function') - && Array.isArray([]) && !Array.isArray({}); - - if (hasNativeIsArray) { - isArray = Array.isArray; - } - - function isHash(object) { - return object instanceof Hash; - } - - function isFunction(object) { - return typeof object === "function"; - } - - function isString(object) { - return _toString.call(object) === STRING_CLASS; - } - - function isNumber(object) { - return _toString.call(object) === NUMBER_CLASS; - } - - function isUndefined(object) { - return typeof object === "undefined"; - } - - extend(Object, { - extend: extend, - inspect: inspect, - toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, - toQueryString: toQueryString, - toHTML: toHTML, - keys: Object.keys || keys, - values: values, - clone: clone, - isElement: isElement, - isArray: isArray, - isHash: isHash, - isFunction: isFunction, - isString: isString, - isNumber: isNumber, - isUndefined: isUndefined - }); -})(); -Object.extend(Function.prototype, (function() { - var slice = Array.prototype.slice; - - function update(array, args) { - var arrayLength = array.length, length = args.length; - while (length--) array[arrayLength + length] = args[length]; - return array; - } - - function merge(array, args) { - array = slice.call(array, 0); - return update(array, args); - } - - function argumentNames() { - var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] - .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') - .replace(/\s+/g, '').split(','); - return names.length == 1 && !names[0] ? [] : names; - } - - function bind(context) { - if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; - var __method = this, args = slice.call(arguments, 1); - return function() { - var a = merge(args, arguments); - return __method.apply(context, a); - } - } - - function bindAsEventListener(context) { - var __method = this, args = slice.call(arguments, 1); - return function(event) { - var a = update([event || window.event], args); - return __method.apply(context, a); - } - } - - function curry() { - if (!arguments.length) return this; - var __method = this, args = slice.call(arguments, 0); - return function() { - var a = merge(args, arguments); - return __method.apply(this, a); - } - } - - function delay(timeout) { - var __method = this, args = slice.call(arguments, 1); - timeout = timeout * 1000; - return window.setTimeout(function() { - return __method.apply(__method, args); - }, timeout); - } - - function defer() { - var args = update([0.01], arguments); - return this.delay.apply(this, args); - } - - function wrap(wrapper) { - var __method = this; - return function() { - var a = update([__method.bind(this)], arguments); - return wrapper.apply(this, a); - } - } - - function methodize() { - if (this._methodized) return this._methodized; - var __method = this; - return this._methodized = function() { - var a = update([this], arguments); - return __method.apply(null, a); - }; - } - - return { - argumentNames: argumentNames, - bind: bind, - bindAsEventListener: bindAsEventListener, - curry: curry, - delay: delay, - defer: defer, - wrap: wrap, - methodize: methodize - } -})()); - - - -(function(proto) { - - - function toISOString() { - return this.getUTCFullYear() + '-' + - (this.getUTCMonth() + 1).toPaddedString(2) + '-' + - this.getUTCDate().toPaddedString(2) + 'T' + - this.getUTCHours().toPaddedString(2) + ':' + - this.getUTCMinutes().toPaddedString(2) + ':' + - this.getUTCSeconds().toPaddedString(2) + 'Z'; - } - - - function toJSON() { - return this.toISOString(); - } - - if (!proto.toISOString) proto.toISOString = toISOString; - if (!proto.toJSON) proto.toJSON = toJSON; - -})(Date.prototype); - - -RegExp.prototype.match = RegExp.prototype.test; - -RegExp.escape = function(str) { - return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); -}; -var PeriodicalExecuter = Class.create({ - initialize: function(callback, frequency) { - this.callback = callback; - this.frequency = frequency; - this.currentlyExecuting = false; - - this.registerCallback(); - }, - - registerCallback: function() { - this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - execute: function() { - this.callback(this); - }, - - stop: function() { - if (!this.timer) return; - clearInterval(this.timer); - this.timer = null; - }, - - onTimerEvent: function() { - if (!this.currentlyExecuting) { - try { - this.currentlyExecuting = true; - this.execute(); - this.currentlyExecuting = false; - } catch(e) { - this.currentlyExecuting = false; - throw e; - } - } - } -}); -Object.extend(String, { - interpret: function(value) { - return value == null ? '' : String(value); - }, - specialChar: { - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '\\': '\\\\' - } -}); - -Object.extend(String.prototype, (function() { - var NATIVE_JSON_PARSE_SUPPORT = window.JSON && - typeof JSON.parse === 'function' && - JSON.parse('{"test": true}').test; - - function prepareReplacement(replacement) { - if (Object.isFunction(replacement)) return replacement; - var template = new Template(replacement); - return function(match) { return template.evaluate(match) }; - } - - function gsub(pattern, replacement) { - var result = '', source = this, match; - replacement = prepareReplacement(replacement); - - if (Object.isString(pattern)) - pattern = RegExp.escape(pattern); - - if (!(pattern.length || pattern.source)) { - replacement = replacement(''); - return replacement + source.split('').join(replacement) + replacement; - } - - while (source.length > 0) { - if (match = source.match(pattern)) { - result += source.slice(0, match.index); - result += String.interpret(replacement(match)); - source = source.slice(match.index + match[0].length); - } else { - result += source, source = ''; - } - } - return result; - } - - function sub(pattern, replacement, count) { - replacement = prepareReplacement(replacement); - count = Object.isUndefined(count) ? 1 : count; - - return this.gsub(pattern, function(match) { - if (--count < 0) return match[0]; - return replacement(match); - }); - } - - function scan(pattern, iterator) { - this.gsub(pattern, iterator); - return String(this); - } - - function truncate(length, truncation) { - length = length || 30; - truncation = Object.isUndefined(truncation) ? '...' : truncation; - return this.length > length ? - this.slice(0, length - truncation.length) + truncation : String(this); - } - - function strip() { - return this.replace(/^\s+/, '').replace(/\s+$/, ''); - } - - function stripTags() { - return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); - } - - function stripScripts() { - return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); - } - - function extractScripts() { - var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), - matchOne = new RegExp(Prototype.ScriptFragment, 'im'); - return (this.match(matchAll) || []).map(function(scriptTag) { - return (scriptTag.match(matchOne) || ['', ''])[1]; - }); - } - - function evalScripts() { - return this.extractScripts().map(function(script) { return eval(script) }); - } - - function escapeHTML() { - return this.replace(/&/g,'&').replace(//g,'>'); - } - - function unescapeHTML() { - return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); - } - - - function toQueryParams(separator) { - var match = this.strip().match(/([^?#]*)(#.*)?$/); - if (!match) return { }; - - return match[1].split(separator || '&').inject({ }, function(hash, pair) { - if ((pair = pair.split('='))[0]) { - var key = decodeURIComponent(pair.shift()), - value = pair.length > 1 ? pair.join('=') : pair[0]; - - if (value != undefined) value = decodeURIComponent(value); - - if (key in hash) { - if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; - hash[key].push(value); - } - else hash[key] = value; - } - return hash; - }); - } - - function toArray() { - return this.split(''); - } - - function succ() { - return this.slice(0, this.length - 1) + - String.fromCharCode(this.charCodeAt(this.length - 1) + 1); - } - - function times(count) { - return count < 1 ? '' : new Array(count + 1).join(this); - } - - function camelize() { - return this.replace(/-+(.)?/g, function(match, chr) { - return chr ? chr.toUpperCase() : ''; - }); - } - - function capitalize() { - return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); - } - - function underscore() { - return this.replace(/::/g, '/') - .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') - .replace(/([a-z\d])([A-Z])/g, '$1_$2') - .replace(/-/g, '_') - .toLowerCase(); - } - - function dasherize() { - return this.replace(/_/g, '-'); - } - - function inspect(useDoubleQuotes) { - var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { - if (character in String.specialChar) { - return String.specialChar[character]; - } - return '\\u00' + character.charCodeAt().toPaddedString(2, 16); - }); - if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; - return "'" + escapedString.replace(/'/g, '\\\'') + "'"; - } - - function unfilterJSON(filter) { - return this.replace(filter || Prototype.JSONFilter, '$1'); - } - - function isJSON() { - var str = this; - if (str.blank()) return false; - str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); - str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); - str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); - return (/^[\],:{}\s]*$/).test(str); - } - - function evalJSON(sanitize) { - var json = this.unfilterJSON(), - cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; - if (cx.test(json)) { - json = json.replace(cx, function (a) { - return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - try { - if (!sanitize || json.isJSON()) return eval('(' + json + ')'); - } catch (e) { } - throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); - } - - function parseJSON() { - var json = this.unfilterJSON(); - return JSON.parse(json); - } - - function include(pattern) { - return this.indexOf(pattern) > -1; - } - - function startsWith(pattern) { - return this.lastIndexOf(pattern, 0) === 0; - } - - function endsWith(pattern) { - var d = this.length - pattern.length; - return d >= 0 && this.indexOf(pattern, d) === d; - } - - function empty() { - return this == ''; - } - - function blank() { - return /^\s*$/.test(this); - } - - function interpolate(object, pattern) { - return new Template(this, pattern).evaluate(object); - } - - return { - gsub: gsub, - sub: sub, - scan: scan, - truncate: truncate, - strip: String.prototype.trim || strip, - stripTags: stripTags, - stripScripts: stripScripts, - extractScripts: extractScripts, - evalScripts: evalScripts, - escapeHTML: escapeHTML, - unescapeHTML: unescapeHTML, - toQueryParams: toQueryParams, - parseQuery: toQueryParams, - toArray: toArray, - succ: succ, - times: times, - camelize: camelize, - capitalize: capitalize, - underscore: underscore, - dasherize: dasherize, - inspect: inspect, - unfilterJSON: unfilterJSON, - isJSON: isJSON, - evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, - include: include, - startsWith: startsWith, - endsWith: endsWith, - empty: empty, - blank: blank, - interpolate: interpolate - }; -})()); - -var Template = Class.create({ - initialize: function(template, pattern) { - this.template = template.toString(); - this.pattern = pattern || Template.Pattern; - }, - - evaluate: function(object) { - if (object && Object.isFunction(object.toTemplateReplacements)) - object = object.toTemplateReplacements(); - - return this.template.gsub(this.pattern, function(match) { - if (object == null) return (match[1] + ''); - - var before = match[1] || ''; - if (before == '\\') return match[2]; - - var ctx = object, expr = match[3], - pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; - - match = pattern.exec(expr); - if (match == null) return before; - - while (match != null) { - var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; - ctx = ctx[comp]; - if (null == ctx || '' == match[3]) break; - expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); - match = pattern.exec(expr); - } - - return before + String.interpret(ctx); - }); - } -}); -Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; - -var $break = { }; - -var Enumerable = (function() { - function each(iterator, context) { - var index = 0; - try { - this._each(function(value) { - iterator.call(context, value, index++); - }); - } catch (e) { - if (e != $break) throw e; - } - return this; - } - - function eachSlice(number, iterator, context) { - var index = -number, slices = [], array = this.toArray(); - if (number < 1) return array; - while ((index += number) < array.length) - slices.push(array.slice(index, index+number)); - return slices.collect(iterator, context); - } - - function all(iterator, context) { - iterator = iterator || Prototype.K; - var result = true; - this.each(function(value, index) { - result = result && !!iterator.call(context, value, index); - if (!result) throw $break; - }); - return result; - } - - function any(iterator, context) { - iterator = iterator || Prototype.K; - var result = false; - this.each(function(value, index) { - if (result = !!iterator.call(context, value, index)) - throw $break; - }); - return result; - } - - function collect(iterator, context) { - iterator = iterator || Prototype.K; - var results = []; - this.each(function(value, index) { - results.push(iterator.call(context, value, index)); - }); - return results; - } - - function detect(iterator, context) { - var result; - this.each(function(value, index) { - if (iterator.call(context, value, index)) { - result = value; - throw $break; - } - }); - return result; - } - - function findAll(iterator, context) { - var results = []; - this.each(function(value, index) { - if (iterator.call(context, value, index)) - results.push(value); - }); - return results; - } - - function grep(filter, iterator, context) { - iterator = iterator || Prototype.K; - var results = []; - - if (Object.isString(filter)) - filter = new RegExp(RegExp.escape(filter)); - - this.each(function(value, index) { - if (filter.match(value)) - results.push(iterator.call(context, value, index)); - }); - return results; - } - - function include(object) { - if (Object.isFunction(this.indexOf)) - if (this.indexOf(object) != -1) return true; - - var found = false; - this.each(function(value) { - if (value == object) { - found = true; - throw $break; - } - }); - return found; - } - - function inGroupsOf(number, fillWith) { - fillWith = Object.isUndefined(fillWith) ? null : fillWith; - return this.eachSlice(number, function(slice) { - while(slice.length < number) slice.push(fillWith); - return slice; - }); - } - - function inject(memo, iterator, context) { - this.each(function(value, index) { - memo = iterator.call(context, memo, value, index); - }); - return memo; - } - - function invoke(method) { - var args = $A(arguments).slice(1); - return this.map(function(value) { - return value[method].apply(value, args); - }); - } - - function max(iterator, context) { - iterator = iterator || Prototype.K; - var result; - this.each(function(value, index) { - value = iterator.call(context, value, index); - if (result == null || value >= result) - result = value; - }); - return result; - } - - function min(iterator, context) { - iterator = iterator || Prototype.K; - var result; - this.each(function(value, index) { - value = iterator.call(context, value, index); - if (result == null || value < result) - result = value; - }); - return result; - } - - function partition(iterator, context) { - iterator = iterator || Prototype.K; - var trues = [], falses = []; - this.each(function(value, index) { - (iterator.call(context, value, index) ? - trues : falses).push(value); - }); - return [trues, falses]; - } - - function pluck(property) { - var results = []; - this.each(function(value) { - results.push(value[property]); - }); - return results; - } - - function reject(iterator, context) { - var results = []; - this.each(function(value, index) { - if (!iterator.call(context, value, index)) - results.push(value); - }); - return results; - } - - function sortBy(iterator, context) { - return this.map(function(value, index) { - return { - value: value, - criteria: iterator.call(context, value, index) - }; - }).sort(function(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }).pluck('value'); - } - - function toArray() { - return this.map(); - } - - function zip() { - var iterator = Prototype.K, args = $A(arguments); - if (Object.isFunction(args.last())) - iterator = args.pop(); - - var collections = [this].concat(args).map($A); - return this.map(function(value, index) { - return iterator(collections.pluck(index)); - }); - } - - function size() { - return this.toArray().length; - } - - function inspect() { - return '#'; - } - - - - - - - - - - return { - each: each, - eachSlice: eachSlice, - all: all, - every: all, - any: any, - some: any, - collect: collect, - map: collect, - detect: detect, - findAll: findAll, - select: findAll, - filter: findAll, - grep: grep, - include: include, - member: include, - inGroupsOf: inGroupsOf, - inject: inject, - invoke: invoke, - max: max, - min: min, - partition: partition, - pluck: pluck, - reject: reject, - sortBy: sortBy, - toArray: toArray, - entries: toArray, - zip: zip, - size: size, - inspect: inspect, - find: detect - }; -})(); - -function $A(iterable) { - if (!iterable) return []; - if ('toArray' in Object(iterable)) return iterable.toArray(); - var length = iterable.length || 0, results = new Array(length); - while (length--) results[length] = iterable[length]; - return results; -} - - -function $w(string) { - if (!Object.isString(string)) return []; - string = string.strip(); - return string ? string.split(/\s+/) : []; -} - -Array.from = $A; - - -(function() { - var arrayProto = Array.prototype, - slice = arrayProto.slice, - _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available - - function each(iterator) { - for (var i = 0, length = this.length; i < length; i++) - iterator(this[i]); - } - if (!_each) _each = each; - - function clear() { - this.length = 0; - return this; - } - - function first() { - return this[0]; - } - - function last() { - return this[this.length - 1]; - } - - function compact() { - return this.select(function(value) { - return value != null; - }); - } - - function flatten() { - return this.inject([], function(array, value) { - if (Object.isArray(value)) - return array.concat(value.flatten()); - array.push(value); - return array; - }); - } - - function without() { - var values = slice.call(arguments, 0); - return this.select(function(value) { - return !values.include(value); - }); - } - - function reverse(inline) { - return (inline === false ? this.toArray() : this)._reverse(); - } - - function uniq(sorted) { - return this.inject([], function(array, value, index) { - if (0 == index || (sorted ? array.last() != value : !array.include(value))) - array.push(value); - return array; - }); - } - - function intersect(array) { - return this.uniq().findAll(function(item) { - return array.detect(function(value) { return item === value }); - }); - } - - - function clone() { - return slice.call(this, 0); - } - - function size() { - return this.length; - } - - function inspect() { - return '[' + this.map(Object.inspect).join(', ') + ']'; - } - - function indexOf(item, i) { - i || (i = 0); - var length = this.length; - if (i < 0) i = length + i; - for (; i < length; i++) - if (this[i] === item) return i; - return -1; - } - - function lastIndexOf(item, i) { - i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; - var n = this.slice(0, i).reverse().indexOf(item); - return (n < 0) ? n : i - n - 1; - } - - function concat() { - var array = slice.call(this, 0), item; - for (var i = 0, length = arguments.length; i < length; i++) { - item = arguments[i]; - if (Object.isArray(item) && !('callee' in item)) { - for (var j = 0, arrayLength = item.length; j < arrayLength; j++) - array.push(item[j]); - } else { - array.push(item); - } - } - return array; - } - - Object.extend(arrayProto, Enumerable); - - if (!arrayProto._reverse) - arrayProto._reverse = arrayProto.reverse; - - Object.extend(arrayProto, { - _each: _each, - clear: clear, - first: first, - last: last, - compact: compact, - flatten: flatten, - without: without, - reverse: reverse, - uniq: uniq, - intersect: intersect, - clone: clone, - toArray: clone, - size: size, - inspect: inspect - }); - - var CONCAT_ARGUMENTS_BUGGY = (function() { - return [].concat(arguments)[0][0] !== 1; - })(1,2) - - if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; - - if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; - if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; -})(); -function $H(object) { - return new Hash(object); -}; - -var Hash = Class.create(Enumerable, (function() { - function initialize(object) { - this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); - } - - - function _each(iterator) { - for (var key in this._object) { - var value = this._object[key], pair = [key, value]; - pair.key = key; - pair.value = value; - iterator(pair); - } - } - - function set(key, value) { - return this._object[key] = value; - } - - function get(key) { - if (this._object[key] !== Object.prototype[key]) - return this._object[key]; - } - - function unset(key) { - var value = this._object[key]; - delete this._object[key]; - return value; - } - - function toObject() { - return Object.clone(this._object); - } - - - - function keys() { - return this.pluck('key'); - } - - function values() { - return this.pluck('value'); - } - - function index(value) { - var match = this.detect(function(pair) { - return pair.value === value; - }); - return match && match.key; - } - - function merge(object) { - return this.clone().update(object); - } - - function update(object) { - return new Hash(object).inject(this, function(result, pair) { - result.set(pair.key, pair.value); - return result; - }); - } - - function toQueryPair(key, value) { - if (Object.isUndefined(value)) return key; - return key + '=' + encodeURIComponent(String.interpret(value)); - } - - function toQueryString() { - return this.inject([], function(results, pair) { - var key = encodeURIComponent(pair.key), values = pair.value; - - if (values && typeof values == 'object') { - if (Object.isArray(values)) - return results.concat(values.map(toQueryPair.curry(key))); - } else results.push(toQueryPair(key, values)); - return results; - }).join('&'); - } - - function inspect() { - return '#'; - } - - function clone() { - return new Hash(this); - } - - return { - initialize: initialize, - _each: _each, - set: set, - get: get, - unset: unset, - toObject: toObject, - toTemplateReplacements: toObject, - keys: keys, - values: values, - index: index, - merge: merge, - update: update, - toQueryString: toQueryString, - inspect: inspect, - toJSON: toObject, - clone: clone - }; -})()); - -Hash.from = $H; -Object.extend(Number.prototype, (function() { - function toColorPart() { - return this.toPaddedString(2, 16); - } - - function succ() { - return this + 1; - } - - function times(iterator, context) { - $R(0, this, true).each(iterator, context); - return this; - } - - function toPaddedString(length, radix) { - var string = this.toString(radix || 10); - return '0'.times(length - string.length) + string; - } - - function abs() { - return Math.abs(this); - } - - function round() { - return Math.round(this); - } - - function ceil() { - return Math.ceil(this); - } - - function floor() { - return Math.floor(this); - } - - return { - toColorPart: toColorPart, - succ: succ, - times: times, - toPaddedString: toPaddedString, - abs: abs, - round: round, - ceil: ceil, - floor: floor - }; -})()); - -function $R(start, end, exclusive) { - return new ObjectRange(start, end, exclusive); -} - -var ObjectRange = Class.create(Enumerable, (function() { - function initialize(start, end, exclusive) { - this.start = start; - this.end = end; - this.exclusive = exclusive; - } - - function _each(iterator) { - var value = this.start; - while (this.include(value)) { - iterator(value); - value = value.succ(); - } - } - - function include(value) { - if (value < this.start) - return false; - if (this.exclusive) - return value < this.end; - return value <= this.end; - } - - return { - initialize: initialize, - _each: _each, - include: include - }; -})()); - - - -var Ajax = { - getTransport: function() { - return Try.these( - function() {return new XMLHttpRequest()}, - function() {return new ActiveXObject('Msxml2.XMLHTTP')}, - function() {return new ActiveXObject('Microsoft.XMLHTTP')} - ) || false; - }, - - activeRequestCount: 0 -}; - -Ajax.Responders = { - responders: [], - - _each: function(iterator) { - this.responders._each(iterator); - }, - - register: function(responder) { - if (!this.include(responder)) - this.responders.push(responder); - }, - - unregister: function(responder) { - this.responders = this.responders.without(responder); - }, - - dispatch: function(callback, request, transport, json) { - this.each(function(responder) { - if (Object.isFunction(responder[callback])) { - try { - responder[callback].apply(responder, [request, transport, json]); - } catch (e) { } - } - }); - } -}; - -Object.extend(Ajax.Responders, Enumerable); - -Ajax.Responders.register({ - onCreate: function() { Ajax.activeRequestCount++ }, - onComplete: function() { Ajax.activeRequestCount-- } -}); -Ajax.Base = Class.create({ - initialize: function(options) { - this.options = { - method: 'post', - asynchronous: true, - contentType: 'application/x-www-form-urlencoded', - encoding: 'UTF-8', - parameters: '', - evalJSON: true, - evalJS: true - }; - Object.extend(this.options, options || { }); - - this.options.method = this.options.method.toLowerCase(); - - if (Object.isString(this.options.parameters)) - this.options.parameters = this.options.parameters.toQueryParams(); - else if (Object.isHash(this.options.parameters)) - this.options.parameters = this.options.parameters.toObject(); - } -}); -Ajax.Request = Class.create(Ajax.Base, { - _complete: false, - - initialize: function($super, url, options) { - $super(options); - this.transport = Ajax.getTransport(); - this.request(url); - }, - - request: function(url) { - this.url = url; - this.method = this.options.method; - var params = Object.clone(this.options.parameters); - - if (!['get', 'post'].include(this.method)) { - params['_method'] = this.method; - this.method = 'post'; - } - - this.parameters = params; - - if (params = Object.toQueryString(params)) { - if (this.method == 'get') - this.url += (this.url.include('?') ? '&' : '?') + params; - else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) - params += '&_='; - } - - try { - var response = new Ajax.Response(this); - if (this.options.onCreate) this.options.onCreate(response); - Ajax.Responders.dispatch('onCreate', this, response); - - this.transport.open(this.method.toUpperCase(), this.url, - this.options.asynchronous); - - if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); - - this.transport.onreadystatechange = this.onStateChange.bind(this); - this.setRequestHeaders(); - - this.body = this.method == 'post' ? (this.options.postBody || params) : null; - this.transport.send(this.body); - - /* Force Firefox to handle ready state 4 for synchronous requests */ - if (!this.options.asynchronous && this.transport.overrideMimeType) - this.onStateChange(); - - } - catch (e) { - this.dispatchException(e); - } - }, - - onStateChange: function() { - var readyState = this.transport.readyState; - if (readyState > 1 && !((readyState == 4) && this._complete)) - this.respondToReadyState(this.transport.readyState); - }, - - setRequestHeaders: function() { - var headers = { - 'X-Requested-With': 'XMLHttpRequest', - 'X-Prototype-Version': Prototype.Version, - 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' - }; - - if (this.method == 'post') { - headers['Content-type'] = this.options.contentType + - (this.options.encoding ? '; charset=' + this.options.encoding : ''); - - /* Force "Connection: close" for older Mozilla browsers to work - * around a bug where XMLHttpRequest sends an incorrect - * Content-length header. See Mozilla Bugzilla #246651. - */ - if (this.transport.overrideMimeType && - (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) - headers['Connection'] = 'close'; - } - - if (typeof this.options.requestHeaders == 'object') { - var extras = this.options.requestHeaders; - - if (Object.isFunction(extras.push)) - for (var i = 0, length = extras.length; i < length; i += 2) - headers[extras[i]] = extras[i+1]; - else - $H(extras).each(function(pair) { headers[pair.key] = pair.value }); - } - - for (var name in headers) - this.transport.setRequestHeader(name, headers[name]); - }, - - success: function() { - var status = this.getStatus(); - return !status || (status >= 200 && status < 300); - }, - - getStatus: function() { - try { - return this.transport.status || 0; - } catch (e) { return 0 } - }, - - respondToReadyState: function(readyState) { - var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); - - if (state == 'Complete') { - try { - this._complete = true; - (this.options['on' + response.status] - || this.options['on' + (this.success() ? 'Success' : 'Failure')] - || Prototype.emptyFunction)(response, response.headerJSON); - } catch (e) { - this.dispatchException(e); - } - - var contentType = response.getHeader('Content-type'); - if (this.options.evalJS == 'force' - || (this.options.evalJS && this.isSameOrigin() && contentType - && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) - this.evalResponse(); - } - - try { - (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); - Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); - } catch (e) { - this.dispatchException(e); - } - - if (state == 'Complete') { - this.transport.onreadystatechange = Prototype.emptyFunction; - } - }, - - isSameOrigin: function() { - var m = this.url.match(/^\s*https?:\/\/[^\/]*/); - return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ - protocol: location.protocol, - domain: document.domain, - port: location.port ? ':' + location.port : '' - })); - }, - - getHeader: function(name) { - try { - return this.transport.getResponseHeader(name) || null; - } catch (e) { return null; } - }, - - evalResponse: function() { - try { - return eval((this.transport.responseText || '').unfilterJSON()); - } catch (e) { - this.dispatchException(e); - } - }, - - dispatchException: function(exception) { - (this.options.onException || Prototype.emptyFunction)(this, exception); - Ajax.Responders.dispatch('onException', this, exception); - } -}); - -Ajax.Request.Events = - ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; - - - - - - - - -Ajax.Response = Class.create({ - initialize: function(request){ - this.request = request; - var transport = this.transport = request.transport, - readyState = this.readyState = transport.readyState; - - if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { - this.status = this.getStatus(); - this.statusText = this.getStatusText(); - this.responseText = String.interpret(transport.responseText); - this.headerJSON = this._getHeaderJSON(); - } - - if (readyState == 4) { - var xml = transport.responseXML; - this.responseXML = Object.isUndefined(xml) ? null : xml; - this.responseJSON = this._getResponseJSON(); - } - }, - - status: 0, - - statusText: '', - - getStatus: Ajax.Request.prototype.getStatus, - - getStatusText: function() { - try { - return this.transport.statusText || ''; - } catch (e) { return '' } - }, - - getHeader: Ajax.Request.prototype.getHeader, - - getAllHeaders: function() { - try { - return this.getAllResponseHeaders(); - } catch (e) { return null } - }, - - getResponseHeader: function(name) { - return this.transport.getResponseHeader(name); - }, - - getAllResponseHeaders: function() { - return this.transport.getAllResponseHeaders(); - }, - - _getHeaderJSON: function() { - var json = this.getHeader('X-JSON'); - if (!json) return null; - json = decodeURIComponent(escape(json)); - try { - return json.evalJSON(this.request.options.sanitizeJSON || - !this.request.isSameOrigin()); - } catch (e) { - this.request.dispatchException(e); - } - }, - - _getResponseJSON: function() { - var options = this.request.options; - if (!options.evalJSON || (options.evalJSON != 'force' && - !(this.getHeader('Content-type') || '').include('application/json')) || - this.responseText.blank()) - return null; - try { - return this.responseText.evalJSON(options.sanitizeJSON || - !this.request.isSameOrigin()); - } catch (e) { - this.request.dispatchException(e); - } - } -}); - -Ajax.Updater = Class.create(Ajax.Request, { - initialize: function($super, container, url, options) { - this.container = { - success: (container.success || container), - failure: (container.failure || (container.success ? null : container)) - }; - - options = Object.clone(options); - var onComplete = options.onComplete; - options.onComplete = (function(response, json) { - this.updateContent(response.responseText); - if (Object.isFunction(onComplete)) onComplete(response, json); - }).bind(this); - - $super(url, options); - }, - - updateContent: function(responseText) { - var receiver = this.container[this.success() ? 'success' : 'failure'], - options = this.options; - - if (!options.evalScripts) responseText = responseText.stripScripts(); - - if (receiver = $(receiver)) { - if (options.insertion) { - if (Object.isString(options.insertion)) { - var insertion = { }; insertion[options.insertion] = responseText; - receiver.insert(insertion); - } - else options.insertion(receiver, responseText); - } - else receiver.update(responseText); - } - } -}); - -Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { - initialize: function($super, container, url, options) { - $super(options); - this.onComplete = this.options.onComplete; - - this.frequency = (this.options.frequency || 2); - this.decay = (this.options.decay || 1); - - this.updater = { }; - this.container = container; - this.url = url; - - this.start(); - }, - - start: function() { - this.options.onComplete = this.updateComplete.bind(this); - this.onTimerEvent(); - }, - - stop: function() { - this.updater.options.onComplete = undefined; - clearTimeout(this.timer); - (this.onComplete || Prototype.emptyFunction).apply(this, arguments); - }, - - updateComplete: function(response) { - if (this.options.decay) { - this.decay = (response.responseText == this.lastText ? - this.decay * this.options.decay : 1); - - this.lastText = response.responseText; - } - this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); - }, - - onTimerEvent: function() { - this.updater = new Ajax.Updater(this.container, this.url, this.options); - } -}); - - -function $(element) { - if (arguments.length > 1) { - for (var i = 0, elements = [], length = arguments.length; i < length; i++) - elements.push($(arguments[i])); - return elements; - } - if (Object.isString(element)) - element = document.getElementById(element); - return Element.extend(element); -} - -if (Prototype.BrowserFeatures.XPath) { - document._getElementsByXPath = function(expression, parentElement) { - var results = []; - var query = document.evaluate(expression, $(parentElement) || document, - null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); - for (var i = 0, length = query.snapshotLength; i < length; i++) - results.push(Element.extend(query.snapshotItem(i))); - return results; - }; -} - -/*--------------------------------------------------------------------------*/ - -if (!Node) var Node = { }; - -if (!Node.ELEMENT_NODE) { - Object.extend(Node, { - ELEMENT_NODE: 1, - ATTRIBUTE_NODE: 2, - TEXT_NODE: 3, - CDATA_SECTION_NODE: 4, - ENTITY_REFERENCE_NODE: 5, - ENTITY_NODE: 6, - PROCESSING_INSTRUCTION_NODE: 7, - COMMENT_NODE: 8, - DOCUMENT_NODE: 9, - DOCUMENT_TYPE_NODE: 10, - DOCUMENT_FRAGMENT_NODE: 11, - NOTATION_NODE: 12 - }); -} - - - -(function(global) { - - var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ - try { - var el = document.createElement(''); - return el.tagName.toLowerCase() === 'input' && el.name === 'x'; - } - catch(err) { - return false; - } - })(); - - var element = global.Element; - - global.Element = function(tagName, attributes) { - attributes = attributes || { }; - tagName = tagName.toLowerCase(); - var cache = Element.cache; - if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { - tagName = '<' + tagName + ' name="' + attributes.name + '">'; - delete attributes.name; - return Element.writeAttribute(document.createElement(tagName), attributes); - } - if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); - return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); - }; - - Object.extend(global.Element, element || { }); - if (element) global.Element.prototype = element.prototype; - -})(this); - -Element.idCounter = 1; -Element.cache = { }; - -function purgeElement(element) { - var uid = element._prototypeUID; - if (uid) { - Element.stopObserving(element); - element._prototypeUID = void 0; - delete Element.Storage[uid]; - } -} - -Element.Methods = { - visible: function(element) { - return $(element).style.display != 'none'; - }, - - toggle: function(element) { - element = $(element); - Element[Element.visible(element) ? 'hide' : 'show'](element); - return element; - }, - - hide: function(element) { - element = $(element); - element.style.display = 'none'; - return element; - }, - - show: function(element) { - element = $(element); - element.style.display = ''; - return element; - }, - - remove: function(element) { - element = $(element); - element.parentNode.removeChild(element); - return element; - }, - - update: (function(){ - - var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ - var el = document.createElement("select"), - isBuggy = true; - el.innerHTML = ""; - if (el.options && el.options[0]) { - isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; - } - el = null; - return isBuggy; - })(); - - var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ - try { - var el = document.createElement("table"); - if (el && el.tBodies) { - el.innerHTML = "test"; - var isBuggy = typeof el.tBodies[0] == "undefined"; - el = null; - return isBuggy; - } - } catch (e) { - return true; - } - })(); - - var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { - var s = document.createElement("script"), - isBuggy = false; - try { - s.appendChild(document.createTextNode("")); - isBuggy = !s.firstChild || - s.firstChild && s.firstChild.nodeType !== 3; - } catch (e) { - isBuggy = true; - } - s = null; - return isBuggy; - })(); - - function update(element, content) { - element = $(element); - - var descendants = element.getElementsByTagName('*'), - i = descendants.length; - while (i--) purgeElement(descendants[i]); - - if (content && content.toElement) - content = content.toElement(); - - if (Object.isElement(content)) - return element.update().insert(content); - - content = Object.toHTML(content); - - var tagName = element.tagName.toUpperCase(); - - if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { - element.text = content; - return element; - } - - if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) { - if (tagName in Element._insertionTranslations.tags) { - while (element.firstChild) { - element.removeChild(element.firstChild); - } - Element._getContentFromAnonymousElement(tagName, content.stripScripts()) - .each(function(node) { - element.appendChild(node) - }); - } - else { - element.innerHTML = content.stripScripts(); - } - } - else { - element.innerHTML = content.stripScripts(); - } - - content.evalScripts.bind(content).defer(); - return element; - } - - return update; - })(), - - replace: function(element, content) { - element = $(element); - if (content && content.toElement) content = content.toElement(); - else if (!Object.isElement(content)) { - content = Object.toHTML(content); - var range = element.ownerDocument.createRange(); - range.selectNode(element); - content.evalScripts.bind(content).defer(); - content = range.createContextualFragment(content.stripScripts()); - } - element.parentNode.replaceChild(content, element); - return element; - }, - - insert: function(element, insertions) { - element = $(element); - - if (Object.isString(insertions) || Object.isNumber(insertions) || - Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) - insertions = {bottom:insertions}; - - var content, insert, tagName, childNodes; - - for (var position in insertions) { - content = insertions[position]; - position = position.toLowerCase(); - insert = Element._insertionTranslations[position]; - - if (content && content.toElement) content = content.toElement(); - if (Object.isElement(content)) { - insert(element, content); - continue; - } - - content = Object.toHTML(content); - - tagName = ((position == 'before' || position == 'after') - ? element.parentNode : element).tagName.toUpperCase(); - - childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); - - if (position == 'top' || position == 'after') childNodes.reverse(); - childNodes.each(insert.curry(element)); - - content.evalScripts.bind(content).defer(); - } - - return element; - }, - - wrap: function(element, wrapper, attributes) { - element = $(element); - if (Object.isElement(wrapper)) - $(wrapper).writeAttribute(attributes || { }); - else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); - else wrapper = new Element('div', wrapper); - if (element.parentNode) - element.parentNode.replaceChild(wrapper, element); - wrapper.appendChild(element); - return wrapper; - }, - - inspect: function(element) { - element = $(element); - var result = '<' + element.tagName.toLowerCase(); - $H({'id': 'id', 'className': 'class'}).each(function(pair) { - var property = pair.first(), - attribute = pair.last(), - value = (element[property] || '').toString(); - if (value) result += ' ' + attribute + '=' + value.inspect(true); - }); - return result + '>'; - }, - - recursivelyCollect: function(element, property, maximumLength) { - element = $(element); - maximumLength = maximumLength || -1; - var elements = []; - - while (element = element[property]) { - if (element.nodeType == 1) - elements.push(Element.extend(element)); - if (elements.length == maximumLength) - break; - } - - return elements; - }, - - ancestors: function(element) { - return Element.recursivelyCollect(element, 'parentNode'); - }, - - descendants: function(element) { - return Element.select(element, "*"); - }, - - firstDescendant: function(element) { - element = $(element).firstChild; - while (element && element.nodeType != 1) element = element.nextSibling; - return $(element); - }, - - immediateDescendants: function(element) { - var results = [], child = $(element).firstChild; - while (child) { - if (child.nodeType === 1) { - results.push(Element.extend(child)); - } - child = child.nextSibling; - } - return results; - }, - - previousSiblings: function(element, maximumLength) { - return Element.recursivelyCollect(element, 'previousSibling'); - }, - - nextSiblings: function(element) { - return Element.recursivelyCollect(element, 'nextSibling'); - }, - - siblings: function(element) { - element = $(element); - return Element.previousSiblings(element).reverse() - .concat(Element.nextSiblings(element)); - }, - - match: function(element, selector) { - element = $(element); - if (Object.isString(selector)) - return Prototype.Selector.match(element, selector); - return selector.match(element); - }, - - up: function(element, expression, index) { - element = $(element); - if (arguments.length == 1) return $(element.parentNode); - var ancestors = Element.ancestors(element); - return Object.isNumber(expression) ? ancestors[expression] : - Prototype.Selector.find(ancestors, expression, index); - }, - - down: function(element, expression, index) { - element = $(element); - if (arguments.length == 1) return Element.firstDescendant(element); - return Object.isNumber(expression) ? Element.descendants(element)[expression] : - Element.select(element, expression)[index || 0]; - }, - - previous: function(element, expression, index) { - element = $(element); - if (Object.isNumber(expression)) index = expression, expression = false; - if (!Object.isNumber(index)) index = 0; - - if (expression) { - return Prototype.Selector.find(element.previousSiblings(), expression, index); - } else { - return element.recursivelyCollect("previousSibling", index + 1)[index]; - } - }, - - next: function(element, expression, index) { - element = $(element); - if (Object.isNumber(expression)) index = expression, expression = false; - if (!Object.isNumber(index)) index = 0; - - if (expression) { - return Prototype.Selector.find(element.nextSiblings(), expression, index); - } else { - var maximumLength = Object.isNumber(index) ? index + 1 : 1; - return element.recursivelyCollect("nextSibling", index + 1)[index]; - } - }, - - - select: function(element) { - element = $(element); - var expressions = Array.prototype.slice.call(arguments, 1).join(', '); - return Prototype.Selector.select(expressions, element); - }, - - adjacent: function(element) { - element = $(element); - var expressions = Array.prototype.slice.call(arguments, 1).join(', '); - return Prototype.Selector.select(expressions, element.parentNode).without(element); - }, - - identify: function(element) { - element = $(element); - var id = Element.readAttribute(element, 'id'); - if (id) return id; - do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id)); - Element.writeAttribute(element, 'id', id); - return id; - }, - - readAttribute: function(element, name) { - element = $(element); - if (Prototype.Browser.IE) { - var t = Element._attributeTranslations.read; - if (t.values[name]) return t.values[name](element, name); - if (t.names[name]) name = t.names[name]; - if (name.include(':')) { - return (!element.attributes || !element.attributes[name]) ? null : - element.attributes[name].value; - } - } - return element.getAttribute(name); - }, - - writeAttribute: function(element, name, value) { - element = $(element); - var attributes = { }, t = Element._attributeTranslations.write; - - if (typeof name == 'object') attributes = name; - else attributes[name] = Object.isUndefined(value) ? true : value; - - for (var attr in attributes) { - name = t.names[attr] || attr; - value = attributes[attr]; - if (t.values[attr]) name = t.values[attr](element, value); - if (value === false || value === null) - element.removeAttribute(name); - else if (value === true) - element.setAttribute(name, name); - else element.setAttribute(name, value); - } - return element; - }, - - getHeight: function(element) { - return Element.getDimensions(element).height; - }, - - getWidth: function(element) { - return Element.getDimensions(element).width; - }, - - classNames: function(element) { - return new Element.ClassNames(element); - }, - - hasClassName: function(element, className) { - if (!(element = $(element))) return; - var elementClassName = element.className; - return (elementClassName.length > 0 && (elementClassName == className || - new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); - }, - - addClassName: function(element, className) { - if (!(element = $(element))) return; - if (!Element.hasClassName(element, className)) - element.className += (element.className ? ' ' : '') + className; - return element; - }, - - removeClassName: function(element, className) { - if (!(element = $(element))) return; - element.className = element.className.replace( - new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); - return element; - }, - - toggleClassName: function(element, className) { - if (!(element = $(element))) return; - return Element[Element.hasClassName(element, className) ? - 'removeClassName' : 'addClassName'](element, className); - }, - - cleanWhitespace: function(element) { - element = $(element); - var node = element.firstChild; - while (node) { - var nextNode = node.nextSibling; - if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) - element.removeChild(node); - node = nextNode; - } - return element; - }, - - empty: function(element) { - return $(element).innerHTML.blank(); - }, - - descendantOf: function(element, ancestor) { - element = $(element), ancestor = $(ancestor); - - if (element.compareDocumentPosition) - return (element.compareDocumentPosition(ancestor) & 8) === 8; - - if (ancestor.contains) - return ancestor.contains(element) && ancestor !== element; - - while (element = element.parentNode) - if (element == ancestor) return true; - - return false; - }, - - scrollTo: function(element) { - element = $(element); - var pos = Element.cumulativeOffset(element); - window.scrollTo(pos[0], pos[1]); - return element; - }, - - getStyle: function(element, style) { - element = $(element); - style = style == 'float' ? 'cssFloat' : style.camelize(); - var value = element.style[style]; - if (!value || value == 'auto') { - var css = document.defaultView.getComputedStyle(element, null); - value = css ? css[style] : null; - } - if (style == 'opacity') return value ? parseFloat(value) : 1.0; - return value == 'auto' ? null : value; - }, - - getOpacity: function(element) { - return $(element).getStyle('opacity'); - }, - - setStyle: function(element, styles) { - element = $(element); - var elementStyle = element.style, match; - if (Object.isString(styles)) { - element.style.cssText += ';' + styles; - return styles.include('opacity') ? - element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; - } - for (var property in styles) - if (property == 'opacity') element.setOpacity(styles[property]); - else - elementStyle[(property == 'float' || property == 'cssFloat') ? - (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : - property] = styles[property]; - - return element; - }, - - setOpacity: function(element, value) { - element = $(element); - element.style.opacity = (value == 1 || value === '') ? '' : - (value < 0.00001) ? 0 : value; - return element; - }, - - makePositioned: function(element) { - element = $(element); - var pos = Element.getStyle(element, 'position'); - if (pos == 'static' || !pos) { - element._madePositioned = true; - element.style.position = 'relative'; - if (Prototype.Browser.Opera) { - element.style.top = 0; - element.style.left = 0; - } - } - return element; - }, - - undoPositioned: function(element) { - element = $(element); - if (element._madePositioned) { - element._madePositioned = undefined; - element.style.position = - element.style.top = - element.style.left = - element.style.bottom = - element.style.right = ''; - } - return element; - }, - - makeClipping: function(element) { - element = $(element); - if (element._overflow) return element; - element._overflow = Element.getStyle(element, 'overflow') || 'auto'; - if (element._overflow !== 'hidden') - element.style.overflow = 'hidden'; - return element; - }, - - undoClipping: function(element) { - element = $(element); - if (!element._overflow) return element; - element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; - element._overflow = null; - return element; - }, - - cumulativeOffset: function(element) { - var valueT = 0, valueL = 0; - if (element.parentNode) { - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); - } - return Element._returnOffset(valueL, valueT); - }, - - positionedOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - if (element) { - if (element.tagName.toUpperCase() == 'BODY') break; - var p = Element.getStyle(element, 'position'); - if (p !== 'static') break; - } - } while (element); - return Element._returnOffset(valueL, valueT); - }, - - absolutize: function(element) { - element = $(element); - if (Element.getStyle(element, 'position') == 'absolute') return element; - - var offsets = Element.positionedOffset(element), - top = offsets[1], - left = offsets[0], - width = element.clientWidth, - height = element.clientHeight; - - element._originalLeft = left - parseFloat(element.style.left || 0); - element._originalTop = top - parseFloat(element.style.top || 0); - element._originalWidth = element.style.width; - element._originalHeight = element.style.height; - - element.style.position = 'absolute'; - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.width = width + 'px'; - element.style.height = height + 'px'; - return element; - }, - - relativize: function(element) { - element = $(element); - if (Element.getStyle(element, 'position') == 'relative') return element; - - element.style.position = 'relative'; - var top = parseFloat(element.style.top || 0) - (element._originalTop || 0), - left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); - - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.height = element._originalHeight; - element.style.width = element._originalWidth; - return element; - }, - - cumulativeScrollOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.scrollTop || 0; - valueL += element.scrollLeft || 0; - element = element.parentNode; - } while (element); - return Element._returnOffset(valueL, valueT); - }, - - getOffsetParent: function(element) { - if (element.offsetParent) return $(element.offsetParent); - if (element == document.body) return $(element); - - while ((element = element.parentNode) && element != document.body) - if (Element.getStyle(element, 'position') != 'static') - return $(element); - - return $(document.body); - }, - - viewportOffset: function(forElement) { - var valueT = 0, - valueL = 0, - element = forElement; - - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - - if (element.offsetParent == document.body && - Element.getStyle(element, 'position') == 'absolute') break; - - } while (element = element.offsetParent); - - element = forElement; - do { - if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } - } while (element = element.parentNode); - - return Element._returnOffset(valueL, valueT); - }, - - clonePosition: function(element, source) { - var options = Object.extend({ - setLeft: true, - setTop: true, - setWidth: true, - setHeight: true, - offsetTop: 0, - offsetLeft: 0 - }, arguments[2] || { }); - - source = $(source); - var p = Element.viewportOffset(source), delta = [0, 0], parent = null; - - element = $(element); - - if (Element.getStyle(element, 'position') == 'absolute') { - parent = Element.getOffsetParent(element); - delta = Element.viewportOffset(parent); - } - - if (parent == document.body) { - delta[0] -= document.body.offsetLeft; - delta[1] -= document.body.offsetTop; - } - - if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; - if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; - if (options.setWidth) element.style.width = source.offsetWidth + 'px'; - if (options.setHeight) element.style.height = source.offsetHeight + 'px'; - return element; - } -}; - -Object.extend(Element.Methods, { - getElementsBySelector: Element.Methods.select, - - childElements: Element.Methods.immediateDescendants -}); - -Element._attributeTranslations = { - write: { - names: { - className: 'class', - htmlFor: 'for' - }, - values: { } - } -}; - -if (Prototype.Browser.Opera) { - Element.Methods.getStyle = Element.Methods.getStyle.wrap( - function(proceed, element, style) { - switch (style) { - case 'left': case 'top': case 'right': case 'bottom': - if (proceed(element, 'position') === 'static') return null; - case 'height': case 'width': - if (!Element.visible(element)) return null; - - var dim = parseInt(proceed(element, style), 10); - - if (dim !== element['offset' + style.capitalize()]) - return dim + 'px'; - - var properties; - if (style === 'height') { - properties = ['border-top-width', 'padding-top', - 'padding-bottom', 'border-bottom-width']; - } - else { - properties = ['border-left-width', 'padding-left', - 'padding-right', 'border-right-width']; - } - return properties.inject(dim, function(memo, property) { - var val = proceed(element, property); - return val === null ? memo : memo - parseInt(val, 10); - }) + 'px'; - default: return proceed(element, style); - } - } - ); - - Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( - function(proceed, element, attribute) { - if (attribute === 'title') return element.title; - return proceed(element, attribute); - } - ); -} - -else if (Prototype.Browser.IE) { - Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( - function(proceed, element) { - element = $(element); - if (!element.parentNode) return $(document.body); - var position = element.getStyle('position'); - if (position !== 'static') return proceed(element); - element.setStyle({ position: 'relative' }); - var value = proceed(element); - element.setStyle({ position: position }); - return value; - } - ); - - $w('positionedOffset viewportOffset').each(function(method) { - Element.Methods[method] = Element.Methods[method].wrap( - function(proceed, element) { - element = $(element); - if (!element.parentNode) return Element._returnOffset(0, 0); - var position = element.getStyle('position'); - if (position !== 'static') return proceed(element); - var offsetParent = element.getOffsetParent(); - if (offsetParent && offsetParent.getStyle('position') === 'fixed') - offsetParent.setStyle({ zoom: 1 }); - element.setStyle({ position: 'relative' }); - var value = proceed(element); - element.setStyle({ position: position }); - return value; - } - ); - }); - - Element.Methods.getStyle = function(element, style) { - element = $(element); - style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); - var value = element.style[style]; - if (!value && element.currentStyle) value = element.currentStyle[style]; - - if (style == 'opacity') { - if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) - if (value[1]) return parseFloat(value[1]) / 100; - return 1.0; - } - - if (value == 'auto') { - if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) - return element['offset' + style.capitalize()] + 'px'; - return null; - } - return value; - }; - - Element.Methods.setOpacity = function(element, value) { - function stripAlpha(filter){ - return filter.replace(/alpha\([^\)]*\)/gi,''); - } - element = $(element); - var currentStyle = element.currentStyle; - if ((currentStyle && !currentStyle.hasLayout) || - (!currentStyle && element.style.zoom == 'normal')) - element.style.zoom = 1; - - var filter = element.getStyle('filter'), style = element.style; - if (value == 1 || value === '') { - (filter = stripAlpha(filter)) ? - style.filter = filter : style.removeAttribute('filter'); - return element; - } else if (value < 0.00001) value = 0; - style.filter = stripAlpha(filter) + - 'alpha(opacity=' + (value * 100) + ')'; - return element; - }; - - Element._attributeTranslations = (function(){ - - var classProp = 'className', - forProp = 'for', - el = document.createElement('div'); - - el.setAttribute(classProp, 'x'); - - if (el.className !== 'x') { - el.setAttribute('class', 'x'); - if (el.className === 'x') { - classProp = 'class'; - } - } - el = null; - - el = document.createElement('label'); - el.setAttribute(forProp, 'x'); - if (el.htmlFor !== 'x') { - el.setAttribute('htmlFor', 'x'); - if (el.htmlFor === 'x') { - forProp = 'htmlFor'; - } - } - el = null; - - return { - read: { - names: { - 'class': classProp, - 'className': classProp, - 'for': forProp, - 'htmlFor': forProp - }, - values: { - _getAttr: function(element, attribute) { - return element.getAttribute(attribute); - }, - _getAttr2: function(element, attribute) { - return element.getAttribute(attribute, 2); - }, - _getAttrNode: function(element, attribute) { - var node = element.getAttributeNode(attribute); - return node ? node.value : ""; - }, - _getEv: (function(){ - - var el = document.createElement('div'), f; - el.onclick = Prototype.emptyFunction; - var value = el.getAttribute('onclick'); - - if (String(value).indexOf('{') > -1) { - f = function(element, attribute) { - attribute = element.getAttribute(attribute); - if (!attribute) return null; - attribute = attribute.toString(); - attribute = attribute.split('{')[1]; - attribute = attribute.split('}')[0]; - return attribute.strip(); - }; - } - else if (value === '') { - f = function(element, attribute) { - attribute = element.getAttribute(attribute); - if (!attribute) return null; - return attribute.strip(); - }; - } - el = null; - return f; - })(), - _flag: function(element, attribute) { - return $(element).hasAttribute(attribute) ? attribute : null; - }, - style: function(element) { - return element.style.cssText.toLowerCase(); - }, - title: function(element) { - return element.title; - } - } - } - } - })(); - - Element._attributeTranslations.write = { - names: Object.extend({ - cellpadding: 'cellPadding', - cellspacing: 'cellSpacing' - }, Element._attributeTranslations.read.names), - values: { - checked: function(element, value) { - element.checked = !!value; - }, - - style: function(element, value) { - element.style.cssText = value ? value : ''; - } - } - }; - - Element._attributeTranslations.has = {}; - - $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + - 'encType maxLength readOnly longDesc frameBorder').each(function(attr) { - Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; - Element._attributeTranslations.has[attr.toLowerCase()] = attr; - }); - - (function(v) { - Object.extend(v, { - href: v._getAttr2, - src: v._getAttr2, - type: v._getAttr, - action: v._getAttrNode, - disabled: v._flag, - checked: v._flag, - readonly: v._flag, - multiple: v._flag, - onload: v._getEv, - onunload: v._getEv, - onclick: v._getEv, - ondblclick: v._getEv, - onmousedown: v._getEv, - onmouseup: v._getEv, - onmouseover: v._getEv, - onmousemove: v._getEv, - onmouseout: v._getEv, - onfocus: v._getEv, - onblur: v._getEv, - onkeypress: v._getEv, - onkeydown: v._getEv, - onkeyup: v._getEv, - onsubmit: v._getEv, - onreset: v._getEv, - onselect: v._getEv, - onchange: v._getEv - }); - })(Element._attributeTranslations.read.values); - - if (Prototype.BrowserFeatures.ElementExtensions) { - (function() { - function _descendants(element) { - var nodes = element.getElementsByTagName('*'), results = []; - for (var i = 0, node; node = nodes[i]; i++) - if (node.tagName !== "!") // Filter out comment nodes. - results.push(node); - return results; - } - - Element.Methods.down = function(element, expression, index) { - element = $(element); - if (arguments.length == 1) return element.firstDescendant(); - return Object.isNumber(expression) ? _descendants(element)[expression] : - Element.select(element, expression)[index || 0]; - } - })(); - } - -} - -else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { - Element.Methods.setOpacity = function(element, value) { - element = $(element); - element.style.opacity = (value == 1) ? 0.999999 : - (value === '') ? '' : (value < 0.00001) ? 0 : value; - return element; - }; -} - -else if (Prototype.Browser.WebKit) { - Element.Methods.setOpacity = function(element, value) { - element = $(element); - element.style.opacity = (value == 1 || value === '') ? '' : - (value < 0.00001) ? 0 : value; - - if (value == 1) - if (element.tagName.toUpperCase() == 'IMG' && element.width) { - element.width++; element.width--; - } else try { - var n = document.createTextNode(' '); - element.appendChild(n); - element.removeChild(n); - } catch (e) { } - - return element; - }; - - Element.Methods.cumulativeOffset = function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - if (element.offsetParent == document.body) - if (Element.getStyle(element, 'position') == 'absolute') break; - - element = element.offsetParent; - } while (element); - - return Element._returnOffset(valueL, valueT); - }; -} - -if ('outerHTML' in document.documentElement) { - Element.Methods.replace = function(element, content) { - element = $(element); - - if (content && content.toElement) content = content.toElement(); - if (Object.isElement(content)) { - element.parentNode.replaceChild(content, element); - return element; - } - - content = Object.toHTML(content); - var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); - - if (Element._insertionTranslations.tags[tagName]) { - var nextSibling = element.next(), - fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); - parent.removeChild(element); - if (nextSibling) - fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); - else - fragments.each(function(node) { parent.appendChild(node) }); - } - else element.outerHTML = content.stripScripts(); - - content.evalScripts.bind(content).defer(); - return element; - }; -} - -Element._returnOffset = function(l, t) { - var result = [l, t]; - result.left = l; - result.top = t; - return result; -}; - -Element._getContentFromAnonymousElement = function(tagName, html) { - var div = new Element('div'), - t = Element._insertionTranslations.tags[tagName]; - if (t) { - div.innerHTML = t[0] + html + t[1]; - for (var i = t[2]; i--; ) { - div = div.firstChild; - } - } - else { - div.innerHTML = html; - } - return $A(div.childNodes); -}; - -Element._insertionTranslations = { - before: function(element, node) { - element.parentNode.insertBefore(node, element); - }, - top: function(element, node) { - element.insertBefore(node, element.firstChild); - }, - bottom: function(element, node) { - element.appendChild(node); - }, - after: function(element, node) { - element.parentNode.insertBefore(node, element.nextSibling); - }, - tags: { - TABLE: ['', '
    ', 1], - TBODY: ['', '
    ', 2], - TR: ['', '
    ', 3], - TD: ['
    ', '
    ', 4], - SELECT: ['', 1] - } -}; - -(function() { - var tags = Element._insertionTranslations.tags; - Object.extend(tags, { - THEAD: tags.TBODY, - TFOOT: tags.TBODY, - TH: tags.TD - }); -})(); - -Element.Methods.Simulated = { - hasAttribute: function(element, attribute) { - attribute = Element._attributeTranslations.has[attribute] || attribute; - var node = $(element).getAttributeNode(attribute); - return !!(node && node.specified); - } -}; - -Element.Methods.ByTag = { }; - -Object.extend(Element, Element.Methods); - -(function(div) { - - if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) { - window.HTMLElement = { }; - window.HTMLElement.prototype = div['__proto__']; - Prototype.BrowserFeatures.ElementExtensions = true; - } - - div = null; - -})(document.createElement('div')); - -Element.extend = (function() { - - function checkDeficiency(tagName) { - if (typeof window.Element != 'undefined') { - var proto = window.Element.prototype; - if (proto) { - var id = '_' + (Math.random()+'').slice(2), - el = document.createElement(tagName); - proto[id] = 'x'; - var isBuggy = (el[id] !== 'x'); - delete proto[id]; - el = null; - return isBuggy; - } - } - return false; - } - - function extendElementWith(element, methods) { - for (var property in methods) { - var value = methods[property]; - if (Object.isFunction(value) && !(property in element)) - element[property] = value.methodize(); - } - } - - var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object'); - - if (Prototype.BrowserFeatures.SpecificElementExtensions) { - if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) { - return function(element) { - if (element && typeof element._extendedByPrototype == 'undefined') { - var t = element.tagName; - if (t && (/^(?:object|applet|embed)$/i.test(t))) { - extendElementWith(element, Element.Methods); - extendElementWith(element, Element.Methods.Simulated); - extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); - } - } - return element; - } - } - return Prototype.K; - } - - var Methods = { }, ByTag = Element.Methods.ByTag; - - var extend = Object.extend(function(element) { - if (!element || typeof element._extendedByPrototype != 'undefined' || - element.nodeType != 1 || element == window) return element; - - var methods = Object.clone(Methods), - tagName = element.tagName.toUpperCase(); - - if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); - - extendElementWith(element, methods); - - element._extendedByPrototype = Prototype.emptyFunction; - return element; - - }, { - refresh: function() { - if (!Prototype.BrowserFeatures.ElementExtensions) { - Object.extend(Methods, Element.Methods); - Object.extend(Methods, Element.Methods.Simulated); - } - } - }); - - extend.refresh(); - return extend; -})(); - -if (document.documentElement.hasAttribute) { - Element.hasAttribute = function(element, attribute) { - return element.hasAttribute(attribute); - }; -} -else { - Element.hasAttribute = Element.Methods.Simulated.hasAttribute; -} - -Element.addMethods = function(methods) { - var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; - - if (!methods) { - Object.extend(Form, Form.Methods); - Object.extend(Form.Element, Form.Element.Methods); - Object.extend(Element.Methods.ByTag, { - "FORM": Object.clone(Form.Methods), - "INPUT": Object.clone(Form.Element.Methods), - "SELECT": Object.clone(Form.Element.Methods), - "TEXTAREA": Object.clone(Form.Element.Methods) - }); - } - - if (arguments.length == 2) { - var tagName = methods; - methods = arguments[1]; - } - - if (!tagName) Object.extend(Element.Methods, methods || { }); - else { - if (Object.isArray(tagName)) tagName.each(extend); - else extend(tagName); - } - - function extend(tagName) { - tagName = tagName.toUpperCase(); - if (!Element.Methods.ByTag[tagName]) - Element.Methods.ByTag[tagName] = { }; - Object.extend(Element.Methods.ByTag[tagName], methods); - } - - function copy(methods, destination, onlyIfAbsent) { - onlyIfAbsent = onlyIfAbsent || false; - for (var property in methods) { - var value = methods[property]; - if (!Object.isFunction(value)) continue; - if (!onlyIfAbsent || !(property in destination)) - destination[property] = value.methodize(); - } - } - - function findDOMClass(tagName) { - var klass; - var trans = { - "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", - "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", - "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", - "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", - "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": - "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": - "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": - "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": - "FrameSet", "IFRAME": "IFrame" - }; - if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; - if (window[klass]) return window[klass]; - klass = 'HTML' + tagName + 'Element'; - if (window[klass]) return window[klass]; - klass = 'HTML' + tagName.capitalize() + 'Element'; - if (window[klass]) return window[klass]; - - var element = document.createElement(tagName), - proto = element['__proto__'] || element.constructor.prototype; - - element = null; - return proto; - } - - var elementPrototype = window.HTMLElement ? HTMLElement.prototype : - Element.prototype; - - if (F.ElementExtensions) { - copy(Element.Methods, elementPrototype); - copy(Element.Methods.Simulated, elementPrototype, true); - } - - if (F.SpecificElementExtensions) { - for (var tag in Element.Methods.ByTag) { - var klass = findDOMClass(tag); - if (Object.isUndefined(klass)) continue; - copy(T[tag], klass.prototype); - } - } - - Object.extend(Element, Element.Methods); - delete Element.ByTag; - - if (Element.extend.refresh) Element.extend.refresh(); - Element.cache = { }; -}; - - -document.viewport = { - - getDimensions: function() { - return { width: this.getWidth(), height: this.getHeight() }; - }, - - getScrollOffsets: function() { - return Element._returnOffset( - window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, - window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); - } -}; - -(function(viewport) { - var B = Prototype.Browser, doc = document, element, property = {}; - - function getRootElement() { - if (B.WebKit && !doc.evaluate) - return document; - - if (B.Opera && window.parseFloat(window.opera.version()) < 9.5) - return document.body; - - return document.documentElement; - } - - function define(D) { - if (!element) element = getRootElement(); - - property[D] = 'client' + D; - - viewport['get' + D] = function() { return element[property[D]] }; - return viewport['get' + D](); - } - - viewport.getWidth = define.curry('Width'); - - viewport.getHeight = define.curry('Height'); -})(document.viewport); - - -Element.Storage = { - UID: 1 -}; - -Element.addMethods({ - getStorage: function(element) { - if (!(element = $(element))) return; - - var uid; - if (element === window) { - uid = 0; - } else { - if (typeof element._prototypeUID === "undefined") - element._prototypeUID = Element.Storage.UID++; - uid = element._prototypeUID; - } - - if (!Element.Storage[uid]) - Element.Storage[uid] = $H(); - - return Element.Storage[uid]; - }, - - store: function(element, key, value) { - if (!(element = $(element))) return; - - if (arguments.length === 2) { - Element.getStorage(element).update(key); - } else { - Element.getStorage(element).set(key, value); - } - - return element; - }, - - retrieve: function(element, key, defaultValue) { - if (!(element = $(element))) return; - var hash = Element.getStorage(element), value = hash.get(key); - - if (Object.isUndefined(value)) { - hash.set(key, defaultValue); - value = defaultValue; - } - - return value; - }, - - clone: function(element, deep) { - if (!(element = $(element))) return; - var clone = element.cloneNode(deep); - clone._prototypeUID = void 0; - if (deep) { - var descendants = Element.select(clone, '*'), - i = descendants.length; - while (i--) { - descendants[i]._prototypeUID = void 0; - } - } - return Element.extend(clone); - }, - - purge: function(element) { - if (!(element = $(element))) return; - purgeElement(element); - - var descendants = element.getElementsByTagName('*'), - i = descendants.length; - - while (i--) purgeElement(descendants[i]); - - return null; - } -}); - -(function() { - - function toDecimal(pctString) { - var match = pctString.match(/^(\d+)%?$/i); - if (!match) return null; - return (Number(match[1]) / 100); - } - - function getPixelValue(value, property) { - if (Object.isElement(value)) { - element = value; - value = element.getStyle(property); - } - if (value === null) { - return null; - } - - if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { - return window.parseFloat(value); - } - - if (/\d/.test(value) && element.runtimeStyle) { - var style = element.style.left, rStyle = element.runtimeStyle.left; - element.runtimeStyle.left = element.currentStyle.left; - element.style.left = value || 0; - value = element.style.pixelLeft; - element.style.left = style; - element.runtimeStyle.left = rStyle; - - return value; - } - - if (value.include('%')) { - var decimal = toDecimal(value); - var whole; - if (property.include('left') || property.include('right') || - property.include('width')) { - whole = $(element.parentNode).measure('width'); - } else if (property.include('top') || property.include('bottom') || - property.include('height')) { - whole = $(element.parentNode).measure('height'); - } - - return whole * decimal; - } - - return 0; - } - - function toCSSPixels(number) { - if (Object.isString(number) && number.endsWith('px')) { - return number; - } - return number + 'px'; - } - - function isDisplayed(element) { - var originalElement = element; - while (element && element.parentNode) { - var display = element.getStyle('display'); - if (display === 'none') { - return false; - } - element = $(element.parentNode); - } - return true; - } - - var hasLayout = Prototype.K; - if ('currentStyle' in document.documentElement) { - hasLayout = function(element) { - if (!element.currentStyle.hasLayout) { - element.style.zoom = 1; - } - return element; - }; - } - - function cssNameFor(key) { - if (key.include('border')) key = key + '-width'; - return key.camelize(); - } - - Element.Layout = Class.create(Hash, { - initialize: function($super, element, preCompute) { - $super(); - this.element = $(element); - - Element.Layout.PROPERTIES.each( function(property) { - this._set(property, null); - }, this); - - if (preCompute) { - this._preComputing = true; - this._begin(); - Element.Layout.PROPERTIES.each( this._compute, this ); - this._end(); - this._preComputing = false; - } - }, - - _set: function(property, value) { - return Hash.prototype.set.call(this, property, value); - }, - - set: function(property, value) { - throw "Properties of Element.Layout are read-only."; - }, - - get: function($super, property) { - var value = $super(property); - return value === null ? this._compute(property) : value; - }, - - _begin: function() { - if (this._prepared) return; - - var element = this.element; - if (isDisplayed(element)) { - this._prepared = true; - return; - } - - var originalStyles = { - position: element.style.position || '', - width: element.style.width || '', - visibility: element.style.visibility || '', - display: element.style.display || '' - }; - - element.store('prototype_original_styles', originalStyles); - - var position = element.getStyle('position'), - width = element.getStyle('width'); - - element.setStyle({ - position: 'absolute', - visibility: 'hidden', - display: 'block' - }); - - var positionedWidth = element.getStyle('width'); - - var newWidth; - if (width && (positionedWidth === width)) { - newWidth = getPixelValue(width); - } else if (width && (position === 'absolute' || position === 'fixed')) { - newWidth = getPixelValue(width); - } else { - var parent = element.parentNode, pLayout = $(parent).getLayout(); - - newWidth = pLayout.get('width') - - this.get('margin-left') - - this.get('border-left') - - this.get('padding-left') - - this.get('padding-right') - - this.get('border-right') - - this.get('margin-right'); - } - - element.setStyle({ width: newWidth + 'px' }); - - this._prepared = true; - }, - - _end: function() { - var element = this.element; - var originalStyles = element.retrieve('prototype_original_styles'); - element.store('prototype_original_styles', null); - element.setStyle(originalStyles); - this._prepared = false; - }, - - _compute: function(property) { - var COMPUTATIONS = Element.Layout.COMPUTATIONS; - if (!(property in COMPUTATIONS)) { - throw "Property not found."; - } - return this._set(property, COMPUTATIONS[property].call(this, this.element)); - }, - - toObject: function() { - var args = $A(arguments); - var keys = (args.length === 0) ? Element.Layout.PROPERTIES : - args.join(' ').split(' '); - var obj = {}; - keys.each( function(key) { - if (!Element.Layout.PROPERTIES.include(key)) return; - var value = this.get(key); - if (value != null) obj[key] = value; - }, this); - return obj; - }, - - toHash: function() { - var obj = this.toObject.apply(this, arguments); - return new Hash(obj); - }, - - toCSS: function() { - var args = $A(arguments); - var keys = (args.length === 0) ? Element.Layout.PROPERTIES : - args.join(' ').split(' '); - var css = {}; - - keys.each( function(key) { - if (!Element.Layout.PROPERTIES.include(key)) return; - if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; - - var value = this.get(key); - if (value != null) css[cssNameFor(key)] = value + 'px'; - }, this); - return css; - }, - - inspect: function() { - return "#"; - } - }); - - Object.extend(Element.Layout, { - PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), - - COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), - - COMPUTATIONS: { - 'height': function(element) { - if (!this._preComputing) this._begin(); - - var bHeight = this.get('border-box-height'); - if (bHeight <= 0) return 0; - - var bTop = this.get('border-top'), - bBottom = this.get('border-bottom'); - - var pTop = this.get('padding-top'), - pBottom = this.get('padding-bottom'); - - if (!this._preComputing) this._end(); - - return bHeight - bTop - bBottom - pTop - pBottom; - }, - - 'width': function(element) { - if (!this._preComputing) this._begin(); - - var bWidth = this.get('border-box-width'); - if (bWidth <= 0) return 0; - - var bLeft = this.get('border-left'), - bRight = this.get('border-right'); - - var pLeft = this.get('padding-left'), - pRight = this.get('padding-right'); - - if (!this._preComputing) this._end(); - - return bWidth - bLeft - bRight - pLeft - pRight; - }, - - 'padding-box-height': function(element) { - var height = this.get('height'), - pTop = this.get('padding-top'), - pBottom = this.get('padding-bottom'); - - return height + pTop + pBottom; - }, - - 'padding-box-width': function(element) { - var width = this.get('width'), - pLeft = this.get('padding-left'), - pRight = this.get('padding-right'); - - return width + pLeft + pRight; - }, - - 'border-box-height': function(element) { - return element.offsetHeight; - }, - - 'border-box-width': function(element) { - return element.offsetWidth; - }, - - 'margin-box-height': function(element) { - var bHeight = this.get('border-box-height'), - mTop = this.get('margin-top'), - mBottom = this.get('margin-bottom'); - - if (bHeight <= 0) return 0; - - return bHeight + mTop + mBottom; - }, - - 'margin-box-width': function(element) { - var bWidth = this.get('border-box-width'), - mLeft = this.get('margin-left'), - mRight = this.get('margin-right'); - - if (bWidth <= 0) return 0; - - return bWidth + mLeft + mRight; - }, - - 'top': function(element) { - var offset = element.positionedOffset(); - return offset.top; - }, - - 'bottom': function(element) { - var offset = element.positionedOffset(), - parent = element.getOffsetParent(), - pHeight = parent.measure('height'); - - var mHeight = this.get('border-box-height'); - - return pHeight - mHeight - offset.top; - }, - - 'left': function(element) { - var offset = element.positionedOffset(); - return offset.left; - }, - - 'right': function(element) { - var offset = element.positionedOffset(), - parent = element.getOffsetParent(), - pWidth = parent.measure('width'); - - var mWidth = this.get('border-box-width'); - - return pWidth - mWidth - offset.left; - }, - - 'padding-top': function(element) { - return getPixelValue(element, 'paddingTop'); - }, - - 'padding-bottom': function(element) { - return getPixelValue(element, 'paddingBottom'); - }, - - 'padding-left': function(element) { - return getPixelValue(element, 'paddingLeft'); - }, - - 'padding-right': function(element) { - return getPixelValue(element, 'paddingRight'); - }, - - 'border-top': function(element) { - return Object.isNumber(element.clientTop) ? element.clientTop : - getPixelValue(element, 'borderTopWidth'); - }, - - 'border-bottom': function(element) { - return Object.isNumber(element.clientBottom) ? element.clientBottom : - getPixelValue(element, 'borderBottomWidth'); - }, - - 'border-left': function(element) { - return Object.isNumber(element.clientLeft) ? element.clientLeft : - getPixelValue(element, 'borderLeftWidth'); - }, - - 'border-right': function(element) { - return Object.isNumber(element.clientRight) ? element.clientRight : - getPixelValue(element, 'borderRightWidth'); - }, - - 'margin-top': function(element) { - return getPixelValue(element, 'marginTop'); - }, - - 'margin-bottom': function(element) { - return getPixelValue(element, 'marginBottom'); - }, - - 'margin-left': function(element) { - return getPixelValue(element, 'marginLeft'); - }, - - 'margin-right': function(element) { - return getPixelValue(element, 'marginRight'); - } - } - }); - - if ('getBoundingClientRect' in document.documentElement) { - Object.extend(Element.Layout.COMPUTATIONS, { - 'right': function(element) { - var parent = hasLayout(element.getOffsetParent()); - var rect = element.getBoundingClientRect(), - pRect = parent.getBoundingClientRect(); - - return (pRect.right - rect.right).round(); - }, - - 'bottom': function(element) { - var parent = hasLayout(element.getOffsetParent()); - var rect = element.getBoundingClientRect(), - pRect = parent.getBoundingClientRect(); - - return (pRect.bottom - rect.bottom).round(); - } - }); - } - - Element.Offset = Class.create({ - initialize: function(left, top) { - this.left = left.round(); - this.top = top.round(); - - this[0] = this.left; - this[1] = this.top; - }, - - relativeTo: function(offset) { - return new Element.Offset( - this.left - offset.left, - this.top - offset.top - ); - }, - - inspect: function() { - return "#".interpolate(this); - }, - - toString: function() { - return "[#{left}, #{top}]".interpolate(this); - }, - - toArray: function() { - return [this.left, this.top]; - } - }); - - function getLayout(element, preCompute) { - return new Element.Layout(element, preCompute); - } - - function measure(element, property) { - return $(element).getLayout().get(property); - } - - function getDimensions(element) { - var layout = $(element).getLayout(); - return { - width: layout.get('width'), - height: layout.get('height') - }; - } - - function getOffsetParent(element) { - if (isDetached(element)) return $(document.body); - - var isInline = (Element.getStyle(element, 'display') === 'inline'); - if (!isInline && element.offsetParent) return $(element.offsetParent); - if (element === document.body) return $(element); - - while ((element = element.parentNode) && element !== document.body) { - if (Element.getStyle(element, 'position') !== 'static') { - return (element.nodeName === 'HTML') ? $(document.body) : $(element); - } - } - - return $(document.body); - } - - - function cumulativeOffset(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); - return new Element.Offset(valueL, valueT); - } - - function positionedOffset(element) { - var layout = element.getLayout(); - - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - if (element) { - if (isBody(element)) break; - var p = Element.getStyle(element, 'position'); - if (p !== 'static') break; - } - } while (element); - - valueL -= layout.get('margin-top'); - valueT -= layout.get('margin-left'); - - return new Element.Offset(valueL, valueT); - } - - function cumulativeScrollOffset(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.scrollTop || 0; - valueL += element.scrollLeft || 0; - element = element.parentNode; - } while (element); - return new Element.Offset(valueL, valueT); - } - - function viewportOffset(forElement) { - var valueT = 0, valueL = 0, docBody = document.body; - - var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - if (element.offsetParent == docBody && - Element.getStyle(element, 'position') == 'absolute') break; - } while (element = element.offsetParent); - - element = forElement; - do { - if (element != docBody) { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } - } while (element = element.parentNode); - return new Element.Offset(valueL, valueT); - } - - function absolutize(element) { - element = $(element); - - if (Element.getStyle(element, 'position') === 'absolute') { - return element; - } - - var offsetParent = getOffsetParent(element); - var eOffset = element.viewportOffset(), - pOffset = offsetParent.viewportOffset(); - - var offset = eOffset.relativeTo(pOffset); - var layout = element.getLayout(); - - element.store('prototype_absolutize_original_styles', { - left: element.getStyle('left'), - top: element.getStyle('top'), - width: element.getStyle('width'), - height: element.getStyle('height') - }); - - element.setStyle({ - position: 'absolute', - top: offset.top + 'px', - left: offset.left + 'px', - width: layout.get('width') + 'px', - height: layout.get('height') + 'px' - }); - - return element; - } - - function relativize(element) { - element = $(element); - if (Element.getStyle(element, 'position') === 'relative') { - return element; - } - - var originalStyles = - element.retrieve('prototype_absolutize_original_styles'); - - if (originalStyles) element.setStyle(originalStyles); - return element; - } - - Element.addMethods({ - getLayout: getLayout, - measure: measure, - getDimensions: getDimensions, - getOffsetParent: getOffsetParent, - cumulativeOffset: cumulativeOffset, - positionedOffset: positionedOffset, - cumulativeScrollOffset: cumulativeScrollOffset, - viewportOffset: viewportOffset, - absolutize: absolutize, - relativize: relativize - }); - - function isBody(element) { - return element.nodeName.toUpperCase() === 'BODY'; - } - - function isDetached(element) { - return element !== document.body && - !Element.descendantOf(element, document.body); - } - - if ('getBoundingClientRect' in document.documentElement) { - Element.addMethods({ - viewportOffset: function(element) { - element = $(element); - if (isDetached(element)) return new Element.Offset(0, 0); - - var rect = element.getBoundingClientRect(), - docEl = document.documentElement; - return new Element.Offset(rect.left - docEl.clientLeft, - rect.top - docEl.clientTop); - }, - - positionedOffset: function(element) { - element = $(element); - var parent = element.getOffsetParent(); - if (isDetached(element)) return new Element.Offset(0, 0); - - if (element.offsetParent && - element.offsetParent.nodeName.toUpperCase() === 'HTML') { - return positionedOffset(element); - } - - var eOffset = element.viewportOffset(), - pOffset = isBody(parent) ? viewportOffset(parent) : - parent.viewportOffset(); - var retOffset = eOffset.relativeTo(pOffset); - - var layout = element.getLayout(); - var top = retOffset.top - layout.get('margin-top'); - var left = retOffset.left - layout.get('margin-left'); - - return new Element.Offset(left, top); - } - }); - } -})(); -window.$$ = function() { - var expression = $A(arguments).join(', '); - return Prototype.Selector.select(expression, document); -}; - -Prototype.Selector = (function() { - - function select() { - throw new Error('Method "Prototype.Selector.select" must be defined.'); - } - - function match() { - throw new Error('Method "Prototype.Selector.match" must be defined.'); - } - - function find(elements, expression, index) { - index = index || 0; - var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; - - for (i = 0; i < length; i++) { - if (match(elements[i], expression) && index == matchIndex++) { - return Element.extend(elements[i]); - } - } - } - - function extendElements(elements) { - for (var i = 0, length = elements.length; i < length; i++) { - Element.extend(elements[i]); - } - return elements; - } - - - var K = Prototype.K; - - return { - select: select, - match: match, - find: find, - extendElements: (Element.extend === K) ? K : extendElements, - extendElement: Element.extend - }; -})(); -Prototype._original_property = window.Sizzle; -/*! - * Sizzle CSS Selector Engine - v1.0 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true; - -[0, 0].sort(function(){ - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function(selector, context, results, seed) { - results = results || []; - var origContext = context = context || document; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context), - soFar = selector; - - while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) - selector += parts.shift(); - - set = posProcess( selector, set ); - } - } - } else { - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - var ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; - } - - if ( context ) { - var ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray(set); - } else { - prune = false; - } - - while ( parts.length ) { - var cur = parts.pop(), pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - throw "Syntax error, unrecognized expression: " + (cur || selector); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - } else if ( context && context.nodeType === 1 ) { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - } else { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function(results){ - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort(sortOrder); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[i-1] ) { - results.splice(i--, 1); - } - } - } - } - - return results; -}; - -Sizzle.matches = function(expr, set){ - return Sizzle(expr, null, null, set); -}; - -Sizzle.find = function(expr, context, isXML){ - var set, match; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var type = Expr.order[i], match; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice(1,1); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace(/\\/g, ""); - set = Expr.find[ type ]( match, context, isXML ); - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = context.getElementsByTagName("*"); - } - - return {set: set, expr: expr}; -}; - -Sizzle.filter = function(expr, set, inplace, not){ - var old = expr, result = [], curLoop = set, match, anyFound, - isXMLFilter = set && set[0] && isXML(set[0]); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.match[ type ].exec( expr )) != null ) { - var filter = Expr.filter[ type ], found, item; - anyFound = false; - - if ( curLoop == result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - } else { - curLoop[i] = false; - } - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - if ( expr == old ) { - if ( anyFound == null ) { - throw "Syntax error, unrecognized expression: " + expr; - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -var Expr = Sizzle.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\(\)]*)+)\2\))?/ - }, - leftMatch: {}, - attrMap: { - "class": "className", - "for": "htmlFor" - }, - attrHandle: { - href: function(elem){ - return elem.getAttribute("href"); - } - }, - relative: { - "+": function(checkSet, part, isXML){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.test(part), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag && !isXML ) { - part = part.toUpperCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - ">": function(checkSet, part, isXML){ - var isPartStr = typeof part === "string"; - - if ( isPartStr && !/\W/.test(part) ) { - part = isXML ? part : part.toUpperCase(); - - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName === part ? parent : false; - } - } - } else { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - "": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - - if ( !/\W/.test(part) ) { - var nodeCheck = part = isXML ? part : part.toUpperCase(); - checkFn = dirNodeCheck; - } - - checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); - }, - "~": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = isXML ? part : part.toUpperCase(); - checkFn = dirNodeCheck; - } - - checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); - } - }, - find: { - ID: function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - return m ? [m] : []; - } - }, - NAME: function(match, context, isXML){ - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], results = context.getElementsByName(match[1]); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - TAG: function(match, context){ - return context.getElementsByTagName(match[1]); - } - }, - preFilter: { - CLASS: function(match, curLoop, inplace, result, not, isXML){ - match = " " + match[1].replace(/\\/g, "") + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { - if ( !inplace ) - result.push( elem ); - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - ID: function(match){ - return match[1].replace(/\\/g, ""); - }, - TAG: function(match, curLoop){ - for ( var i = 0; curLoop[i] === false; i++ ){} - return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); - }, - CHILD: function(match){ - if ( match[1] == "nth" ) { - var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( - match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - - match[0] = done++; - - return match; - }, - ATTR: function(match, curLoop, inplace, result, not, isXML){ - var name = match[1].replace(/\\/g, ""); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - PSEUDO: function(match, curLoop, inplace, result, not){ - if ( match[1] === "not" ) { - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - if ( !inplace ) { - result.push.apply( result, ret ); - } - return false; - } - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - POS: function(match){ - match.unshift( true ); - return match; - } - }, - filters: { - enabled: function(elem){ - return elem.disabled === false && elem.type !== "hidden"; - }, - disabled: function(elem){ - return elem.disabled === true; - }, - checked: function(elem){ - return elem.checked === true; - }, - selected: function(elem){ - elem.parentNode.selectedIndex; - return elem.selected === true; - }, - parent: function(elem){ - return !!elem.firstChild; - }, - empty: function(elem){ - return !elem.firstChild; - }, - has: function(elem, i, match){ - return !!Sizzle( match[3], elem ).length; - }, - header: function(elem){ - return /h\d/i.test( elem.nodeName ); - }, - text: function(elem){ - return "text" === elem.type; - }, - radio: function(elem){ - return "radio" === elem.type; - }, - checkbox: function(elem){ - return "checkbox" === elem.type; - }, - file: function(elem){ - return "file" === elem.type; - }, - password: function(elem){ - return "password" === elem.type; - }, - submit: function(elem){ - return "submit" === elem.type; - }, - image: function(elem){ - return "image" === elem.type; - }, - reset: function(elem){ - return "reset" === elem.type; - }, - button: function(elem){ - return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; - }, - input: function(elem){ - return /input|select|textarea|button/i.test(elem.nodeName); - } - }, - setFilters: { - first: function(elem, i){ - return i === 0; - }, - last: function(elem, i, match, array){ - return i === array.length - 1; - }, - even: function(elem, i){ - return i % 2 === 0; - }, - odd: function(elem, i){ - return i % 2 === 1; - }, - lt: function(elem, i, match){ - return i < match[3] - 0; - }, - gt: function(elem, i, match){ - return i > match[3] - 0; - }, - nth: function(elem, i, match){ - return match[3] - 0 == i; - }, - eq: function(elem, i, match){ - return match[3] - 0 == i; - } - }, - filter: { - PSEUDO: function(elem, match, i, array){ - var name = match[1], filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; - } else if ( name === "not" ) { - var not = match[3]; - - for ( var i = 0, l = not.length; i < l; i++ ) { - if ( not[i] === elem ) { - return false; - } - } - - return true; - } - }, - CHILD: function(elem, match){ - var type = match[1], node = elem; - switch (type) { - case 'only': - case 'first': - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) return false; - } - if ( type == 'first') return true; - node = elem; - case 'last': - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) return false; - } - return true; - case 'nth': - var first = match[2], last = match[3]; - - if ( first == 1 && last == 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - if ( first == 0 ) { - return diff == 0; - } else { - return ( diff % first == 0 && diff / first >= 0 ); - } - } - }, - ID: function(elem, match){ - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - TAG: function(elem, match){ - return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; - }, - CLASS: function(elem, match){ - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - ATTR: function(elem, match){ - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value != check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - POS: function(elem, match, i, array){ - var name = match[2], filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source ); -} - -var makeArray = function(array, results) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 ); - -} catch(e){ - makeArray = function(array, results) { - var ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - } else { - if ( typeof array.length === "number" ) { - for ( var i = 0, l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - } else { - for ( var i = 0; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - if ( a == b ) { - hasDuplicate = true; - } - return 0; - } - - var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( "sourceIndex" in document.documentElement ) { - sortOrder = function( a, b ) { - if ( !a.sourceIndex || !b.sourceIndex ) { - if ( a == b ) { - hasDuplicate = true; - } - return 0; - } - - var ret = a.sourceIndex - b.sourceIndex; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( document.createRange ) { - sortOrder = function( a, b ) { - if ( !a.ownerDocument || !b.ownerDocument ) { - if ( a == b ) { - hasDuplicate = true; - } - return 0; - } - - var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); - aRange.setStart(a, 0); - aRange.setEnd(a, 0); - bRange.setStart(b, 0); - bRange.setEnd(b, 0); - var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} - -(function(){ - var form = document.createElement("div"), - id = "script" + (new Date).getTime(); - form.innerHTML = ""; - - var root = document.documentElement; - root.insertBefore( form, root.firstChild ); - - if ( !!document.getElementById( id ) ) { - Expr.find.ID = function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; - } - }; - - Expr.filter.ID = function(elem, match){ - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - root = form = null; // release memory in IE -})(); - -(function(){ - - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function(match, context){ - var results = context.getElementsByTagName(match[1]); - - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - div.innerHTML = ""; - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - Expr.attrHandle.href = function(elem){ - return elem.getAttribute("href", 2); - }; - } - - div = null; // release memory in IE -})(); - -if ( document.querySelectorAll ) (function(){ - var oldSizzle = Sizzle, div = document.createElement("div"); - div.innerHTML = "

    "; - - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function(query, context, extra, seed){ - context = context || document; - - if ( !seed && context.nodeType === 9 && !isXML(context) ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(e){} - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - div = null; // release memory in IE -})(); - -if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ - var div = document.createElement("div"); - div.innerHTML = "
    "; - - if ( div.getElementsByClassName("e").length === 0 ) - return; - - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) - return; - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function(match, context, isXML) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - div = null; // release memory in IE -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - var sibDir = dir == "previousSibling" && !isXML; - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - if ( sibDir && elem.nodeType === 1 ){ - elem.sizcache = doneName; - elem.sizset = i; - } - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - var sibDir = dir == "previousSibling" && !isXML; - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - if ( sibDir && elem.nodeType === 1 ) { - elem.sizcache = doneName; - elem.sizset = i; - } - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -var contains = document.compareDocumentPosition ? function(a, b){ - return a.compareDocumentPosition(b) & 16; -} : function(a, b){ - return a !== b && (a.contains ? a.contains(b) : true); -}; - -var isXML = function(elem){ - return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || - !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; -}; - -var posProcess = function(selector, context){ - var tmpSet = [], later = "", match, - root = context.nodeType ? [context] : context; - - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - - -window.Sizzle = Sizzle; - -})(); - -;(function(engine) { - var extendElements = Prototype.Selector.extendElements; - - function select(selector, scope) { - return extendElements(engine(selector, scope || document)); - } - - function match(element, selector) { - return engine.matches(selector, [element]).length == 1; - } - - Prototype.Selector.engine = engine; - Prototype.Selector.select = select; - Prototype.Selector.match = match; -})(Sizzle); - -window.Sizzle = Prototype._original_property; -delete Prototype._original_property; - -var Form = { - reset: function(form) { - form = $(form); - form.reset(); - return form; - }, - - serializeElements: function(elements, options) { - if (typeof options != 'object') options = { hash: !!options }; - else if (Object.isUndefined(options.hash)) options.hash = true; - var key, value, submitted = false, submit = options.submit; - - var data = elements.inject({ }, function(result, element) { - if (!element.disabled && element.name) { - key = element.name; value = $(element).getValue(); - if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && - submit !== false && (!submit || key == submit) && (submitted = true)))) { - if (key in result) { - if (!Object.isArray(result[key])) result[key] = [result[key]]; - result[key].push(value); - } - else result[key] = value; - } - } - return result; - }); - - return options.hash ? data : Object.toQueryString(data); - } -}; - -Form.Methods = { - serialize: function(form, options) { - return Form.serializeElements(Form.getElements(form), options); - }, - - getElements: function(form) { - var elements = $(form).getElementsByTagName('*'), - element, - arr = [ ], - serializers = Form.Element.Serializers; - for (var i = 0; element = elements[i]; i++) { - arr.push(element); - } - return arr.inject([], function(elements, child) { - if (serializers[child.tagName.toLowerCase()]) - elements.push(Element.extend(child)); - return elements; - }) - }, - - getInputs: function(form, typeName, name) { - form = $(form); - var inputs = form.getElementsByTagName('input'); - - if (!typeName && !name) return $A(inputs).map(Element.extend); - - for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { - var input = inputs[i]; - if ((typeName && input.type != typeName) || (name && input.name != name)) - continue; - matchingInputs.push(Element.extend(input)); - } - - return matchingInputs; - }, - - disable: function(form) { - form = $(form); - Form.getElements(form).invoke('disable'); - return form; - }, - - enable: function(form) { - form = $(form); - Form.getElements(form).invoke('enable'); - return form; - }, - - findFirstElement: function(form) { - var elements = $(form).getElements().findAll(function(element) { - return 'hidden' != element.type && !element.disabled; - }); - var firstByIndex = elements.findAll(function(element) { - return element.hasAttribute('tabIndex') && element.tabIndex >= 0; - }).sortBy(function(element) { return element.tabIndex }).first(); - - return firstByIndex ? firstByIndex : elements.find(function(element) { - return /^(?:input|select|textarea)$/i.test(element.tagName); - }); - }, - - focusFirstElement: function(form) { - form = $(form); - form.findFirstElement().activate(); - return form; - }, - - request: function(form, options) { - form = $(form), options = Object.clone(options || { }); - - var params = options.parameters, action = form.readAttribute('action') || ''; - if (action.blank()) action = window.location.href; - options.parameters = form.serialize(true); - - if (params) { - if (Object.isString(params)) params = params.toQueryParams(); - Object.extend(options.parameters, params); - } - - if (form.hasAttribute('method') && !options.method) - options.method = form.method; - - return new Ajax.Request(action, options); - } -}; - -/*--------------------------------------------------------------------------*/ - - -Form.Element = { - focus: function(element) { - $(element).focus(); - return element; - }, - - select: function(element) { - $(element).select(); - return element; - } -}; - -Form.Element.Methods = { - - serialize: function(element) { - element = $(element); - if (!element.disabled && element.name) { - var value = element.getValue(); - if (value != undefined) { - var pair = { }; - pair[element.name] = value; - return Object.toQueryString(pair); - } - } - return ''; - }, - - getValue: function(element) { - element = $(element); - var method = element.tagName.toLowerCase(); - return Form.Element.Serializers[method](element); - }, - - setValue: function(element, value) { - element = $(element); - var method = element.tagName.toLowerCase(); - Form.Element.Serializers[method](element, value); - return element; - }, - - clear: function(element) { - $(element).value = ''; - return element; - }, - - present: function(element) { - return $(element).value != ''; - }, - - activate: function(element) { - element = $(element); - try { - element.focus(); - if (element.select && (element.tagName.toLowerCase() != 'input' || - !(/^(?:button|reset|submit)$/i.test(element.type)))) - element.select(); - } catch (e) { } - return element; - }, - - disable: function(element) { - element = $(element); - element.disabled = true; - return element; - }, - - enable: function(element) { - element = $(element); - element.disabled = false; - return element; - } -}; - -/*--------------------------------------------------------------------------*/ - -var Field = Form.Element; - -var $F = Form.Element.Methods.getValue; - -/*--------------------------------------------------------------------------*/ - -Form.Element.Serializers = { - input: function(element, value) { - switch (element.type.toLowerCase()) { - case 'checkbox': - case 'radio': - return Form.Element.Serializers.inputSelector(element, value); - default: - return Form.Element.Serializers.textarea(element, value); - } - }, - - inputSelector: function(element, value) { - if (Object.isUndefined(value)) return element.checked ? element.value : null; - else element.checked = !!value; - }, - - textarea: function(element, value) { - if (Object.isUndefined(value)) return element.value; - else element.value = value; - }, - - select: function(element, value) { - if (Object.isUndefined(value)) - return this[element.type == 'select-one' ? - 'selectOne' : 'selectMany'](element); - else { - var opt, currentValue, single = !Object.isArray(value); - for (var i = 0, length = element.length; i < length; i++) { - opt = element.options[i]; - currentValue = this.optionValue(opt); - if (single) { - if (currentValue == value) { - opt.selected = true; - return; - } - } - else opt.selected = value.include(currentValue); - } - } - }, - - selectOne: function(element) { - var index = element.selectedIndex; - return index >= 0 ? this.optionValue(element.options[index]) : null; - }, - - selectMany: function(element) { - var values, length = element.length; - if (!length) return null; - - for (var i = 0, values = []; i < length; i++) { - var opt = element.options[i]; - if (opt.selected) values.push(this.optionValue(opt)); - } - return values; - }, - - optionValue: function(opt) { - return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; - } -}; - -/*--------------------------------------------------------------------------*/ - - -Abstract.TimedObserver = Class.create(PeriodicalExecuter, { - initialize: function($super, element, frequency, callback) { - $super(callback, frequency); - this.element = $(element); - this.lastValue = this.getValue(); - }, - - execute: function() { - var value = this.getValue(); - if (Object.isString(this.lastValue) && Object.isString(value) ? - this.lastValue != value : String(this.lastValue) != String(value)) { - this.callback(this.element, value); - this.lastValue = value; - } - } -}); - -Form.Element.Observer = Class.create(Abstract.TimedObserver, { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.Observer = Class.create(Abstract.TimedObserver, { - getValue: function() { - return Form.serialize(this.element); - } -}); - -/*--------------------------------------------------------------------------*/ - -Abstract.EventObserver = Class.create({ - initialize: function(element, callback) { - this.element = $(element); - this.callback = callback; - - this.lastValue = this.getValue(); - if (this.element.tagName.toLowerCase() == 'form') - this.registerFormCallbacks(); - else - this.registerCallback(this.element); - }, - - onElementEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - }, - - registerFormCallbacks: function() { - Form.getElements(this.element).each(this.registerCallback, this); - }, - - registerCallback: function(element) { - if (element.type) { - switch (element.type.toLowerCase()) { - case 'checkbox': - case 'radio': - Event.observe(element, 'click', this.onElementEvent.bind(this)); - break; - default: - Event.observe(element, 'change', this.onElementEvent.bind(this)); - break; - } - } - } -}); - -Form.Element.EventObserver = Class.create(Abstract.EventObserver, { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.EventObserver = Class.create(Abstract.EventObserver, { - getValue: function() { - return Form.serialize(this.element); - } -}); -(function() { - - var Event = { - KEY_BACKSPACE: 8, - KEY_TAB: 9, - KEY_RETURN: 13, - KEY_ESC: 27, - KEY_LEFT: 37, - KEY_UP: 38, - KEY_RIGHT: 39, - KEY_DOWN: 40, - KEY_DELETE: 46, - KEY_HOME: 36, - KEY_END: 35, - KEY_PAGEUP: 33, - KEY_PAGEDOWN: 34, - KEY_INSERT: 45, - - cache: {} - }; - - var docEl = document.documentElement; - var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl - && 'onmouseleave' in docEl; - - var _isButton; - if (Prototype.Browser.IE) { - var buttonMap = { 0: 1, 1: 4, 2: 2 }; - _isButton = function(event, code) { - return event.button === buttonMap[code]; - }; - } else if (Prototype.Browser.WebKit) { - _isButton = function(event, code) { - switch (code) { - case 0: return event.which == 1 && !event.metaKey; - case 1: return event.which == 1 && event.metaKey; - default: return false; - } - }; - } else { - _isButton = function(event, code) { - return event.which ? (event.which === code + 1) : (event.button === code); - }; - } - - function isLeftClick(event) { return _isButton(event, 0) } - - function isMiddleClick(event) { return _isButton(event, 1) } - - function isRightClick(event) { return _isButton(event, 2) } - - function element(event) { - event = Event.extend(event); - - var node = event.target, type = event.type, - currentTarget = event.currentTarget; - - if (currentTarget && currentTarget.tagName) { - if (type === 'load' || type === 'error' || - (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' - && currentTarget.type === 'radio')) - node = currentTarget; - } - - if (node.nodeType == Node.TEXT_NODE) - node = node.parentNode; - - return Element.extend(node); - } - - function findElement(event, expression) { - var element = Event.element(event); - if (!expression) return element; - while (element) { - if (Object.isElement(element) && Prototype.Selector.match(element, expression)) { - return Element.extend(element); - } - element = element.parentNode; - } - } - - function pointer(event) { - return { x: pointerX(event), y: pointerY(event) }; - } - - function pointerX(event) { - var docElement = document.documentElement, - body = document.body || { scrollLeft: 0 }; - - return event.pageX || (event.clientX + - (docElement.scrollLeft || body.scrollLeft) - - (docElement.clientLeft || 0)); - } - - function pointerY(event) { - var docElement = document.documentElement, - body = document.body || { scrollTop: 0 }; - - return event.pageY || (event.clientY + - (docElement.scrollTop || body.scrollTop) - - (docElement.clientTop || 0)); - } - - - function stop(event) { - Event.extend(event); - event.preventDefault(); - event.stopPropagation(); - - event.stopped = true; - } - - Event.Methods = { - isLeftClick: isLeftClick, - isMiddleClick: isMiddleClick, - isRightClick: isRightClick, - - element: element, - findElement: findElement, - - pointer: pointer, - pointerX: pointerX, - pointerY: pointerY, - - stop: stop - }; - - - var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { - m[name] = Event.Methods[name].methodize(); - return m; - }); - - if (Prototype.Browser.IE) { - function _relatedTarget(event) { - var element; - switch (event.type) { - case 'mouseover': element = event.fromElement; break; - case 'mouseout': element = event.toElement; break; - default: return null; - } - return Element.extend(element); - } - - Object.extend(methods, { - stopPropagation: function() { this.cancelBubble = true }, - preventDefault: function() { this.returnValue = false }, - inspect: function() { return '[object Event]' } - }); - - Event.extend = function(event, element) { - if (!event) return false; - if (event._extendedByPrototype) return event; - - event._extendedByPrototype = Prototype.emptyFunction; - var pointer = Event.pointer(event); - - Object.extend(event, { - target: event.srcElement || element, - relatedTarget: _relatedTarget(event), - pageX: pointer.x, - pageY: pointer.y - }); - - return Object.extend(event, methods); - }; - } else { - Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; - Object.extend(Event.prototype, methods); - Event.extend = Prototype.K; - } - - function _createResponder(element, eventName, handler) { - var registry = Element.retrieve(element, 'prototype_event_registry'); - - if (Object.isUndefined(registry)) { - CACHE.push(element); - registry = Element.retrieve(element, 'prototype_event_registry', $H()); - } - - var respondersForEvent = registry.get(eventName); - if (Object.isUndefined(respondersForEvent)) { - respondersForEvent = []; - registry.set(eventName, respondersForEvent); - } - - if (respondersForEvent.pluck('handler').include(handler)) return false; - - var responder; - if (eventName.include(":")) { - responder = function(event) { - if (Object.isUndefined(event.eventName)) - return false; - - if (event.eventName !== eventName) - return false; - - Event.extend(event, element); - handler.call(element, event); - }; - } else { - if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && - (eventName === "mouseenter" || eventName === "mouseleave")) { - if (eventName === "mouseenter" || eventName === "mouseleave") { - responder = function(event) { - Event.extend(event, element); - - var parent = event.relatedTarget; - while (parent && parent !== element) { - try { parent = parent.parentNode; } - catch(e) { parent = element; } - } - - if (parent === element) return; - - handler.call(element, event); - }; - } - } else { - responder = function(event) { - Event.extend(event, element); - handler.call(element, event); - }; - } - } - - responder.handler = handler; - respondersForEvent.push(responder); - return responder; - } - - function _destroyCache() { - for (var i = 0, length = CACHE.length; i < length; i++) { - Event.stopObserving(CACHE[i]); - CACHE[i] = null; - } - } - - var CACHE = []; - - if (Prototype.Browser.IE) - window.attachEvent('onunload', _destroyCache); - - if (Prototype.Browser.WebKit) - window.addEventListener('unload', Prototype.emptyFunction, false); - - - var _getDOMEventName = Prototype.K, - translations = { mouseenter: "mouseover", mouseleave: "mouseout" }; - - if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) { - _getDOMEventName = function(eventName) { - return (translations[eventName] || eventName); - }; - } - - function observe(element, eventName, handler) { - element = $(element); - - var responder = _createResponder(element, eventName, handler); - - if (!responder) return element; - - if (eventName.include(':')) { - if (element.addEventListener) - element.addEventListener("dataavailable", responder, false); - else { - element.attachEvent("ondataavailable", responder); - element.attachEvent("onfilterchange", responder); - } - } else { - var actualEventName = _getDOMEventName(eventName); - - if (element.addEventListener) - element.addEventListener(actualEventName, responder, false); - else - element.attachEvent("on" + actualEventName, responder); - } - - return element; - } - - function stopObserving(element, eventName, handler) { - element = $(element); - - var registry = Element.retrieve(element, 'prototype_event_registry'); - if (!registry) return element; - - if (!eventName) { - registry.each( function(pair) { - var eventName = pair.key; - stopObserving(element, eventName); - }); - return element; - } - - var responders = registry.get(eventName); - if (!responders) return element; - - if (!handler) { - responders.each(function(r) { - stopObserving(element, eventName, r.handler); - }); - return element; - } - - var responder = responders.find( function(r) { return r.handler === handler; }); - if (!responder) return element; - - if (eventName.include(':')) { - if (element.removeEventListener) - element.removeEventListener("dataavailable", responder, false); - else { - element.detachEvent("ondataavailable", responder); - element.detachEvent("onfilterchange", responder); - } - } else { - var actualEventName = _getDOMEventName(eventName); - if (element.removeEventListener) - element.removeEventListener(actualEventName, responder, false); - else - element.detachEvent('on' + actualEventName, responder); - } - - registry.set(eventName, responders.without(responder)); - - return element; - } - - function fire(element, eventName, memo, bubble) { - element = $(element); - - if (Object.isUndefined(bubble)) - bubble = true; - - if (element == document && document.createEvent && !element.dispatchEvent) - element = document.documentElement; - - var event; - if (document.createEvent) { - event = document.createEvent('HTMLEvents'); - event.initEvent('dataavailable', true, true); - } else { - event = document.createEventObject(); - event.eventType = bubble ? 'ondataavailable' : 'onfilterchange'; - } - - event.eventName = eventName; - event.memo = memo || { }; - - if (document.createEvent) - element.dispatchEvent(event); - else - element.fireEvent(event.eventType, event); - - return Event.extend(event); - } - - Event.Handler = Class.create({ - initialize: function(element, eventName, selector, callback) { - this.element = $(element); - this.eventName = eventName; - this.selector = selector; - this.callback = callback; - this.handler = this.handleEvent.bind(this); - }, - - start: function() { - Event.observe(this.element, this.eventName, this.handler); - return this; - }, - - stop: function() { - Event.stopObserving(this.element, this.eventName, this.handler); - return this; - }, - - handleEvent: function(event) { - var element = event.findElement(this.selector); - if (element) this.callback.call(this.element, event, element); - } - }); - - function on(element, eventName, selector, callback) { - element = $(element); - if (Object.isFunction(selector) && Object.isUndefined(callback)) { - callback = selector, selector = null; - } - - return new Event.Handler(element, eventName, selector, callback).start(); - } - - Object.extend(Event, Event.Methods); - - Object.extend(Event, { - fire: fire, - observe: observe, - stopObserving: stopObserving, - on: on - }); - - Element.addMethods({ - fire: fire, - - observe: observe, - - stopObserving: stopObserving, - - on: on - }); - - Object.extend(document, { - fire: fire.methodize(), - - observe: observe.methodize(), - - stopObserving: stopObserving.methodize(), - - on: on.methodize(), - - loaded: false - }); - - if (window.Event) Object.extend(window.Event, Event); - else window.Event = Event; -})(); - -(function() { - /* Support for the DOMContentLoaded event is based on work by Dan Webb, - Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ - - var timer; - - function fireContentLoadedEvent() { - if (document.loaded) return; - if (timer) window.clearTimeout(timer); - document.loaded = true; - document.fire('dom:loaded'); - } - - function checkReadyState() { - if (document.readyState === 'complete') { - document.stopObserving('readystatechange', checkReadyState); - fireContentLoadedEvent(); - } - } - - function pollDoScroll() { - try { document.documentElement.doScroll('left'); } - catch(e) { - timer = pollDoScroll.defer(); - return; - } - fireContentLoadedEvent(); - } - - if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); - } else { - document.observe('readystatechange', checkReadyState); - if (window == top) - timer = pollDoScroll.defer(); - } - - Event.observe(window, 'load', fireContentLoadedEvent); -})(); - -Element.addMethods(); - -/*------------------------------- DEPRECATED -------------------------------*/ - -Hash.toQueryString = Object.toQueryString; - -var Toggle = { display: Element.toggle }; - -Element.Methods.childOf = Element.Methods.descendantOf; - -var Insertion = { - Before: function(element, content) { - return Element.insert(element, {before:content}); - }, - - Top: function(element, content) { - return Element.insert(element, {top:content}); - }, - - Bottom: function(element, content) { - return Element.insert(element, {bottom:content}); - }, - - After: function(element, content) { - return Element.insert(element, {after:content}); - } -}; - -var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); - -var Position = { - includeScrollOffsets: false, - - prepare: function() { - this.deltaX = window.pageXOffset - || document.documentElement.scrollLeft - || document.body.scrollLeft - || 0; - this.deltaY = window.pageYOffset - || document.documentElement.scrollTop - || document.body.scrollTop - || 0; - }, - - within: function(element, x, y) { - if (this.includeScrollOffsets) - return this.withinIncludingScrolloffsets(element, x, y); - this.xcomp = x; - this.ycomp = y; - this.offset = Element.cumulativeOffset(element); - - return (y >= this.offset[1] && - y < this.offset[1] + element.offsetHeight && - x >= this.offset[0] && - x < this.offset[0] + element.offsetWidth); - }, - - withinIncludingScrolloffsets: function(element, x, y) { - var offsetcache = Element.cumulativeScrollOffset(element); - - this.xcomp = x + offsetcache[0] - this.deltaX; - this.ycomp = y + offsetcache[1] - this.deltaY; - this.offset = Element.cumulativeOffset(element); - - return (this.ycomp >= this.offset[1] && - this.ycomp < this.offset[1] + element.offsetHeight && - this.xcomp >= this.offset[0] && - this.xcomp < this.offset[0] + element.offsetWidth); - }, - - overlap: function(mode, element) { - if (!mode) return 0; - if (mode == 'vertical') - return ((this.offset[1] + element.offsetHeight) - this.ycomp) / - element.offsetHeight; - if (mode == 'horizontal') - return ((this.offset[0] + element.offsetWidth) - this.xcomp) / - element.offsetWidth; - }, - - - cumulativeOffset: Element.Methods.cumulativeOffset, - - positionedOffset: Element.Methods.positionedOffset, - - absolutize: function(element) { - Position.prepare(); - return Element.absolutize(element); - }, - - relativize: function(element) { - Position.prepare(); - return Element.relativize(element); - }, - - realOffset: Element.Methods.cumulativeScrollOffset, - - offsetParent: Element.Methods.getOffsetParent, - - page: Element.Methods.viewportOffset, - - clone: function(source, target, options) { - options = options || { }; - return Element.clonePosition(target, source, options); - } -}; - -/*--------------------------------------------------------------------------*/ - -if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ - function iter(name) { - return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; - } - - instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? - function(element, className) { - className = className.toString().strip(); - var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); - return cond ? document._getElementsByXPath('.//*' + cond, element) : []; - } : function(element, className) { - className = className.toString().strip(); - var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); - if (!classNames && !className) return elements; - - var nodes = $(element).getElementsByTagName('*'); - className = ' ' + className + ' '; - - for (var i = 0, child, cn; child = nodes[i]; i++) { - if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || - (classNames && classNames.all(function(name) { - return !name.toString().blank() && cn.include(' ' + name + ' '); - })))) - elements.push(Element.extend(child)); - } - return elements; - }; - - return function(className, parentElement) { - return $(parentElement || document.body).getElementsByClassName(className); - }; -}(Element.Methods); - -/*--------------------------------------------------------------------------*/ - -Element.ClassNames = Class.create(); -Element.ClassNames.prototype = { - initialize: function(element) { - this.element = $(element); - }, - - _each: function(iterator) { - this.element.className.split(/\s+/).select(function(name) { - return name.length > 0; - })._each(iterator); - }, - - set: function(className) { - this.element.className = className; - }, - - add: function(classNameToAdd) { - if (this.include(classNameToAdd)) return; - this.set($A(this).concat(classNameToAdd).join(' ')); - }, - - remove: function(classNameToRemove) { - if (!this.include(classNameToRemove)) return; - this.set($A(this).without(classNameToRemove).join(' ')); - }, - - toString: function() { - return $A(this).join(' '); - } -}; - -Object.extend(Element.ClassNames.prototype, Enumerable); - -/*--------------------------------------------------------------------------*/ - -(function() { - window.Selector = Class.create({ - initialize: function(expression) { - this.expression = expression.strip(); - }, - - findElements: function(rootElement) { - return Prototype.Selector.select(this.expression, rootElement); - }, - - match: function(element) { - return Prototype.Selector.match(element, this.expression); - }, - - toString: function() { - return this.expression; - }, - - inspect: function() { - return "#"; - } - }); - - Object.extend(Selector, { - matchElements: function(elements, expression) { - var match = Prototype.Selector.match, - results = []; - - for (var i = 0, length = elements.length; i < length; i++) { - var element = elements[i]; - if (match(element, expression)) { - results.push(Element.extend(element)); - } - } - return results; - }, - - findElement: function(elements, expression, index) { - index = index || 0; - var matchIndex = 0, element; - for (var i = 0, length = elements.length; i < length; i++) { - element = elements[i]; - if (Prototype.Selector.match(element, expression) && index === matchIndex++) { - return Element.extend(element); - } - } - }, - - findChildElements: function(element, expressions) { - var selector = expressions.toArray().join(', '); - return Prototype.Selector.select(selector, element || document); - } - }); -})(); diff --git a/public/javascripts/rails.js b/public/javascripts/rails.js deleted file mode 100755 index b17d5e7..0000000 --- a/public/javascripts/rails.js +++ /dev/null @@ -1,331 +0,0 @@ -/** - * Unobtrusive scripting adapter for jQuery - * - * Requires jQuery 1.6.0 or later. - * https://github.com/rails/jquery-ujs - - * Uploading file using rails.js - * ============================= - * - * By default, browsers do not allow files to be uploaded via AJAX. As a result, if there are any non-blank file fields - * in the remote form, this adapter aborts the AJAX submission and allows the form to submit through standard means. - * - * The `ajax:aborted:file` event allows you to bind your own handler to process the form submission however you wish. - * - * Ex: - * $('form').live('ajax:aborted:file', function(event, elements){ - * // Implement own remote file-transfer handler here for non-blank file inputs passed in `elements`. - * // Returning false in this handler tells rails.js to disallow standard form submission - * return false; - * }); - * - * The `ajax:aborted:file` event is fired when a file-type input is detected with a non-blank value. - * - * Third-party tools can use this hook to detect when an AJAX file upload is attempted, and then use - * techniques like the iframe method to upload the file instead. - * - * Required fields in rails.js - * =========================== - * - * If any blank required inputs (required="required") are detected in the remote form, the whole form submission - * is canceled. Note that this is unlike file inputs, which still allow standard (non-AJAX) form submission. - * - * The `ajax:aborted:required` event allows you to bind your own handler to inform the user of blank required inputs. - * - * !! Note that Opera does not fire the form's submit event if there are blank required inputs, so this event may never - * get fired in Opera. This event is what causes other browsers to exhibit the same submit-aborting behavior. - * - * Ex: - * $('form').live('ajax:aborted:required', function(event, elements){ - * // Returning false in this handler tells rails.js to submit the form anyway. - * // The blank required inputs are passed to this function in `elements`. - * return ! confirm("Would you like to submit the form with missing info?"); - * }); - */ - -(function($, undefined) { - // Shorthand to make it a little easier to call public rails functions from within rails.js - var rails; - - $.rails = rails = { - // Link elements bound by jquery-ujs - linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]', - - // Select elements bound by jquery-ujs - selectChangeSelector: 'select[data-remote]', - - // Form elements bound by jquery-ujs - formSubmitSelector: 'form', - - // Form input elements bound by jquery-ujs - formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type])', - - // Form input elements disabled during form submission - disableSelector: 'input[data-disable-with], button[data-disable-with], textarea[data-disable-with]', - - // Form input elements re-enabled after form submission - enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled', - - // Form required input elements - requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])', - - // Form file input elements - fileInputSelector: 'input:file', - - // Make sure that every Ajax request sends the CSRF token - CSRFProtection: function(xhr) { - var token = $('meta[name="csrf-token"]').attr('content'); - if (token) xhr.setRequestHeader('X-CSRF-Token', token); - }, - - // Triggers an event on an element and returns false if the event result is false - fire: function(obj, name, data) { - var event = $.Event(name); - obj.trigger(event, data); - return event.result !== false; - }, - - // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm - confirm: function(message) { - return confirm(message); - }, - - // Default ajax function, may be overridden with custom function in $.rails.ajax - ajax: function(options) { - return $.ajax(options); - }, - - // Submits "remote" forms and links with ajax - handleRemote: function(element) { - var method, url, data, - crossDomain = element.data('cross-domain') || null, - dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType); - - if (rails.fire(element, 'ajax:before')) { - - if (element.is('form')) { - method = element.attr('method'); - url = element.attr('action'); - data = element.serializeArray(); - // memoized value from clicked submit button - var button = element.data('ujs:submit-button'); - if (button) { - data.push(button); - element.data('ujs:submit-button', null); - } - } else if (element.is('select')) { - method = element.data('method'); - url = element.data('url'); - data = element.serialize(); - if (element.data('params')) data = data + "&" + element.data('params'); - } else { - method = element.data('method'); - url = element.attr('href'); - data = element.data('params') || null; - } - - options = { - type: method || 'GET', data: data, dataType: dataType, crossDomain: crossDomain, - // stopping the "ajax:beforeSend" event will cancel the ajax request - beforeSend: function(xhr, settings) { - if (settings.dataType === undefined) { - xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script); - } - return rails.fire(element, 'ajax:beforeSend', [xhr, settings]); - }, - success: function(data, status, xhr) { - element.trigger('ajax:success', [data, status, xhr]); - }, - complete: function(xhr, status) { - element.trigger('ajax:complete', [xhr, status]); - }, - error: function(xhr, status, error) { - element.trigger('ajax:error', [xhr, status, error]); - } - }; - // Do not pass url to `ajax` options if blank - if (url) { $.extend(options, { url: url }); } - - rails.ajax(options); - } - }, - - // Handles "data-method" on links such as: - // Delete - handleMethod: function(link) { - var href = link.attr('href'), - method = link.data('method'), - csrf_token = $('meta[name=csrf-token]').attr('content'), - csrf_param = $('meta[name=csrf-param]').attr('content'), - form = $('
    '), - metadata_input = ''; - - if (csrf_param !== undefined && csrf_token !== undefined) { - metadata_input += ''; - } - - form.hide().append(metadata_input).appendTo('body'); - form.submit(); - }, - - /* Disables form elements: - - Caches element value in 'ujs:enable-with' data store - - Replaces element text with value of 'data-disable-with' attribute - - Adds disabled=disabled attribute - */ - disableFormElements: function(form) { - form.find(rails.disableSelector).each(function() { - var element = $(this), method = element.is('button') ? 'html' : 'val'; - element.data('ujs:enable-with', element[method]()); - element[method](element.data('disable-with')); - element.attr('disabled', 'disabled'); - }); - }, - - /* Re-enables disabled form elements: - - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`) - - Removes disabled attribute - */ - enableFormElements: function(form) { - form.find(rails.enableSelector).each(function() { - var element = $(this), method = element.is('button') ? 'html' : 'val'; - if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with')); - element.removeAttr('disabled'); - }); - }, - - /* For 'data-confirm' attribute: - - Fires `confirm` event - - Shows the confirmation dialog - - Fires the `confirm:complete` event - - Returns `true` if no function stops the chain and user chose yes; `false` otherwise. - Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog. - Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function - return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog. - */ - allowAction: function(element) { - var message = element.data('confirm'), - answer = false, callback; - if (!message) { return true; } - - if (rails.fire(element, 'confirm')) { - answer = rails.confirm(message); - callback = rails.fire(element, 'confirm:complete', [answer]); - } - return answer && callback; - }, - - // Helper function which checks for blank inputs in a form that match the specified CSS selector - blankInputs: function(form, specifiedSelector, nonBlank) { - var inputs = $(), input, - selector = specifiedSelector || 'input,textarea'; - form.find(selector).each(function() { - input = $(this); - // Collect non-blank inputs if nonBlank option is true, otherwise, collect blank inputs - if (nonBlank ? input.val() : !input.val()) { - inputs = inputs.add(input); - } - }); - return inputs.length ? inputs : false; - }, - - // Helper function which checks for non-blank inputs in a form that match the specified CSS selector - nonBlankInputs: function(form, specifiedSelector) { - return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank - }, - - // Helper function, needed to provide consistent behavior in IE - stopEverything: function(e) { - $(e.target).trigger('ujs:everythingStopped'); - e.stopImmediatePropagation(); - return false; - }, - - // find all the submit events directly bound to the form and - // manually invoke them. If anyone returns false then stop the loop - callFormSubmitBindings: function(form) { - var events = form.data('events'), continuePropagation = true; - if (events !== undefined && events['submit'] !== undefined) { - $.each(events['submit'], function(i, obj){ - if (typeof obj.handler === 'function') return continuePropagation = obj.handler(obj.data); - }); - } - return continuePropagation; - } - }; - - $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }}); - - $(rails.linkClickSelector).live('click.rails', function(e) { - var link = $(this); - if (!rails.allowAction(link)) return rails.stopEverything(e); - - if (link.data('remote') !== undefined) { - rails.handleRemote(link); - return false; - } else if (link.data('method')) { - rails.handleMethod(link); - return false; - } - }); - - $(rails.selectChangeSelector).live('change.rails', function(e) { - var link = $(this); - if (!rails.allowAction(link)) return rails.stopEverything(e); - - rails.handleRemote(link); - return false; - }); - - $(rails.formSubmitSelector).live('submit.rails', function(e) { - var form = $(this), - remote = form.data('remote') !== undefined, - blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector), - nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector); - - if (!rails.allowAction(form)) return rails.stopEverything(e); - - // skip other logic when required values are missing or file upload is present - if (blankRequiredInputs && form.attr("novalidate") == undefined && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) { - return rails.stopEverything(e); - } - - if (remote) { - if (nonBlankFileInputs) { - return rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]); - } - - // If browser does not support submit bubbling, then this live-binding will be called before direct - // bindings. Therefore, we should directly call any direct bindings before remotely submitting form. - if (!$.support.submitBubbles && rails.callFormSubmitBindings(form) === false) return rails.stopEverything(e); - - rails.handleRemote(form); - return false; - } else { - // slight timeout so that the submit button gets properly serialized - setTimeout(function(){ rails.disableFormElements(form); }, 13); - } - }); - - $(rails.formInputClickSelector).live('click.rails', function(event) { - var button = $(this); - - if (!rails.allowAction(button)) return rails.stopEverything(event); - - // register the pressed submit button - var name = button.attr('name'), - data = name ? {name:name, value:button.val()} : null; - - button.closest('form').data('ujs:submit-button', data); - }); - - $(rails.formSubmitSelector).live('ajax:beforeSend.rails', function(event) { - if (this == event.target) rails.disableFormElements($(this)); - }); - - $(rails.formSubmitSelector).live('ajax:complete.rails', function(event) { - if (this == event.target) rails.enableFormElements($(this)); - }); - -})( jQuery ); diff --git a/public/robots.txt b/public/robots.txt old mode 100755 new mode 100644 diff --git a/themes/olive/views/layouts/.gitkeep b/test/fixtures/.gitkeep old mode 100755 new mode 100644 similarity index 100% rename from themes/olive/views/layouts/.gitkeep rename to test/fixtures/.gitkeep diff --git a/test/fixtures/contacts.yml b/test/fixtures/contacts.yml deleted file mode 100755 index 8c98048..0000000 --- a/test/fixtures/contacts.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html - -one: - nick: MyString - mail: MyString - fname: MyString - lname: MyString - info: MyString - -two: - nick: MyString - mail: MyString - fname: MyString - lname: MyString - info: MyString diff --git a/test/fixtures/folders.yml b/test/fixtures/folders.yml deleted file mode 100755 index fdba86d..0000000 --- a/test/fixtures/folders.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html - -one: - name: MyString - delim: MyString - attribs: MyString - messages: 1 - new: 1 - -two: - name: MyString - delim: MyString - attribs: MyString - messages: 1 - new: 1 diff --git a/test/fixtures/links.yml b/test/fixtures/links.yml deleted file mode 100644 index f63b205..0000000 --- a/test/fixtures/links.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html - -one: - user_id: 1 - lgroup_id: 1 - name: MyString - url: MyString - info: MyString - -two: - user_id: 1 - lgroup_id: 1 - name: MyString - url: MyString - info: MyString diff --git a/test/fixtures/messages.yml b/test/fixtures/messages.yml deleted file mode 100755 index 9e6bcec..0000000 --- a/test/fixtures/messages.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html - -one: - folder_id: 1 - user_id: 1 - msg_id: MyString - from: MyString - to: MyString - subject: MyString - content_type: MyString - uid: 1 - size: 1 - unread: false - date: 2011-07-27 15:43:52 - -two: - folder_id: 1 - user_id: 1 - msg_id: MyString - from: MyString - to: MyString - subject: MyString - content_type: MyString - uid: 1 - size: 1 - unread: false - date: 2011-07-27 15:43:52 diff --git a/test/fixtures/prefs.yml b/test/fixtures/prefs.yml deleted file mode 100755 index dfc7203..0000000 --- a/test/fixtures/prefs.yml +++ /dev/null @@ -1,9 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html - -one: - theme: MyString - locale: MyString - -two: - theme: MyString - locale: MyString diff --git a/test/fixtures/servers.yml b/test/fixtures/servers.yml deleted file mode 100755 index f44a2a8..0000000 --- a/test/fixtures/servers.yml +++ /dev/null @@ -1,9 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html - -one: - name: MyString - port: MyString - -two: - name: MyString - port: MyString diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml deleted file mode 100755 index 7060ff2..0000000 --- a/test/fixtures/users.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html - -one: - email: MyString - first_name: MyString - last_name: MyString - -two: - email: MyString - first_name: MyString - last_name: MyString diff --git a/app/views/contents_moved_to_olive_theme_directory b/test/functional/.gitkeep old mode 100755 new mode 100644 similarity index 100% rename from app/views/contents_moved_to_olive_theme_directory rename to test/functional/.gitkeep diff --git a/test/functional/contacts_controller_test.rb b/test/functional/contacts_controller_test.rb deleted file mode 100755 index cc51a6a..0000000 --- a/test/functional/contacts_controller_test.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'test_helper' - -class ContactsControllerTest < ActionController::TestCase - test "should get index" do - get :index - assert_response :success - end - -end diff --git a/test/functional/core_controller_test.rb b/test/functional/core_controller_test.rb deleted file mode 100755 index eed5126..0000000 --- a/test/functional/core_controller_test.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'test_helper' - -class CoreControllerTest < ActionController::TestCase - test "should get login" do - get :login - assert_response :success - end - - test "should get logout" do - get :logout - assert_response :success - end - -end diff --git a/test/functional/folder_controller_test.rb b/test/functional/folder_controller_test.rb deleted file mode 100755 index 7e0419b..0000000 --- a/test/functional/folder_controller_test.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'test_helper' - -class FolderControllerTest < ActionController::TestCase - test "should get index" do - get :index - assert_response :success - end - - test "should get create" do - get :create - assert_response :success - end - - test "should get delete" do - get :delete - assert_response :success - end - -end diff --git a/test/functional/internal_controller_test.rb b/test/functional/internal_controller_test.rb deleted file mode 100755 index da2cd5d..0000000 --- a/test/functional/internal_controller_test.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'test_helper' - -class InternalControllerTest < ActionController::TestCase - test "should get error" do - get :error - assert_response :success - end - -end diff --git a/test/functional/messages_controller_test.rb b/test/functional/messages_controller_test.rb deleted file mode 100755 index fc5ee1a..0000000 --- a/test/functional/messages_controller_test.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'test_helper' - -class MessagesControllerTest < ActionController::TestCase - test "should get index" do - get :index - assert_response :success - end - -end diff --git a/test/functional/messages_ops_controller_test.rb b/test/functional/messages_ops_controller_test.rb deleted file mode 100755 index fa611ba..0000000 --- a/test/functional/messages_ops_controller_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class MessagesOpsControllerTest < ActionController::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/functional/prefs_controller_test.rb b/test/functional/prefs_controller_test.rb deleted file mode 100755 index bbd96a3..0000000 --- a/test/functional/prefs_controller_test.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'test_helper' - -class PrefsControllerTest < ActionController::TestCase - test "should get index" do - get :index - assert_response :success - end - -end diff --git a/test/integration/.gitkeep b/test/integration/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test/performance/browsing_test.rb b/test/performance/browsing_test.rb old mode 100755 new mode 100644 index 867fc8c..3fea27b --- a/test/performance/browsing_test.rb +++ b/test/performance/browsing_test.rb @@ -1,8 +1,11 @@ require 'test_helper' require 'rails/performance_test_help' -# Profiling results for each test method are written to tmp/performance. class BrowsingTest < ActionDispatch::PerformanceTest + # Refer to the documentation for all available options + # self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory] + # :output => 'tmp/performance', :formats => [:flat] } + def test_homepage get '/' end diff --git a/test/test_helper.rb b/test/test_helper.rb old mode 100755 new mode 100644 diff --git a/test/unit/.gitkeep b/test/unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test/unit/contact_test.rb b/test/unit/contact_test.rb deleted file mode 100755 index ee7d2ca..0000000 --- a/test/unit/contact_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class ContactTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/unit/event_test.rb b/test/unit/event_test.rb deleted file mode 100755 index c2b9b78..0000000 --- a/test/unit/event_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class EventTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/unit/folder_test.rb b/test/unit/folder_test.rb deleted file mode 100755 index fdd21d6..0000000 --- a/test/unit/folder_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class FolderTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/unit/helpers/contacts_helper_test.rb b/test/unit/helpers/contacts_helper_test.rb deleted file mode 100755 index c41d1ac..0000000 --- a/test/unit/helpers/contacts_helper_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test_helper' - -class ContactsHelperTest < ActionView::TestCase -end diff --git a/test/unit/helpers/core_helper_test.rb b/test/unit/helpers/core_helper_test.rb deleted file mode 100755 index 8a87c05..0000000 --- a/test/unit/helpers/core_helper_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test_helper' - -class CoreHelperTest < ActionView::TestCase -end diff --git a/test/unit/helpers/folder_helper_test.rb b/test/unit/helpers/folder_helper_test.rb deleted file mode 100755 index a29bca3..0000000 --- a/test/unit/helpers/folder_helper_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test_helper' - -class FolderHelperTest < ActionView::TestCase -end diff --git a/test/unit/helpers/internal_helper_test.rb b/test/unit/helpers/internal_helper_test.rb deleted file mode 100755 index e035b93..0000000 --- a/test/unit/helpers/internal_helper_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test_helper' - -class InternalHelperTest < ActionView::TestCase -end diff --git a/test/unit/helpers/messages_helper_test.rb b/test/unit/helpers/messages_helper_test.rb deleted file mode 100755 index caba605..0000000 --- a/test/unit/helpers/messages_helper_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test_helper' - -class MessagesHelperTest < ActionView::TestCase -end diff --git a/test/unit/helpers/messages_ops_helper_test.rb b/test/unit/helpers/messages_ops_helper_test.rb deleted file mode 100755 index 17c1a5c..0000000 --- a/test/unit/helpers/messages_ops_helper_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test_helper' - -class MessagesOpsHelperTest < ActionView::TestCase -end diff --git a/test/unit/helpers/prefs_helper_test.rb b/test/unit/helpers/prefs_helper_test.rb deleted file mode 100755 index 4e27f74..0000000 --- a/test/unit/helpers/prefs_helper_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test_helper' - -class PrefsHelperTest < ActionView::TestCase -end diff --git a/test/unit/link_test.rb b/test/unit/link_test.rb deleted file mode 100644 index 2595574..0000000 --- a/test/unit/link_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class LinkTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/unit/message_test.rb b/test/unit/message_test.rb deleted file mode 100755 index e4de21d..0000000 --- a/test/unit/message_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class MessageTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/unit/prefs_test.rb b/test/unit/prefs_test.rb deleted file mode 100755 index ec6ef1a..0000000 --- a/test/unit/prefs_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class PrefsTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/unit/server_test.rb b/test/unit/server_test.rb deleted file mode 100755 index 2e90285..0000000 --- a/test/unit/server_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class ServerTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb deleted file mode 100755 index a64d2d3..0000000 --- a/test/unit/user_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class UserTest < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/themes/olive/README.olive b/themes/olive/README.olive deleted file mode 100755 index bf812cf..0000000 --- a/themes/olive/README.olive +++ /dev/null @@ -1,3 +0,0 @@ -Theme based on Web App Theme Olive theme. - -http://pilu.github.com/web-app-theme/#themes/olive diff --git a/themes/olive/images/License.txt b/themes/olive/images/License.txt deleted file mode 100755 index 2248798..0000000 --- a/themes/olive/images/License.txt +++ /dev/null @@ -1,6 +0,0 @@ -This icons pack made by Freeiconsdownload from http://www.freeiconsdownload.com -These icons are free for personal,non-commercial use. -if you wish to these icons for Commercial website,software or commercial project. -You must indicate the icons Author "Icons are from http://www.freeiconsdownload.com" in your projects. -Thanks -Matt. diff --git a/themes/olive/images/copy.png b/themes/olive/images/copy.png deleted file mode 100755 index 1841280c68aa7dd5fd99252d0124c43ba0a32ff3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmV;{0xA88P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L09-}@09-}^6qG|j00007bV*G`2ipk= z3nBu6+@o3m00LG?L_t(I%dM0>ZxcZfhM(CxpT8hBIM_iE65tAgg5*S^icBa$A_&nz z6+T)dgwh1Mqy+u|Eq{R`i5#r7Q3?u_0)$Zjp#($h;5hc(?NY3rFXU95G}7&}JMYfy zXhw`N0L(7N6)*-AfD}i6HDCo;njUXz05QfeyBHq?-gvGQGf9_ZR2`|(XlbgAfOcTY zz}@Nb<~Nxs#S~D=_PNDNgK+|F2(*n-1jPO!`__&Ul)(G1P1fr{8Mx*GW3h-7&txKe zsx|?8sOzLucWuR#bW92PY?OL4EbjPbOaX<=afcsUKIhVRxX}LyCH7X=5ga9)PTuBh z-vio#rX3pEp`jHR8h%JF)u=&2#wwo(gt*= zQrrGIbCv6CwmvXA@QQqTvM1NZ`tAvJQtQHPe}nIT<^edLzSoljbhC52Ioh1<6OIf# z<6`D9)twbeUvBLR9p=d18(AU4ZW#)>=M0~k;%9T2g~|kh-s;IcS31rep>BA?*(Y4i zPO;HkX8!X8zOExjaILL%g=(QTh!QHBZ^DDafQb0DIuMO{d^ zhH72o2b6)O17jrOO7TR(A>par77+P&jBK|JzYdR)|25eD0+y^$CAoxk&j0`b07*qo IM6N<$g1YlMdH?_b diff --git a/themes/olive/images/download.png b/themes/olive/images/download.png deleted file mode 100755 index dd0f7c64cff20cd99ac549495b20331e8539c92c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmV+>1KIqEP)z>%33NqRbVF}#ZDnqB004<9jRpV!0>eo}K~#90eN; zBGBVK-<><45+}K7JNL|)^PO{UEdbX234aAY%@=fkaA5IHcRCDpvy3}2?pjTY4tkcu zuo~tZa9g(8(+6vt2N~yz7)dP#w84` zM-=IM8*PefBzGD8ip#2*3!-ts#_aYTrAiYg;;FE_`oUB{lTypnRtY9P7bB4`#$>(( z)9Uxzol?qAh#V>>cZZV0Yb=H_Oys|d7-IPhpEZU@A5I4_zIjghsXe7;4oBTjR0;ZA zHwIjf*~;OKBE0-m3_fdQSG2iS(sR?QE=4w!z34eNzNs5#TE;9G8rvo&k*Hx_=hE~S zVgKrRkBG;C4K!I9!k%U4gveya`VM8I*gM?CQQ<%mG}lpK4~NI!uz$3R7ay;Bgsk=n z(VWh=&W(;0AI;rR5B|XEYi8^AKmNsav_cfCdZ#z>%33NqRbVF}#ZDnqB004<9jRpV!0`N&hK~#90eN;(P6HyqP$|=cA z5|mJi{0mRs@(UEa`VTzDlQ%ecK|QgFKv)b3$RZ-HRf1Pc-%2?-HoGsvPsTv!T$ z_Vt^YpjDKq`YJQ;ebdulcfU~pD7Oaf75tYM8#^Nir!**B2`AhTizVFgb60t>PzwH( zh6xSamRoHJ4IL>LdOvs&jJpiTdr>C>(;9+F7lH{@F50+ZmQQJkYY5G_(4BFkf8HZN zCsm1_*{Va2z*1@_oM@a<(JEdLP8q;@DDIZ8z8!HGpyU!+^ICQK^Ov!)Gn#K&$OX}vb_=GOZ1UAd z?I1A@NOByK1UYDB#BNB(#=nNOiYnSHvGsRrMUwQ}EQx#N5M1LxY*bpNPM|seLqU|n z^a;{WJ{GXauLP!5Gz%%C>*aaU2S?j@xpWbag{-2fT&WjiDS;tx0NJ0<$PAap$Rx;TaXu ze@3fPnAk21wM=C-MJ0+Zbuz^);Q}2Gh|SKV=fA}s_VO7%YYFbVJM6%V#WO-rLsN35 zt{tYfOd{3jH8o}`2NnwOW~C5()}md}D(0c)G=~*Rc|}Ohqifcvo=mYwRx$Y1r|$NZzAkjMJ*ml2s7vpxhU(FL1Z*-#W|nN`;q;$!Kuz>%33NqRbVF}#ZDnqB004<9jRpV!0=P*;K~#90eN@{{6HyeM^r`Jk zTL|Te_#5hz{S|+qKcGDLQsavdpaSJ0v{bMv67@+OAOQ^&>4mlkh@lvb0ow#kv0j#E z?KvZ$jg#!ObIzJIYp=D>7yyhL^WJX$x_^)=SunVgDg>bxySNkOt}&dm@TK_<#^9O- zZp+qq!NOE2fXtf^Ch`G?av`q9LzBW-i zDN+OOD=wpN&5xlC6JzQHsggr%C-Xsh_02_}LrN`+@57j{cECR9z`{WoOX~jR$4<(( zMGlpdrv9yh=Fd8EpRVDsv5W`XA#} zjP{sQIrp{=&-XjPXI0C9V-^gJ(kVY+Oc61mxNeBGcwHwrC@j+;B@6mqmriPoHa2Xu5K zB4I*D$ad4E3z*yt{o`NKiB^cBJ+GV@;8`Kzbor7H^342AI9@m($k4ja8E*a2uzOZ~ zNEZDV%k!(^$B3%Y9PdrsRbLk-I$5-&75b8?Sm<5(GXfr&BRxwVeK?~n4rr?b8*vXU Z>o;K&GS`<_vAX~O002ovPDHLkV1lU+ZgKzs diff --git a/themes/olive/images/forward.png b/themes/olive/images/forward.png deleted file mode 100755 index d5b3150d5ee79b7ee5d116c71d72643699c747a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmV-11J3-3P)z>%33NqRbVF}#ZDnqB004<9jRpV!0?tW9K~#90eN@X%Q&AMX>8S0! zZ6SpbCdR~1Fityg>Mv+wj33Z1kbx77BM6A41%$TZqlnh%K*dX&0EV{E2QLd6poobf zzEBaQ+r9R=2O2`W$w_<9S!bQS*IMTqL}c6;cemqL|Doi9MFwV)Wk2y`8&<+tHKIj} zraxXIBa*WS%d&L0Y|*_1AEn*}Xt?B4l#$tHiZOh+;-lfRDU&WNI3r{Xlq^cj`)I7% zMo(4(Ogd{)o&KT*dc<5tcg{f;3TU zp)9{oe`-bfwv>a)K{LeVtbHGqGt#SPXtWxjhfAuF_MSY>^U>#Dc>!lPuE@C~i+--u z5>Ti&?JFkk1Im~FZBjZ-m0oc&29#GMx#kME6TBYbWH5A?=O<)cU0cZ@&9Z{o> zt(})5%wsP4>1q=|VIx*FslTLv>6LTR*_Yj-0LNHX23Z1n=^r%ng-VA(G~ z0rliP)LSs=puWfLp5os>6rWc|11O;G84p3HwQtXb5iTMCa1tR9P{)Lux@K4-X1l|q z5ty7eN&H8&I@rWG8>&skh~|aG7M&b1+b{vgW4t(03H)~e11$DnuNFLXE9;>bADUTD zrD?)x4t3w>5R6t^MU9lBF;ba+-$bw1gM_`h?Dj$KM{BNArIo_iukXqiPbws4S!yN)y?Z+$G^mDI9OWP5# z8-`DAUOkMoHXqSGBFZU$5$|~AtZYmzpO=`!LVNv^*m#nD31zJig*)G>4B)PSFkQVU zS-_n^g_;m8A1CZ9cvQHZkA~ej<)K8yOM@jZZ}d_>kAWiIO&a2_3mlDCENKP0q?Rn| vnmUYtOLF97$>m(m@Cg_6qzfC;mloq6vmhxJLdM=d00000NkvXXu0mjfoc?XV diff --git a/themes/olive/images/key.png b/themes/olive/images/key.png deleted file mode 100755 index 61c34b36210f3e70d1692e2dc2ed05ae791fb3d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1475 zcmV;!1w8tRP)z>%33NqRbVF}#ZDnqB004<9jRpV!1z<@;K~#90wO3nD8&?qa6S1+q z#<-zKmHJY(Y9Aw2ZJ#S4^3Y$zVA=zCkqPzed7wy6?Apn(7Z%*`d3OCSLyB{XVO z8w?nXF}AS-B*Bz`b0eW7OlQvSSs$BS%B8h5mc4uSoA1ngGiTNS0EY5gMkiVs+8O#& zdS%7}?I8)SMr`bES!AOf=wb(6qzfh06S+`7WrpTiD;N|EdcKT)8yW%@XboDy9hRUs zmIsC!zZoWz73xL9d0#Hn;>AW>>6%k8Zr*c1A1?2W=E1;X9$Z_r!_8#}RNgkq4(iY& zVG|XCy0h{*48>2Sc@nM2Mi&IuerC`_kKjA!CD}#As1bS>tk8qzS&*PFD#38v2KcbL zk0QPo!E)HXXw~S713Xb1^v7g^LkTV17>MNST5CXdjppTXDz3Vl z%iL0~XcLq#+6d{2HbXL?T~qETJfxG6dv=v#8HK4{NqA#G8z}HsDLi`N%K%aVYW%Xs z>au`ZW^F*9j!+@I+TCKJ78$7klnaU?fkZdm41}T?So@J}jo7p(Y}yo%uCSB_s2Vr1 zRFEt=&@Yo_6^Phq0das6^rHq@P`P9SUD5%%GHoJ&6icH}-f%$ML^HB93II9O8#L-d zG;&hJpHTrw6ogD7*-u0yG7_7@qL2&8N!9=7Y5`nN|tW^d}m2uA^_+KCb)hM5|6v#M*LG4P84NrM*t927v1cHwz+pO zz`JmL@$^115dcWKbPNo~zfddE`|vy6(v~aIng+Nqo~weyQv=XG_a3Z0_wCysI_Cud zDk2d?t2gWg5dhA4O@{_)m|{XIA%IlF)Zsu}K?|>k69izQKh4u-7*g7|e2mF$+@rK{ zvTHF3Qz`)+chv61YBVY}e$am4%qVA}Cm5BQKMdGmnvjz>qU?S`VerwyO5C0&YzN<3 z0gSJ`nYN_1`3_*-WC80%m7^*d@@3-fgnDv{ZuFw#TT2e;LZMQ&c@=Q!@M_><=2gLu z8D6LS+~S>s4#GhkDt^Psrzf1pNu;<4N?13Yk?XfHkgjDeyZ@3%e>@M`X04n=37_+z zVLIJRxMYt?Na!brrYvw3K+zW5P%F})}34|Vw<8x55bG&`FI3fr~g8@a`cJX$m-SL^%u3 z{$550No?0`IP-o2tIx);VZVa$)o(H)GLkrr1RN|i9l9FPAi(D%kwj>1 z>U=h71@D9JVSQ^Fo@~cqZoLj#XWu?%#bgpFWfAbn=Ncanvx#WwcDOv(81i8QfyObc{}E#StTSESDaXZCbl z$cJ3AAAUDM{e&4@Gx*jP)VHpnq-*W?Y=hszu!K{Qd=zRP$62E~y~3U;Prue5#heNT dVdZG~`Ugkm>MqjUfIt8M002ovPDHLkV1n^Fnc@Hd diff --git a/themes/olive/images/left.png b/themes/olive/images/left.png deleted file mode 100755 index 7a2be54f15ce0c65d3f6cb752f2b5a8e31f3e3b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 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 N002ovPDHLkV1j`;YlQ#+ diff --git a/themes/olive/images/plus.png b/themes/olive/images/plus.png deleted file mode 100755 index 5bc8a30f8382817d7cdabb665836292450509a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmV+x1L^#UP)z>%33NqRbVF}#ZDnqB004<9jRpV!0<%d(K~#90eN;db;xbwm{ODXX(WeebopnD>;0I3qd*K$yx{_E4q-zR;8ID=60jXhZCgsqe{>X0mpNefWqx5 zFDQ%!Qe3yg%tB*HueOfBzlwDSUG%tS+i&;kMfB?;h1W?DoMS-*8oi5UYS#a7MT>r_ zL_goCAt+*WFPZ4cXka`a#J8h79<6HNGi9p+-8R~lSX%IE>#A6M_(j;@rj*y598W&nLZDJCM zI?}o?T~!GAd@mJ*lnJaP94=U8BDZ&pFUfWeCh)Ik@8{$>LPonxw4nRj=CqCxCm~~g za$3TV(x$YrntyTKS|N%w&FKvAu2d3^uV2B~+GWWE%dI5rO#5`WosWjyG~+`&>qlS4 zuax-Fqekx%-%a$ZuM0amn6;!7`ZBs=p?T&k0v^eclO>OHIU`jrXtfI)b}uc*A5mN% U#vj6Q2LJ#707*qoM6N<$g31_XF#rGn diff --git a/themes/olive/images/power.png b/themes/olive/images/power.png deleted file mode 100755 index e3c6bd763e5dc33c2f1c57c86ccc6851c8409393..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmV-u1DE`XP)z>%33NqRbVF}#ZDnqB004<9jRpV!0|iM$K~#90eN;Y27#FWZq!e(}JcwxcIv)hHW6X2f!}=u4bHPt+ot20q9yr_vEo(Hpm7AZ5eD zWjm3+u@L+u39w?2xRkm%GZFjo?bn)YGDn~{Vv|=_O`0@P)-w6tf$_Cs1lEf&vF^YW z-3K>ISbjj{w1!o5lFr?|oM?^YZsXbNMLbxtV<4#&Qdv)$+rq~&l)fzB?wA$(_zmBp zjg+baayEvHU}0Qf%Yua-(3pD&?4C4g)-mucVQl3X`Kfuzn%P&@J(@jVaKoSXn7eW$TZ9+yiowt7vMW2O9^E0m zQT(ZLjAbuLcf~2F=Wnm#arU$ja+h%y92$3B<$!l*zcY z4~XWpd>iu7#d3A{@I6R=l}dz6=uMQ8(jb!C^#%X>lRP7q0+FkFM(Y8dmBWN1OV{vv z<0fWljb^S3VOR9uKw9QaT65<=8iDF*6MAE2bVhhW&1k395$1afy6Nk}iF#tHl)}FF ylPYSa3oT%fKFar!AwQh1BL?)SfpzLb%j+*iVI|}?B$Vd>0000z>%33NqRbVF}#ZDnqB004<9jRpV!0`y5lK~#90eN;(LQ&AXw>8itP zi)mT0(O=*nFzL#@8x!Nw#2?U|J6Y%g;tB$kp-i2aRn!<`D6e2Z1Fg`37Q`Z@$Y6*v zsaWKA&wcL!Mq-njw)cMbyz`xNzNY|C9>lG+{FXm@vra@8R4CkuW?T@PH9Yb2ROy&k z@x8JRrEOLPkL6KMMn!DFiQy$TLTRTCnb~f^&*L401Y#)Tkee1B7|W-0rBy_7P7E%( z@O0TNK;JviEwB!Ltzt-EDNVC>WVRbHvUF9j(t))|+9e-dKVj2B$z@{Qi};!cTG@j{ z*^5c>|LtZq>1&b>nG-vdbK&^p2h7jN2R8-_dLy;XNjq|10`ee~^I)KGMLxGL?-EQ^ zS>y{Otst=$QQSV~K+r@Mjn++Ab?I1mu32+YMT;r6HnmYLNspIF+$)>l9vfnz(lvJm zO&@MDWEDmCm4F~i3CzMbmxxFOI#VB1(JD!2r-nhCmk8 zC9G(ivCG0%fyhVGZWcy!4oLqQtvX?1SQu)W%GHsSD4NvC5VM9GbUY{y`?Bu;F4nM? zcX-zn-1lhGhLmJtjM^W7E#nk6p$n887UIe5UG>vJKA`z%9rTcQ;o7bOiAijDNvAkEX@(L>^ zPvc5c$&j(_%d2NVrgxm7MCmS;zsAIhiWSCq>Gml@wrfUuz-X7zJ_DN7{bjtf#w_r2 zf(q96$FOmrVfScJv|96zei7YT3FL2hr)Pk(GE}%G*r_rLoEf$oG%~@Kdoq6;(w?&E z;Wl0xTEnyrk*povX}h>+N2gd_^Zf5XuXwxA(QsCktx%WYf{MoJ(+F5(j*Ki>jN$ZO hFrXI=tj`=;u0M7tE?CBfmN@_b002ovPDHLkV1nfLjz0hZ diff --git a/themes/olive/images/reply.png b/themes/olive/images/reply.png deleted file mode 100755 index 7d7a36362fcb51c836b638bd3ff5e4fc90b637d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)z>%33NqRbVF}#ZDnqB004<9jRpV!0>(*1K~#90eN;77yyhXQ{FoMx_^*ZHDPcikqbf=Yq%5TuF;V(G5Prp zjJA{sZtGT0&cwm-1cui`=*w2vkS%FHI;FjIG>*PpKo>pSa4KTNvL@my6&NZ8@p>~P zpdSM$FD4nE<*(%4Fe&PPTJ2g2AHQI4ZJA(_^Dm$a1Qgy+?4bGJc*nYEyIC zht?%~d~5fCzWVD)8UuxpHfmGTq7T&Rxzk7&8GvLVi~;dTo9bu0Xk7GP*_c=fK>cU5 z>czxdOLcO@tl!yre&@`q^ zMIun!lI@Ef&q|4B4u4){oML|e{$GH}f_VYtdgsPh&E9?JoToC1hwb=wT2jD+-sDwg4W0KM{cp`-nIQ%9jL!)qoQ7tSN#(HuEh n@;HYxdc^^~>cB?aL(BRF`O_&0;ThUz00000NkvXXu0mjfR3CWv diff --git a/themes/olive/images/right.png b/themes/olive/images/right.png deleted file mode 100755 index cc12a969d1b1a0965efa2ffad13b597d4562d2c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798 zcmV+(1L6FMP)z>%33NqRbVF}#ZDnqB004<9jRpV!0=r2>K~#90g;YyVQ&AYa>8kC$ zZ81P%g5u7-zo5UV@dwDlO^q9Q3oXwU5acBxE{s?p0SUCy2Q38=A`eLfu}Z`eb^PX> zdqIR~lN0DUbLY-CGp7asf zq#G2*0i)@FEX~Y8!!vGe9f5xg>nytHa?DQ5eW+HVU+qwMl^TM39Ed=pbNQT_^FI-x z6g?`UpKVkS6f&Y|6CD{1jES8G-xe@f)W9*ZRY3QQRuMb5dlxHWuVeA?>DC!gftr&Z zr1rxy{scBlqYCutWLdqMKm}@A^ngA+PMM&ohXP;$m?TS}K;daO8Wz15fQ*~Kz7-QH ze^x6jA;u(7CseLTQn4hIPqvvg++gBSIUL9Z{<(-Dme256$ME38Sr49XUK2mHr_{{h z`fYEAY&V8&kJ-wJcNKW~z7l-akzLm%^EjS6t%})Xg~LZun(JrQIxS-s42^A5CXuKu zzkP{tpkSR7F}qfAdhhEr{`c8CexWMu5VG3mL`yo~7CSoL zKdNKRk59K10W%*g)L!y0uA@~%q51{g0p69r3D=MM5zF0Bo#43L*^7a+r#!mc_K!xQ ze%^z4&Wo-LFP#@1vO3fJZlXtiU6^PrXQ@%>%kZj&hWWD!xKxkqF1hT>8M@+vUUgxE c&ZXu04UR7^6^xt$mjD0&07*qoM6N<$f`y=IS^xk5 diff --git a/themes/olive/images/save.png b/themes/olive/images/save.png deleted file mode 100755 index 90bac2694d69ececeded401b3db528214c4fd03b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmV-e1E>6nP)z>%33NqRbVF}#ZDnqB004<9jRpV!0`*BmK~#90eN@X%Q&AMX>8Ov} z76T?GjLC6tCppGCs779|@Cb!HK8KMd*q<4aoYa9elcyPIM(4YSF?CvpiZ`T!(+&iM}Nl z2Gece{-khrqi@j|#8)SrNrKN%xZ-}p5VeBDI3UTj2y(k9z(K1ftcG-K{B77mQAJBZ?9k+=^NRHA9Eq2xA-KkY*r>J5 zo>&(JuOz%2eYK4)8o(D&=O=J*`2=8WLQ^!O?dd z<4{n_(I;p`R84hJ8yaE`Ot0U?%2rU0yM&*|dkXQ%lFMkSow0#BJywl(VH5`P-f6tfxO zHvcq2)l)Y3lXkSn?Q-GlXq9T4<8KE#<==&lb|-Z;3UwJ+)KN2a5&?_Kk(ninc{#mj iT+p*Ftfz2kS-${4SS##7yp~e{0000Px#24YJ`L;wH)0002_L%V+f000SaNLh0L09-}@09-}^6qG|j00007bV*G`2ipk= z3n?kil!MU#00OT`L_t(I%dM2pYZFlr$3OG(c9S$UF_u=PsEAdR)=RyJP^0}1#Dj>x z(1Qo@>P0;&h&RErAR-FtQSekLt$M3JPz2G6Six3nnrNCdyZgq&OH%8>lMe>=?Y{lY zd}rp3s44)LA7>3P0t^EM{=F)|6fkjNf87Cys&e^pwja11S}FD9EV;D#C#AOJn6Je& zV;u*MT-aa#BA3Q81{mwh+tN^fme?t=^HGX`_$TC#eaZ+%;MGi>xoSKPj9OqM6G&-8 zPr!%yI^Ykre=?@M_b?+ZGs2d>G}U@iYD79>fZ?81DZc)UNEDnZPC*qEKn>QcMpaS3 zY0I2aixSorEWoe@3L@a}5ok-(mf~@?7Eh72>xom|GyoY}WZRn4?A!2&$u9?qUAgTR00WRD{)JQ6*?W#gJjd9l z!&H{0Y2}?pT;}z+t9)3v!LGH}I}#Ih%b>PqfWEFhOfNhD;Mialr*L>j6@WwAD@-rk zrYEzTFjefpmO*F-HoN$Yb-BGbg`2Ne;Z(WxCXZ9N^EOX+Fo4r0OGz2K5mgeWh!Jqg)0y+F4i=1oMm*o?Xc1a+#OFky5jlXW0jBB=2#j0N(N4X$KRbHG zHwD!36HBz>%33NqRbVF}#ZDnqB004<9jRpV!0?kQ8K~#90eN@X%Q&AMX>8OuO z3jz*gY-0QZXPx^I{zLr%8JHMQClDS2r99eN#0qMRPJ~ht(9j}%07V3hU_b(j0|GI~ za<6^wDL#lzcG{k^?mla;wa&EwShpv<&HOe$kX*81aV1#_LKd626XCAaSFka<(g>?3 zXM@|iHCVDSzIqwy_aO`yYn+x{c|W28A1>EmxD?Pu4>#NjTd|^z#A1y!4C3jBkTiW4 zKymjjIpDGMvO02pq?WE?Kn_SQIgK-kVo;B6&H9|CKRW~Ll~_%gEV&vXOieIhVb>MgrBEB^jv}yi?)Ko-FYua zj05&A1awGt=AbQEuOl6SzYS}ODte6AnVIcIB|W)C;te_k*EkS?R&3#{HF><+xTd7X zg!HquT7n{0v_QfRFfMX_J1*nViZk7~$SR;)R=1F)1Thf~I8}+)4u+~g1$E|q=$;QK z@c3j8Uk+z5Qn{o@6R4n$IUlIg0|7?GY`XY(<%&A_P=E?*new82&R+%U(E?;rl8XVT z|BP0Pm>3sBjj61@ymrZ`POg|uT%hAo*-Vu~|1DyOb7l$<#n zd5=g4MqM@1uEtE|^YvQ1{!|Y>YiKtQ$UH`Kld8DeY;OA|%6oUJ(wdaf3!28XsYq

    >cHl zp^3C%$Y`H6$~pdaxz;h_FV?PO{U9xxU6fJlP}%Q6cJszR`XwA|wNa$)t&;)XmA@O3 zUDVA4^&2exX-Mz9&k48t(#W*U`j9C5F;L`N#gBfeSb_fo7?QUO9gUZ59fi82D>m9^ us}b;Mj@&GH+{+m`=YpPhVZ-LqvVH+fG9G>LB670;0000et2mB diff --git a/themes/olive/images/trash.png b/themes/olive/images/trash.png deleted file mode 100755 index 6c373938010126d4740544555c06c3ef4de838fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmV->1BCpEP)z>%33NqRbVF}#ZDnqB004<9jRpV!0~kp}K~#90eN;(LQ(+W+VMPa8 zq>yOXo49sqA_;8W_zUnKm~Pw&EZ88fz%oNAlZ=9ZL1VxI3M#ZfTj)TUOA5#g23Z~N z`CcDjLR{Rm@B8jMJ@=e*s{znT$I?sqslEh%m7`Smp4w{Y7GlkOl?1d zRyS(}uho?&XhrnEg}#^_t$_?3vf5|H(Vs9Tw+hi3w5Y>0UZg5da|f&#U4MeukqhtR zb^)EUAa>}%{9ZA71xs_ynsIu$hW(2Iw-kJY-eL^%K>k~f$>B( zCgu72P7djN6&*4kia)~U=^)lmy0H7(i}-OZ-YwhF6VV4LsS?g45fu`Fy>j?>i}5W{ zh|aJL?Tc2`lvm?R2Z?dO`gsc)1-V%iXbokcY$9Ekj*T~lHHs>x8De{mjsDt zt08#Cf!L_I=dYn7B5>@`g-`1b(J!P2S2Ee;)EXBoXc8&I2Q}C}|EQ+hIPJvf=3@+q ztkP7h)d*QiFuYO#-%gPwBD z0(BaQ=Hu`ph?C2hcoY|XGVoR!Ra4n`Ix1((s5#Tm5GUMVyIy% ztHGyGyh^8(n7KTlnA^IlJyFtT<>^wc#aXAVc+T@r$xlo|{& zHD)S@Rx?FP2l%c*yQEp>q2@G))goa2-Iw^8e2(tOUGzrpVeO<%V)#@6GG+9FrZH_w zBm&j>bzfLr;rjyc0$XPz*f{COmP9piHZ0FWNS=R2=%5rIRv%mec80CjK!$gWub%Y+ zwM#UcQCqr1(d<~DnK{&YuBw+ zK+cLEdIq>F1SGqL`7F^b3+|vpbaRMq4zw=v)Ao-c^?s8c?$n=#w_@6a_K+FP0kbTe z8BJ2|1wLEQBL6OQv`vbmP?x@l6_wLh5lB-xN@Xc6wVcjd7WB4-%`=vk^%wigGCefo RM=<~Z002ovPDHLkV1j&SlP~}P diff --git a/themes/olive/images/unseen.png b/themes/olive/images/unseen.png deleted file mode 100755 index 567c5553acb4c7151e7af7245ff54b5aef0b6264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmV-x1C;!UP)z>%33NqRbVF}#ZDnqB004<9jRpV!0|-e(K~#90eN;(LQ&AXw>58_m zr3M-oBSr&qFJlvY{Pm0>O@BEGmA zdxt5s&pL&vu9`fRfh>?%g)~>s*ikFUZ04ZFBUy%YY&zF`6z?3igVu(sW0w z6ta}y_3|}^*b*}k_YczwQ8kqZtf&myv30Pd5ZO4Myn(Ugbv&JS8ck)BR#ZsSMDn(v zoI~HjWiSAAvP}?GQ}J*XN+)fgpiiWkucqB>Y>nBW{AaX^#l#jd)HIb<6Hq9ArBg=C zJTB1jTG?!mX8*U?!(N`@SyOP&!%-_Vb7Ers7QXBSvHN=iKMv-k;^MD_6>(iQl=Kab6w_wpRXuRmKz?YzUAPghUq=QFHTK;DuMMh19S zOh9IVcZTEEW->u`jggavR0pj_xHBIOf62I2*x1kzw#h*o>ZIyJe72)WzAkjMC911Y zs7u$Jj?(de5wNHnWwK<+Tu$#P7xc6X>oG4a>n|>&AA{^beJ20_002ovPDHLkV1ln> Bj~oC1 diff --git a/themes/olive/images/up.png b/themes/olive/images/up.png deleted file mode 100755 index cb8bd1e1cd3ff50de4d8adde90153e519061c9f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 804 zcmV+<1Ka$GP)z>%33NqRbVF}#ZDnqB004<9jRpV!0>Mc{K~#90eN;(LQ&AXw>8itP zivd<_jd57%A7~7J!XMxtXyVdD7H%-EAPh23t!0wIM52jUz=#A|p@Rj=kSGL0q6Syc zP!8Yu?t29i;!AGYckj99p6`6;J_~^LeAe5*U-u8<-)&f&iDyHQ$vUn?xoS-nBRDDl zfz`2MgUhC!DLms%F^ti5Q%FOrXr>5)`Ailc=(&kPNR-+NinOP^pfDCl zaor9x3vHbD8tVwWRIEGbqQ^Bm`Q@NiMSt3(@ER?Gb1aBJt9SK+nmSewpQ`8y5k0+K zMNri0UJIZnV}PadKNY@o@K}M9Vyl3jS?wa0RUM!HhWnIJ!p9%=3RF;Q%7^x}DSxG#gaIY)7p-<{@J?9t@GCK8MZb7Mhq^6_~pD3A|GWLQ^W7^at5_P0a zU%DK^ciZ)qCSHEdaEj0SkFF3V3ibt&+dDVD>UcJYv5mVGlIblIXE)L#PPvTs1<{J> zZ=2IPM%)DAc7(5?oNN3t- z!tH!Cl1+;~#BzT0W&CpC{OFOz>%33NqRbVF}#ZDnqB004<9jRpV!0`o~kK~#90eN;(HTTvK&WMu{u zixCP!H{H4_bRFm)Xes>@?WP0@T~6up9_RfcV-pS7bU;S^RnaL^xfs#m`qv+AJaGWN@j;h%*Ft`}l- z-Hma%pV}xQ{h*@LAXK&v!-DTb-*O2;8_(4{K74nfXF(sNv`RRWM0~3P)0r2FdvNWs z8rh$8s3uQMBo8FU0ZEQSHj4sniF}le<>}I~@yf7fQALX>c5vc%ks>{^PU3Dg1lKqa z8?~lc9h$D}97RQ?yNdKjA>Fr9z$UNeo3o=)q})81KzlMDXBS847D?IoNo19#S6Ypb zr3BlDQH98hikgk8sVZVcP1KIAR0&qHT^L9|#L4+?u2D5rhOD4YwbDpLx|rN9M`nKz z@1;>Sm5t`1B4qookxA)D+M)bsw93T9b}`g6mDLbYC_$x@A!acb=(tZdI}@%Oi#_b+ zGkn$*-1BbSivAzB#46n`zsSYm$h%8I&||0(Ff?W=zpNHuXsr-@)}&q9Eb~xvN;!~z zgbSRCv>~i!{i4`kWRK@1S+^CKnKF7o)0j3T5`pTXx-YDwvn|YQzE+^E!j5L{oh)Nv zr&1-*^vVS6OgS!rOz#-qz~X(Jp6}!MJS(=0s6=cYe8Xhs8NROEQzKsmWVA1V!n(iJ zhINcM+4&3$JLZd#*&9*`y1+Ri8!vPE`E_d*khgqV&j8QLO@JJCDE$Q8sXIAC>Z4XY z+{Q;ESUzcmKVd_2j9(QS8l{@%cyC9md|l{hyA(&EE`bFHDkgIgu&5jvS+W?1(|gSU gz3#wz%tOoi2XJL7M(3;p>Hq)$07*qoM6N<$f~I?iK>z>% diff --git a/themes/olive/javascripts/application.js b/themes/olive/javascripts/application.js deleted file mode 100755 index 8b3a556..0000000 --- a/themes/olive/javascripts/application.js +++ /dev/null @@ -1,24 +0,0 @@ -// Place your application-specific JavaScript functions and classes here -// This file is automatically included by javascript_include_tag :defaults - -jQuery(document).ready(function() { - - jQuery("#toggleall").click(function() { - var checked_status = this.checked; - jQuery("input[type='checkbox']").each(function() { - this.checked = checked_status; - }); - }); - - $('#header_source').dialog({ - autoOpen: false, - width: 600 - }); - - $('#show_header').click(function(){ - $('#header_source').dialog('open'); - return false; - }); - -}); - diff --git a/themes/olive/javascripts/jquery-ui.js b/themes/olive/javascripts/jquery-ui.js deleted file mode 100755 index 83de870..0000000 --- a/themes/olive/javascripts/jquery-ui.js +++ /dev/null @@ -1,790 +0,0 @@ -/*! - * jQuery UI 1.8.15 - * - * Copyright 2011, 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,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(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.15", -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({propAttr:c.fn.prop||c.fn.attr,_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)},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"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": -"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)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(this).css(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(this).css(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){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, -"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{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;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!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){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= -false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);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.15 - * - * Copyright 2011, 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 n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, -left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= -k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= -m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= -d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= -a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), -g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); -;/* - * jQuery UI Draggable 1.8.15 - * - * Copyright 2011, 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;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('

    ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});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);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);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)&&this.options.helper=="original")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},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},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().removeAttr("id"):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,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), -10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, -(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(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){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= -"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(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-this.margins.right,(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-this.margins.bottom];this.relative_container=a}}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,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.leftg[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.topg[3])?h:!(h-this.offset.click.topg[2])?e:!(e-this.offset.click.left=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>= -i&&e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f').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');/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),l=0;l=/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,l);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(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)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]);this._updateVirtualBoundaries(b.shiftKey);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=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.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},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight: -Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(cb.width,h=k(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,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)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');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.15"});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 l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.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(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.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},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); -;/* - * jQuery UI Selectable 1.8.15 - * - * Copyright 2011, 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/Selectables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), -selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("
    ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, -c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", -c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= -this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable"); -this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a=== -"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&& -!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top, -left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");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._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; -this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!= -document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a); -return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0], -e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset(); -c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): -this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null, -dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")}, -toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith(); -if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), -this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b= -this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f= -d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")|| -0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out", -a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h- -f)this.containment[2])f=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.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this, -this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop", -a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); -a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); -if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", -function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a= -this.options;if(a.icons){c("").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); -this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); -b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); -a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ -c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; -if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); -if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(), -e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight|| -e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false", -"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.15", -animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/); -f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide", -paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); -;/* - * jQuery UI Autocomplete 1.8.15 - * - * Copyright 2011, 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/Autocomplete - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.position.js - */ -(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g= -false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= -a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; -this.menu=d("
      ").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& -a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); -d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& -b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= -this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length").data("item.autocomplete",b).append(d("
      ").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, -"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); -(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, -this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("");e.secondary&&a.append("");if(!this.options.text){d.push(f?"ui-button-icons-only": -"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")=== -"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); -b.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.15 - * - * Copyright 2011, 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,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};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",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="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
      ")).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":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
      ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').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(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).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,e;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]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.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.scrollTop(),scrollLeft:d.element.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;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.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._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("
      ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
      ").addClass("ui-dialog-buttonset").appendTo(e);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(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", -handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition, -originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=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:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize", -f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,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],e;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,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});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;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f); -if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"): -e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a= -this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().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();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height- -b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.15",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){if(c(d.target).zIndex()").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){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},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").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j"); -this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle", -g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length? -(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i- -m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); -return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false; -this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b= -this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b= -this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b); -c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a= -this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e- -g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"}, -b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.15"})})(jQuery); -;/* - * jQuery UI Tabs 1.8.15 - * - * Copyright 2011, 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/Tabs - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
      ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
    • #{label}
    • "},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= -d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| -(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); -this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); -this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ -g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", -function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; -this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= --1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; -d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e= -d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, -e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); -j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); -if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, -this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, -load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, -"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, -url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.15"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k'))}function N(a){return a.bind("mouseout", -function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); -b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.15"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv}, -setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g, -"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('
      '))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", -function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c== -"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker(): -d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a, -b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+= -1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/ -2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b= -d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e= -a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a, -"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f== -a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input", -a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos= -d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b, -c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&& -d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+ -this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&& -a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth(): -0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a), -"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst= -null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, -_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): -0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"? -"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a); -this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a, -"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b== -"")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y", -RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear; -b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a));if(c=this._get(a,"onSelect")){e=this._formatDate(a);c.apply(a.input?a.input[0]:null,[e,a])}},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()== -""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999, -9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); -n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m, -g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+s+"":f?"":''+s+"";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&& -a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
      '+(c?h:"")+(this._isInRange(a,s)?'":"")+(c?"":h)+"
      ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
      '+(/all|left/.test(t)&& -x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'
      ';var z=j?'":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="=5?' class="ui-datepicker-week-end"':"")+'>'+q[r]+""}y+=z+"";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, -z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&ro;R+='";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+""}g++;if(g>11){g=0;m++}y+="
      '+this._get(a,"weekHeader")+"
      '+this._get(a,"calculateWeek")(r)+""+(F&&!D?" ":L?''+ -r.getDate()+"":''+r.getDate()+"")+"
      "+(l?""+(i[0]>0&&G==i[1]-1?'
      ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': -"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
      ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b, -e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
      ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+ -(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input? -a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c, -e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a, -"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this; -if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a== -"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.15";window["DP_jQuery_"+B]=d})(jQuery); -;/* - * jQuery UI Progressbar 1.8.15 - * - * Copyright 2011, 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/Progressbar - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
      ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); -this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* -this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.15"})})(jQuery); -;/* - * jQuery UI Effects 1.8.15 - * - * Copyright 2011, 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/Effects/ - */ -jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], -16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, -a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= -a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", -"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, -0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, -211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, -d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})}; -f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, -[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.15",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}); -c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c, -a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments); -a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%", -"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d* -((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/= -e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/= -e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ -e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); -;/* - * jQuery UI Effects Fade 1.8.15 - * - * Copyright 2011, 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/Effects/Fade - * - * Depends: - * jquery.effects.core.js - */ -(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); -;/* - * jQuery UI Effects Fold 1.8.15 - * - * Copyright 2011, 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/Effects/Fold - * - * Depends: - * jquery.effects.core.js - */ -(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], -10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); -;/* - * jQuery UI Effects Highlight 1.8.15 - * - * Copyright 2011, 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/Effects/Highlight - * - * Depends: - * jquery.effects.core.js - */ -(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& -this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); -;/* - * jQuery UI Effects Pulsate 1.8.15 - * - * Copyright 2011, 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/Effects/Pulsate - * - * Depends: - * jquery.effects.core.js - */ -(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); -b.dequeue()})})}})(jQuery); -; \ No newline at end of file diff --git a/themes/olive/javascripts/jquery.js b/themes/olive/javascripts/jquery.js deleted file mode 100755 index 48590ec..0000000 --- a/themes/olive/javascripts/jquery.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * jQuery JavaScript Library v1.6.2 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Jun 30 14:16:56 2011 -0400 - */ -(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(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(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
      a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
      ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
      t
      ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. -shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j -)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
      ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/themes/olive/javascripts/rails.js b/themes/olive/javascripts/rails.js deleted file mode 100755 index b17d5e7..0000000 --- a/themes/olive/javascripts/rails.js +++ /dev/null @@ -1,331 +0,0 @@ -/** - * Unobtrusive scripting adapter for jQuery - * - * Requires jQuery 1.6.0 or later. - * https://github.com/rails/jquery-ujs - - * Uploading file using rails.js - * ============================= - * - * By default, browsers do not allow files to be uploaded via AJAX. As a result, if there are any non-blank file fields - * in the remote form, this adapter aborts the AJAX submission and allows the form to submit through standard means. - * - * The `ajax:aborted:file` event allows you to bind your own handler to process the form submission however you wish. - * - * Ex: - * $('form').live('ajax:aborted:file', function(event, elements){ - * // Implement own remote file-transfer handler here for non-blank file inputs passed in `elements`. - * // Returning false in this handler tells rails.js to disallow standard form submission - * return false; - * }); - * - * The `ajax:aborted:file` event is fired when a file-type input is detected with a non-blank value. - * - * Third-party tools can use this hook to detect when an AJAX file upload is attempted, and then use - * techniques like the iframe method to upload the file instead. - * - * Required fields in rails.js - * =========================== - * - * If any blank required inputs (required="required") are detected in the remote form, the whole form submission - * is canceled. Note that this is unlike file inputs, which still allow standard (non-AJAX) form submission. - * - * The `ajax:aborted:required` event allows you to bind your own handler to inform the user of blank required inputs. - * - * !! Note that Opera does not fire the form's submit event if there are blank required inputs, so this event may never - * get fired in Opera. This event is what causes other browsers to exhibit the same submit-aborting behavior. - * - * Ex: - * $('form').live('ajax:aborted:required', function(event, elements){ - * // Returning false in this handler tells rails.js to submit the form anyway. - * // The blank required inputs are passed to this function in `elements`. - * return ! confirm("Would you like to submit the form with missing info?"); - * }); - */ - -(function($, undefined) { - // Shorthand to make it a little easier to call public rails functions from within rails.js - var rails; - - $.rails = rails = { - // Link elements bound by jquery-ujs - linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]', - - // Select elements bound by jquery-ujs - selectChangeSelector: 'select[data-remote]', - - // Form elements bound by jquery-ujs - formSubmitSelector: 'form', - - // Form input elements bound by jquery-ujs - formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type])', - - // Form input elements disabled during form submission - disableSelector: 'input[data-disable-with], button[data-disable-with], textarea[data-disable-with]', - - // Form input elements re-enabled after form submission - enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled', - - // Form required input elements - requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])', - - // Form file input elements - fileInputSelector: 'input:file', - - // Make sure that every Ajax request sends the CSRF token - CSRFProtection: function(xhr) { - var token = $('meta[name="csrf-token"]').attr('content'); - if (token) xhr.setRequestHeader('X-CSRF-Token', token); - }, - - // Triggers an event on an element and returns false if the event result is false - fire: function(obj, name, data) { - var event = $.Event(name); - obj.trigger(event, data); - return event.result !== false; - }, - - // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm - confirm: function(message) { - return confirm(message); - }, - - // Default ajax function, may be overridden with custom function in $.rails.ajax - ajax: function(options) { - return $.ajax(options); - }, - - // Submits "remote" forms and links with ajax - handleRemote: function(element) { - var method, url, data, - crossDomain = element.data('cross-domain') || null, - dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType); - - if (rails.fire(element, 'ajax:before')) { - - if (element.is('form')) { - method = element.attr('method'); - url = element.attr('action'); - data = element.serializeArray(); - // memoized value from clicked submit button - var button = element.data('ujs:submit-button'); - if (button) { - data.push(button); - element.data('ujs:submit-button', null); - } - } else if (element.is('select')) { - method = element.data('method'); - url = element.data('url'); - data = element.serialize(); - if (element.data('params')) data = data + "&" + element.data('params'); - } else { - method = element.data('method'); - url = element.attr('href'); - data = element.data('params') || null; - } - - options = { - type: method || 'GET', data: data, dataType: dataType, crossDomain: crossDomain, - // stopping the "ajax:beforeSend" event will cancel the ajax request - beforeSend: function(xhr, settings) { - if (settings.dataType === undefined) { - xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script); - } - return rails.fire(element, 'ajax:beforeSend', [xhr, settings]); - }, - success: function(data, status, xhr) { - element.trigger('ajax:success', [data, status, xhr]); - }, - complete: function(xhr, status) { - element.trigger('ajax:complete', [xhr, status]); - }, - error: function(xhr, status, error) { - element.trigger('ajax:error', [xhr, status, error]); - } - }; - // Do not pass url to `ajax` options if blank - if (url) { $.extend(options, { url: url }); } - - rails.ajax(options); - } - }, - - // Handles "data-method" on links such as: - // Delete - handleMethod: function(link) { - var href = link.attr('href'), - method = link.data('method'), - csrf_token = $('meta[name=csrf-token]').attr('content'), - csrf_param = $('meta[name=csrf-param]').attr('content'), - form = $('
      '), - metadata_input = ''; - - if (csrf_param !== undefined && csrf_token !== undefined) { - metadata_input += ''; - } - - form.hide().append(metadata_input).appendTo('body'); - form.submit(); - }, - - /* Disables form elements: - - Caches element value in 'ujs:enable-with' data store - - Replaces element text with value of 'data-disable-with' attribute - - Adds disabled=disabled attribute - */ - disableFormElements: function(form) { - form.find(rails.disableSelector).each(function() { - var element = $(this), method = element.is('button') ? 'html' : 'val'; - element.data('ujs:enable-with', element[method]()); - element[method](element.data('disable-with')); - element.attr('disabled', 'disabled'); - }); - }, - - /* Re-enables disabled form elements: - - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`) - - Removes disabled attribute - */ - enableFormElements: function(form) { - form.find(rails.enableSelector).each(function() { - var element = $(this), method = element.is('button') ? 'html' : 'val'; - if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with')); - element.removeAttr('disabled'); - }); - }, - - /* For 'data-confirm' attribute: - - Fires `confirm` event - - Shows the confirmation dialog - - Fires the `confirm:complete` event - - Returns `true` if no function stops the chain and user chose yes; `false` otherwise. - Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog. - Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function - return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog. - */ - allowAction: function(element) { - var message = element.data('confirm'), - answer = false, callback; - if (!message) { return true; } - - if (rails.fire(element, 'confirm')) { - answer = rails.confirm(message); - callback = rails.fire(element, 'confirm:complete', [answer]); - } - return answer && callback; - }, - - // Helper function which checks for blank inputs in a form that match the specified CSS selector - blankInputs: function(form, specifiedSelector, nonBlank) { - var inputs = $(), input, - selector = specifiedSelector || 'input,textarea'; - form.find(selector).each(function() { - input = $(this); - // Collect non-blank inputs if nonBlank option is true, otherwise, collect blank inputs - if (nonBlank ? input.val() : !input.val()) { - inputs = inputs.add(input); - } - }); - return inputs.length ? inputs : false; - }, - - // Helper function which checks for non-blank inputs in a form that match the specified CSS selector - nonBlankInputs: function(form, specifiedSelector) { - return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank - }, - - // Helper function, needed to provide consistent behavior in IE - stopEverything: function(e) { - $(e.target).trigger('ujs:everythingStopped'); - e.stopImmediatePropagation(); - return false; - }, - - // find all the submit events directly bound to the form and - // manually invoke them. If anyone returns false then stop the loop - callFormSubmitBindings: function(form) { - var events = form.data('events'), continuePropagation = true; - if (events !== undefined && events['submit'] !== undefined) { - $.each(events['submit'], function(i, obj){ - if (typeof obj.handler === 'function') return continuePropagation = obj.handler(obj.data); - }); - } - return continuePropagation; - } - }; - - $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }}); - - $(rails.linkClickSelector).live('click.rails', function(e) { - var link = $(this); - if (!rails.allowAction(link)) return rails.stopEverything(e); - - if (link.data('remote') !== undefined) { - rails.handleRemote(link); - return false; - } else if (link.data('method')) { - rails.handleMethod(link); - return false; - } - }); - - $(rails.selectChangeSelector).live('change.rails', function(e) { - var link = $(this); - if (!rails.allowAction(link)) return rails.stopEverything(e); - - rails.handleRemote(link); - return false; - }); - - $(rails.formSubmitSelector).live('submit.rails', function(e) { - var form = $(this), - remote = form.data('remote') !== undefined, - blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector), - nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector); - - if (!rails.allowAction(form)) return rails.stopEverything(e); - - // skip other logic when required values are missing or file upload is present - if (blankRequiredInputs && form.attr("novalidate") == undefined && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) { - return rails.stopEverything(e); - } - - if (remote) { - if (nonBlankFileInputs) { - return rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]); - } - - // If browser does not support submit bubbling, then this live-binding will be called before direct - // bindings. Therefore, we should directly call any direct bindings before remotely submitting form. - if (!$.support.submitBubbles && rails.callFormSubmitBindings(form) === false) return rails.stopEverything(e); - - rails.handleRemote(form); - return false; - } else { - // slight timeout so that the submit button gets properly serialized - setTimeout(function(){ rails.disableFormElements(form); }, 13); - } - }); - - $(rails.formInputClickSelector).live('click.rails', function(event) { - var button = $(this); - - if (!rails.allowAction(button)) return rails.stopEverything(event); - - // register the pressed submit button - var name = button.attr('name'), - data = name ? {name:name, value:button.val()} : null; - - button.closest('form').data('ujs:submit-button', data); - }); - - $(rails.formSubmitSelector).live('ajax:beforeSend.rails', function(event) { - if (this == event.target) rails.disableFormElements($(this)); - }); - - $(rails.formSubmitSelector).live('ajax:complete.rails', function(event) { - if (this == event.target) rails.enableFormElements($(this)); - }); - -})( jQuery ); diff --git a/themes/olive/stylesheets/jquery-ui-custom.css b/themes/olive/stylesheets/jquery-ui-custom.css deleted file mode 100755 index 0f1a7e7..0000000 --- a/themes/olive/stylesheets/jquery-ui-custom.css +++ /dev/null @@ -1,568 +0,0 @@ -/* - * jQuery UI CSS Framework 1.8.16 - * - * Copyright 2011, 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 !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -.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 1.8.16 - * - * Copyright 2011, 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=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: 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: Verdana,Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } -.ui-widget-header a { color: #222222; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; 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 #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } -.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; 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 #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% 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: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } -.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_222222_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_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-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* - * jQuery UI Resizable 1.8.16 - * - * Copyright 2011, 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 Selectable 1.8.16 - * - * Copyright 2011, 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/Selectable#theming - */ -.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } -/* - * jQuery UI Accordion 1.8.16 - * - * Copyright 2011, 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/Accordion#theming - */ -/* IE/Win - Fix animation bug - #4615 */ -.ui-accordion { width: 100%; } -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } -.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; } -/* - * jQuery UI Autocomplete 1.8.16 - * - * Copyright 2011, 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/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu 1.8.16 - * - * 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/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} -/* - * jQuery UI Button 1.8.16 - * - * Copyright 2011, 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/Button#theming - */ -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ -/* - * jQuery UI Dialog 1.8.16 - * - * Copyright 2011, 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: .4em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 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; } -/* - * jQuery UI Slider 1.8.16 - * - * Copyright 2011, 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/Slider#theming - */ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* - * jQuery UI Tabs 1.8.16 - * - * Copyright 2011, 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/Tabs#theming - */ -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } -/* - * jQuery UI Datepicker 1.8.16 - * - * Copyright 2011, 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/Datepicker#theming - */ -.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* - * jQuery UI Progressbar 1.8.16 - * - * Copyright 2011, 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/Progressbar#theming - */ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/themes/olive/stylesheets/jquery-ui-dialog.css b/themes/olive/stylesheets/jquery-ui-dialog.css deleted file mode 100755 index 1b95d7f..0000000 --- a/themes/olive/stylesheets/jquery-ui-dialog.css +++ /dev/null @@ -1,21 +0,0 @@ -/* - * jQuery UI Dialog 1.8.16 - * - * Copyright 2011, 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: .4em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 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/themes/olive/stylesheets/olive.css b/themes/olive/stylesheets/olive.css deleted file mode 100755 index 833e4bf..0000000 --- a/themes/olive/stylesheets/olive.css +++ /dev/null @@ -1,560 +0,0 @@ -* { - margin:0; - padding:0; -} - -body { - font-size: 12px; - color: #222; - background: #EFF3E4; - font-family: sans-serif; -} - -h1 { margin: 15px 0; font-size: 10px; font-weight: normal; } -h3 { font-size: 14px; font-weight: normal;} -h4 { font-size: 16px; margin: 5px 0; font-weight: normal;} -hr {height: 1px; border: 0; } -p { margin: 15px 0;} -a img { border: none; } - -.clear { - clear: both; - height: 0; -} - -#container { - min-width: 960px; -} - -#sidebar { - width: 250px; - float: left; - margin-left: 5px; - padding: 0 5px; - margin-right: 5px; -} - -#main { - width: 960px; - float: left; - margin-top: 10px; -} - -.width100 { - width: 100%; -} - -div.logo { - text-align: center; - margin: 10px; -} - -p.version { - color: #5E634E; - text-align: center; - font-size: 14px; -} - -.block { - margin: 0 0 10px 0; - padding-bottom: 1px; -} - -.block .content { - padding-left: 5px; - padding-right: 5px; - background-color: white; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; -} - -.block h3 { - background: #5E634E; - color: #FFF; - border-bottom: 6px solid #DACF77; - padding: 6px 10px; - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; -} - -#user-navigation ul, #navigation-tabs ul, .navigation-tabs ul, #sidebar ul.navigation { - list-style-type: none; - margin: 0; - padding: 0; -} - -ul.folders { - font-size: 14px; -} - -ul.navigation { - color: #A3AB74; -} - -#sidebar ul.navigation li { - padding: 3px; -} - -#sidebar ul li { - border-bottom: 1px solid #F0F0EE; -} - -ul li a:link, ul li a:visited { - background: none repeat scroll 0 0 #FFFFFF; - text-decoration: none; -} -a:link, a:visited, a:hover, a:active, h1, h2, h3 { - color: #A3AB74; - text-decoration: none; -} - -li.selected { - color: #5E634E; - font-weight: bold; -} - -.navigation-tabs { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - background: none repeat scroll 0 0 #5E634E; - border-bottom: 6px solid #DACF77; - font-size: 14px; -} - -.navigation-tabs ul { - list-style-type: none; - margin: 0; - padding: 0; - display: block; -} - -.navigation-tabs ul li.first { - border-top-left-radius: 4px; -} - -.navigation-tabs li.first a, .navigation-tabs ul li.first, .table th.first, .table th.first { - border-top-left-radius: 4px; -} - - -.navigation-tabs ul li { - float: left; -} - -.navigation-tabs ul li a:link, .navigation-tabs ul li a:visited, .navigation-tabs ul li a:hover, .navigation-tabs ul li a:active { - color: #FFFFFF; - text-decoration: none; - background: none repeat scroll 0 0 #5E634E; -} - -.navigation-tabs ul li.active a:link, .navigation-tabs ul li.active a:visited, .navigation-tabs ul li.active a:hover, .navigation-tabs ul li.active a:active{ - background-color: #DACF77; -} - -.navigation-tabs ul li a { - padding: 8px 12px; - display: block; - padding: 10px 15px; -} - -.secondary { - padding-top: 15px; -} - -div.actiongroup { - display: block; - margin: 5px 0; - padding: 2px 0; -} - -button.button[type] { - line-height: 17px; - padding: 2px 5px 2px 3px; -} - -button.button { - overflow: visible; - padding: 2px 5px 1px 3px; - width: auto; -} - -a.button:link, a.button:visited, a.button:hover, a.button:active, button.button { - background-color: #EEEEEE; - border: 1px solid #BFBFBF; - color: #222222; - cursor: pointer; - display: block; - float: left; - font-size: 1em; - font-weight: bold; - line-height: 1.3em; - margin: 0 7px 0 0; - padding: 2px 5px 3px 3px; - text-decoration: none; -} - -button.button img, a.button img { - border: medium none; - height: 18px; - margin: 0 6px -4px 0 !important; - padding: 0; - width: 18px; -} - -.box { - margin: 20px auto; - width: 500px; -} - -#footer { - color: grey; - text-align: center; -} - -#footer { - padding-bottom: 20px; -} - -.box .box2 h2 { - background: none repeat scroll 0 0 #869453; - color: #FFFFFF; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - margin: 0; - padding: 10px 15px; -} - -.box .box2 .content { - padding: 10px 20px 30px 20px; - background-color: white; -} - -.box .box2 .group { - padding: 15px; -} - -.box .left { - float: left; - width: 20%; -} - -.box .right { - float: right; - width: 70%; -} - -.box label.label { - display: block; - font-weight: bold; - padding-bottom: 2px; -} - -.box label.right { - text-align: right; -} - -.box label.label, .box input.text_field, .box textarea.text_area { - font-size: 1.2em; - margin: 0; - padding: 1px 0; -} - -.flash .message { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - text-align:center; - margin: 0 auto 15px; - -} - -.flash .message p { - margin:8px; -} -.flash .error { - border: 1px solid #fbb; - background-color: #fdd; -} -.flash .warning { - border: 1px solid #fffaaa; - background-color: #ffffcc; -} -.flash .notice { - border: 1px solid #1FDF00; - background-color: #BBFFB6; -} - -.box div.logo { - margin: 10px; - text-align: left; -} - -.ops { - padding: 5px; - margin-bottom: 5px; -} - -div.actions-bar div.header_info { - color: #5E634E; - float: left; - font-size: 14px; - font-weight: normal; - margin: 0 10px; -} - -div.block div.actions-bar { - margin: 5px; -} - -.actions-bar { - padding: 5px 1px; -} - - -.clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; - } - -.actions-bar .pagination { - float: right; - padding: 1px 0; -} - -.pagination span.disabled { - color: #bbb; - border-color: #bbb; -} - -.pagination em { - background: #869453; - color: #FFF; - border-color: #869453; -} - -.pagination a, .pagination span { - color: #869453; - border-color: #869453; -} - -.pagination a:hover { - color: #FFF; - background: #869453; -} - -.pagination a, .pagination span, .pagination em { - padding: 2px 5px; - margin-right: 5px; - display: block; - float: left; - border-style: solid; - border-width: 1px; -} - -.pagination em { - font-weight: bold; -} - -.pagination a { - text-decoration: none; -} - -input, select, textarea { - background-color: #EFF3E4; - border: 1px solid #5E634E; - margin: 3px 0; -} - -.table { - border-collapse: collapse; - margin: 5px; - width: 99%; -} - -.table th.first { - width: 30px; -} - -.table th { - background: none repeat scroll 0 0 #5E634E; - color: #FFFFFF; -} - -.table th { - font-weight: bold; - padding: 5px; - text-align: left; -} - -th a.header { - color: white; -} - -.table th.last { - border-top-right-radius: 4px; -} - -.table th.last { - width: 30px; -} - -.table tr.even { - background: none repeat scroll 0 0 #EFF3E4; -} - -.table tr.unseen { - font-weight: bold; -} - -.table td { - border-bottom: 1px solid #F0F0EE; -} - -.table td { - color: #5E634E; - padding: 2px 10px; -} - -div.msg_header { - font-size: 14px; - padding: 5px; -} - -div.msg_header div.group { - margin: 5px 0; -} - -div.msg_header label { - display: inline; - float: left; - font-weight: bold; - margin-right: 10px; - text-align: right; - width: 100px; -} - -div.render_text { - font-size: 14px; - margin: 5px; -} - -div.render_text pre { - background-color: #EFF3E4; - border: 1px solid #5E634E; - font-size: 12px; - margin: 5px 0; - padding: 5px; - white-space: pre-wrap; - word-wrap: break-word; -} - -div.attachments { - margin: 10px 0 5px; -} - -div.attachments span.title { - padding: 0 0 10px 5px; - font-size: 14px; - font-weight: bold; -} - -iframe { - height: 800px; - margin-top: 10px; - width: 937px; -} - -.block .content h2 { - font-size: 22px; - font-style: normal; - font-weight: bold; - letter-spacing: -1px; - line-height: 1.2em; - margin-left: 15px; - padding: 5px; -} - -.block .content .inner { - padding: 0 5px 5px 5px; -} - -div.param_group { - font-size: 14px; - margin: 5px 0; - padding: 3px 0; -} - -div.param_group label.label { - font-weight: bold; - margin-right: 5px; -} - -div.params input, div.params select, div.params textarea { - width: 100%; -} -style.css (wiersz 529) -div.params input, div.params textarea, div.params select { - border: 1px solid #CFCFCF; -} - -div.params div.group .description, div.params div.param_group .description { - color: #8C8C8C; - font-size: 10px; - font-style: italic; -} - -div.params div.group { - margin-bottom: 10px; -} - -div.params div.group div.fieldWithErrors label.label, div.params div.group label.label { - font-size: 14px; - font-weight: bold; -} - -div.fileselect { - margin-top: 5px; - padding: 5px 0; -} - -.columns .right { - float: right; -} - -.columns .left { - float: left; -} - -.columns .column { - width: 48%; -} - -.clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} - -.content ul { - margin-left: 20px; -} - -.md { - margin-bottom:10px; -} - - - - diff --git a/themes/olive/views/contacts/_contact.html.erb b/themes/olive/views/contacts/_contact.html.erb deleted file mode 100755 index 1a85802..0000000 --- a/themes/olive/views/contacts/_contact.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<%= check_box_tag "cids[]", contact.id %> -<%= link_to contact.nick,edit_contact_path(contact) %> -<%= contact.first_name %> -<%= contact.last_name %> -<%= link_to contact.email, compose_contact_path(contact.id) %> -<%= contact.info %> - diff --git a/themes/olive/views/contacts/_external.html.erb b/themes/olive/views/contacts/_external.html.erb deleted file mode 100755 index f945a6a..0000000 --- a/themes/olive/views/contacts/_external.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -
      -<%= form_tag(contacts_external_path, :multipart => true) %> -:  -<%= file_field 'upload', 'datafile' %> -<% if @contacts.size.zero? %> -<%= raw single_action('import','contact','right.png') %> -<% else %> -<%= raw group_action(@ei_buttons) %> -<% end %> - -
      diff --git a/themes/olive/views/contacts/_left.html.erb b/themes/olive/views/contacts/_left.html.erb deleted file mode 100755 index bfe4c88..0000000 --- a/themes/olive/views/contacts/_left.html.erb +++ /dev/null @@ -1,9 +0,0 @@ - -
      -<%= raw form_field(@contact,"nick",nil,"joe"+', '+t(:must_be_unique,:scope=>:common),@contact.nick) %> -<%= raw form_field(@contact,"first_name",nil,"Joe",@contact.first_name) %> -<%= raw form_field(@contact,"last_name",nil,"Doe",@contact.last_name) %> -<%= raw form_field(@contact,"email",nil,"joe.doe@domain.com",@contact.email) %> -<%= raw form_field(@contact,"info",nil,t(:some_add_info,:scope=>:common),@contact.info) %> -
      -<%= raw single_action('save','common','save.png') %> diff --git a/themes/olive/views/contacts/_list.html.erb b/themes/olive/views/contacts/_list.html.erb deleted file mode 100755 index 6444064..0000000 --- a/themes/olive/views/contacts/_list.html.erb +++ /dev/null @@ -1,25 +0,0 @@ -
      -
      - <%= t(:total_entries,:scope=>:contact) %>: <%= @contacts.total_entries %> -<%= will_paginate @contacts %> -
      - - - - -<%= raw contacts_table_header %> - - -<% trclass = :even %> -<% @contacts.each do |c| %> - -<%= render :partial => 'contacts/contact', :object => c %> - -<% trclass == :even ? trclass = :odd : trclass = :even %> -<% end %> - -
      -
      -<%= will_paginate @contacts %> -
      -
      diff --git a/themes/olive/views/contacts/_ops.html.erb b/themes/olive/views/contacts/_ops.html.erb deleted file mode 100755 index eba864f..0000000 --- a/themes/olive/views/contacts/_ops.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -
      -<%= raw group_action(@buttons) %> -
      diff --git a/themes/olive/views/contacts/_right.html.erb b/themes/olive/views/contacts/_right.html.erb deleted file mode 100755 index 8b13789..0000000 --- a/themes/olive/views/contacts/_right.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/themes/olive/views/contacts/edit.html.erb b/themes/olive/views/contacts/edit.html.erb deleted file mode 100755 index 4bd6d0d..0000000 --- a/themes/olive/views/contacts/edit.html.erb +++ /dev/null @@ -1,30 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:contacts,:scope=>:contact) %> -<% end %> - -
      -
      - <%= raw main_navigation(:contacts) %> -
      -
      -
      -
      -
      <%= t(:modifying,:scope=>:contact) %>
      -
      - <%= form_for(@contact) do |f| %> -
      -
      - <%= render :partial => 'left' %> -
      -
      - <%= render :partial => 'right' %> -
      -
      - <% end %> -
      -
      -
      diff --git a/themes/olive/views/contacts/index.html.erb b/themes/olive/views/contacts/index.html.erb deleted file mode 100755 index a6c5f2a..0000000 --- a/themes/olive/views/contacts/index.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:contacts,:scope=>:contact) %> -<% end %> - -
      - -
      -<%= form_tag(contacts_ops_path,{:name=>'contacts'})%> -<% if @contacts.size.zero? %> -

      <%= t(:no_entries,:scope=>:contact) %>

      -<%= raw single_action('create_new','contact','plus.png') %> - -<% else %> -<%= render :partial => 'ops' %> -<%= render :partial => 'list' %> - -<% end %> -<%= render :partial => 'external' %> -
      -
      - diff --git a/themes/olive/views/contacts/new.html.erb b/themes/olive/views/contacts/new.html.erb deleted file mode 100755 index 2c02fa6..0000000 --- a/themes/olive/views/contacts/new.html.erb +++ /dev/null @@ -1,30 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:contacts,:scope=>:contact) %> -<% end %> - -
      -
      - <%= raw main_navigation(:contacts) %> -
      -
      -
      -
      -
      <%= t(:creating_new,:scope=>:contact) %>
      -
      - <%= form_for(@contact) do |f| %> -
      -
      - <%= render :partial => 'left' %> -
      -
      - <%= render :partial => 'right' %> -
      -
      - <% end %> -
      -
      -
      diff --git a/themes/olive/views/folders/_create.html.erb b/themes/olive/views/folders/_create.html.erb deleted file mode 100755 index dc9009c..0000000 --- a/themes/olive/views/folders/_create.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<%= form_tag(folders_create_path) %> -
      -<%= raw select_for_folders("folder","parent",@folders,t(:parent,:scope=>:folder),"",true) %> -<%= raw simple_input_field("folder","target",t(:to_create,:scope=>:folder),"") %> -
      -<%= raw single_action('create','common','plus.png') %> - diff --git a/themes/olive/views/folders/_delete.html.erb b/themes/olive/views/folders/_delete.html.erb deleted file mode 100755 index 85b5c32..0000000 --- a/themes/olive/views/folders/_delete.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<%= form_tag(folders_delete_path) %> -
      -<%= raw select_for_folders("folder","delete",@folders,t(:to_delete,:scope=>:folder),"",true) %> -<%= raw single_action('delete','common','minus.png') %> -
      - diff --git a/themes/olive/views/folders/_list.html.erb b/themes/olive/views/folders/_list.html.erb deleted file mode 100755 index 5c723c6..0000000 --- a/themes/olive/views/folders/_list.html.erb +++ /dev/null @@ -1,19 +0,0 @@ -
      -

      <%=t(:folders,:scope=>:folder) %>

      -
      - <% if @folders_shown.nil? or @folders_shown.size.zero? %> -

      <%= t(:no_shown,:scope=>:folder) %> <%= link_to t(:folders,:scope=>:folder), folders_path %>

      - <% else %> - - <% end %> - <%= raw single_action_onclick('logout','user','power.png',user_logout_path) %> -
      -
      diff --git a/themes/olive/views/folders/_refresh.html.erb b/themes/olive/views/folders/_refresh.html.erb deleted file mode 100755 index e3952a7..0000000 --- a/themes/olive/views/folders/_refresh.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<%= form_tag(folders_refresh_path) %> -
      -<%= raw multi_select("", 'folders_to_show[]', @folders, @folders_shown,t(:shown,:scope=>:folder),:id,"",{:text => [:parent,:delim,:name]}) %> -
      -<%= raw group_action(@buttons) %> - - diff --git a/themes/olive/views/folders/_system.html.erb b/themes/olive/views/folders/_system.html.erb deleted file mode 100755 index e8e9e18..0000000 --- a/themes/olive/views/folders/_system.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= form_tag(folders_system_path) %> -
      -<%= raw select_for_folders("folder","mailbox_inbox",@folders,t(:folder,:scope => :folder) + " " + t(:inbox_name,:scope=>:folder),@folder_inbox,true) %> -<%= raw select_for_folders("folder","mailbox_trash",@folders,t(:folder,:scope => :folder) + " " + t(:trash_name,:scope=>:folder),@folder_trash,true) %> -<%= raw select_for_folders("folder","mailbox_sent",@folders,t(:folder,:scope => :folder) + " " + t(:sent_name,:scope=>:folder),@folder_sent,true) %> -<%= raw select_for_folders("folder","mailbox_drafts",@folders,t(:folder,:scope => :folder) + " " + t(:drafts_name,:scope=>:folder),@folder_drafts,true) %> -<%= raw single_action('set','common','save.png') %> -
      - diff --git a/themes/olive/views/folders/index.html.erb b/themes/olive/views/folders/index.html.erb deleted file mode 100755 index 807a07b..0000000 --- a/themes/olive/views/folders/index.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:folders,:scope=>:folder) %> -<% end %> - -
      - -
      -
      -
      -
      - <%= render :partial => 'create' %> - <%= render :partial => 'delete' %> - <%= render :partial => 'system' %> -
      -
      - <%= render :partial => 'refresh' %> -
      -
      -
      -
      - diff --git a/themes/olive/views/internal/_version.html.erb b/themes/olive/views/internal/_version.html.erb deleted file mode 100755 index 881c09d..0000000 --- a/themes/olive/views/internal/_version.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -

      -<%= link_to (t(:version,:scope=>:common) + " " + $defaults["version"]),about_path %> -

      - diff --git a/themes/olive/views/internal/about.html.erb b/themes/olive/views/internal/about.html.erb deleted file mode 100755 index 4698b30..0000000 --- a/themes/olive/views/internal/about.html.erb +++ /dev/null @@ -1,33 +0,0 @@ -<% content_for :title do %> -- <%= t(:about,:scope=>:internal) %> -<% end %> - -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -
      - -
      - -

      -<%= t(:current_version,:scope=>:internal) + ": " + $defaults["version"] %> -

      - -
      -<%= raw BlueCloth::new(render :file => 'README.markdown').to_html %> -
      - -
      -<%= raw BlueCloth::new(render :file => 'CHANGES').to_html %> -
      - -
      -<%= raw BlueCloth::new(render :file => 'TODO').to_html %> -
      - - -
      - diff --git a/themes/olive/views/internal/error.html.erb b/themes/olive/views/internal/error.html.erb deleted file mode 100755 index 604b808..0000000 --- a/themes/olive/views/internal/error.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -<% content_for :title do %> - <%= @title %> -<% end %> - -
      -
      - -
      diff --git a/themes/olive/views/layouts/_flash.html.erb b/themes/olive/views/layouts/_flash.html.erb deleted file mode 100755 index 24c1562..0000000 --- a/themes/olive/views/layouts/_flash.html.erb +++ /dev/null @@ -1,16 +0,0 @@ -<% if not flash.size.zero? %> -
      -<% flash.each do |key, msg| %> -<% unless msg.blank? %> -<% if msg.class.eql?(Hash) %> -<% f = content_tag :p, msg[:title] %> -<% f += content_tag :p, msg[:info], :class=> "info" %> -<% else %> -<% f = content_tag :p, msg %> -<% end %> -<%= content_tag(:div,f, :class => "message #{key.to_s}" )%> -<%= flash[key.to_sym]='' %> -<% end %> -<% end %> -
      -<% end %> diff --git a/themes/olive/views/layouts/application.html.erb b/themes/olive/views/layouts/application.html.erb deleted file mode 100755 index adcc493..0000000 --- a/themes/olive/views/layouts/application.html.erb +++ /dev/null @@ -1,36 +0,0 @@ - - - - - <%= t(:mailr,:scope=>:common) %> - <%= yield :title %> - - - - <%=stylesheet_link_tag current_theme_stylesheet_path('olive') %> - <%=stylesheet_link_tag current_theme_stylesheet_path('calendar_olive') %> - <%=stylesheet_link_tag current_theme_stylesheet_path('jquery-ui-dialog') %> - <%=stylesheet_link_tag current_theme_stylesheet_path('jquery-ui-custom') %> - - <%=javascript_include_tag current_theme_javascript_path('jquery') %> - <%=javascript_include_tag current_theme_javascript_path('jquery-ui') %> - <%=javascript_include_tag current_theme_javascript_path('rails') %> - <%=javascript_include_tag current_theme_javascript_path('application') %> - - - - -
      - -
      - <%= render :partial=>'layouts/flash', :object => flash %> - <%= calendar_window(:title=>t(:calendar,:scope=>:common)) %> - <%= yield %> -
      -
      - - diff --git a/themes/olive/views/layouts/html_body.erb b/themes/olive/views/layouts/html_body.erb deleted file mode 100755 index 37f0bdd..0000000 --- a/themes/olive/views/layouts/html_body.erb +++ /dev/null @@ -1 +0,0 @@ -<%= yield %> diff --git a/themes/olive/views/layouts/simple.html.erb b/themes/olive/views/layouts/simple.html.erb deleted file mode 100755 index 6486195..0000000 --- a/themes/olive/views/layouts/simple.html.erb +++ /dev/null @@ -1,15 +0,0 @@ - - - - <%=t(:mailr,:scope=>:common) %> - - <%= yield :title %> - - <%=stylesheet_link_tag current_theme_stylesheet_path('olive') %> - - - <%= yield %> - - - diff --git a/themes/olive/views/links/_left.html.erb b/themes/olive/views/links/_left.html.erb deleted file mode 100755 index 0984760..0000000 --- a/themes/olive/views/links/_left.html.erb +++ /dev/null @@ -1,7 +0,0 @@ - -
      -<%= raw form_field(@link,"name",nil,"Fajny sznurek",@link.name) %> -<%= raw form_field(@link,"url",nil,"http://aaa.com",@link.url) %> -<%= raw form_field(@link,"info",nil,t(:some_add_info,:scope=>:link),@link.info) %> -
      -<%= raw single_action('save','common','save.png') %> diff --git a/themes/olive/views/links/_link.html.erb b/themes/olive/views/links/_link.html.erb deleted file mode 100755 index 3fc981a..0000000 --- a/themes/olive/views/links/_link.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%= check_box_tag "ids[]", link.id %> -<%= link_to link.name,edit_link_path(link) %> -<%= link_to link.url,"http://"+link.url %> -<%= link.info %> - diff --git a/themes/olive/views/links/_list.html.erb b/themes/olive/views/links/_list.html.erb deleted file mode 100755 index 6c2cd1c..0000000 --- a/themes/olive/views/links/_list.html.erb +++ /dev/null @@ -1,25 +0,0 @@ -
      -
      - <%= t(:total_entries,:scope=>:link) %>: <%= @links.total_entries %> -<%= will_paginate @links %> -
      - - - - -<%= raw links_table_header %> - - -<% trclass = :even %> -<% @links.each do |c| %> - -<%= render :partial => 'link', :object => c %> - -<% trclass == :even ? trclass = :odd : trclass = :even %> -<% end %> - -
      -
      -<%= will_paginate @links %> -
      -
      diff --git a/themes/olive/views/links/_ops.html.erb b/themes/olive/views/links/_ops.html.erb deleted file mode 100755 index eba864f..0000000 --- a/themes/olive/views/links/_ops.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -
      -<%= raw group_action(@buttons) %> -
      diff --git a/themes/olive/views/links/_right.html.erb b/themes/olive/views/links/_right.html.erb deleted file mode 100755 index 8b13789..0000000 --- a/themes/olive/views/links/_right.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/themes/olive/views/links/edit.html.erb b/themes/olive/views/links/edit.html.erb deleted file mode 100755 index cbfc587..0000000 --- a/themes/olive/views/links/edit.html.erb +++ /dev/null @@ -1,30 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:links,:scope=>:link) %> -<% end %> - -
      -
      - <%= raw main_navigation(:links) %> -
      -
      -
      -
      -
      <%= t(:modifying,:scope=>:link) %>
      -
      - <%= form_for(@link) do |f| %> -
      -
      - <%= render :partial => 'left' %> -
      -
      - <%= render :partial => 'right' %> -
      -
      - <% end %> -
      -
      -
      diff --git a/themes/olive/views/links/index.html.erb b/themes/olive/views/links/index.html.erb deleted file mode 100755 index 3b4cb7a..0000000 --- a/themes/olive/views/links/index.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:links,:scope=>:link) %> -<% end %> - -
      - -
      -<%= form_tag(links_ops_path,{:name=>'links'})%> -<% if @links.size.zero? %> -

      <%= t(:no_entries,:scope=>:link) %>

      -<%= raw single_action('create_new','link','plus.png') %> - -<% else %> -<%= render :partial => 'ops' %> -<%= render :partial => 'list' %> - -<% end %> -
      -
      - diff --git a/themes/olive/views/links/new.html.erb b/themes/olive/views/links/new.html.erb deleted file mode 100755 index 974529c..0000000 --- a/themes/olive/views/links/new.html.erb +++ /dev/null @@ -1,30 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:links,:scope=>:link) %> -<% end %> - -
      -
      - <%= raw main_navigation(:links) %> -
      -
      -
      -
      -
      <%= t(:creating_new,:scope=>:link) %>
      -
      - <%= form_for(@link) do |f| %> -
      -
      - <%= render :partial => 'links/left' %> -
      -
      - <%= render :partial => 'links/right' %> -
      -
      - <% end %> -
      -
      -
      diff --git a/themes/olive/views/messages/_attachment.html.erb b/themes/olive/views/messages/_attachment.html.erb deleted file mode 100755 index 0ff539b..0000000 --- a/themes/olive/views/messages/_attachment.html.erb +++ /dev/null @@ -1,19 +0,0 @@ - -<%= link_to attachment.filename_charseted, attachment_download_path(attachment.parent_id,attachment.idx) %> - - -<%= attachment.main_type %>/<%= attachment.sub_type %> - - -<%= attachment.charset %> - - -<%= attachment.content_transfer_encoding %> - - -<%= size_formatter(attachment.getSize) %> - - -<%= link_to image_tag(current_theme_image_path('download.png')), attachment_download_path(attachment.parent_id,attachment.idx) %> - - diff --git a/themes/olive/views/messages/_attachments.html.erb b/themes/olive/views/messages/_attachments.html.erb deleted file mode 100755 index 5d051a7..0000000 --- a/themes/olive/views/messages/_attachments.html.erb +++ /dev/null @@ -1,13 +0,0 @@ -
      -<%= t(:attachments,:scope=>:message) %> - - -<% trclass = :even %> -<% for idx in 0..@attachments.size-1 %> - - <%= render :partial => 'attachment', :object => @attachments[idx] %> - -<% trclass == :even ? trclass = :odd : trclass = :even %> -<% end %> -
      -
      diff --git a/themes/olive/views/messages/_file_attach.html.erb b/themes/olive/views/messages/_file_attach.html.erb deleted file mode 100755 index a809654..0000000 --- a/themes/olive/views/messages/_file_attach.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= check_box_tag "files[]", file_attach[:name] %> -<%= file_attach[:name] %> -<%= size_formatter(file_attach[:size]) %> -  diff --git a/themes/olive/views/messages/_file_attachs.html.erb b/themes/olive/views/messages/_file_attachs.html.erb deleted file mode 100755 index 683b1f8..0000000 --- a/themes/olive/views/messages/_file_attachs.html.erb +++ /dev/null @@ -1,16 +0,0 @@ -
      -<%= t(:attachments,:scope=>:message) %> -<% if not @attachments.size.zero? %> -<% trclass = :even %> - -<% @attachments.each do |a| %> - -<%= render :partial => 'messages/file_attach', :object => a %> - -<% trclass == :even ? trclass = :odd : trclass = :even %> -<% end %> -
      -<%= raw single_action('delete_marked','compose','minus.png') %> -<% end %> -
      - diff --git a/themes/olive/views/messages/_file_select.html.erb b/themes/olive/views/messages/_file_select.html.erb deleted file mode 100755 index 3279115..0000000 --- a/themes/olive/views/messages/_file_select.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -
      -:  -<%= file_field 'file', 'data' %> -<%= raw single_action('upload','compose','up.png') %> -
      - - - - diff --git a/themes/olive/views/messages/_header.html.erb b/themes/olive/views/messages/_header.html.erb deleted file mode 100755 index 1017ea1..0000000 --- a/themes/olive/views/messages/_header.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -
      - <%= raw show_param_view(@message,"from_addr",address_formatter(@from,:show)) %> - <%= raw show_param_view(@message,"to_addr",address_formatter(@to,:show)) %> - <% if not @cc.nil? %> - <%= raw show_param_view(@message,"cc_addr","CC jest") %> - <% end %> - <% if not @bcc.nil? %> - <%= raw show_param_view(@message,"bcc_addr","BCC jest ") %> - <% end %> - <%= raw show_param_view(@message,"subject",subject_formatter(@message,:show)) %> - <%= raw show_param_view(@message,"date",date_formatter(@date)) %> - <%= hidden_field_tag 'uids[]', @message.uid %> - <%= hidden_field_tag 'source', 'show' %> -
      diff --git a/themes/olive/views/messages/_html_part.html.erb b/themes/olive/views/messages/_html_part.html.erb deleted file mode 100755 index 7beb3d0..0000000 --- a/themes/olive/views/messages/_html_part.html.erb +++ /dev/null @@ -1,3 +0,0 @@ - - diff --git a/themes/olive/views/messages/_image.html.erb b/themes/olive/views/messages/_image.html.erb deleted file mode 100755 index f9cc663..0000000 --- a/themes/olive/views/messages/_image.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -
      -<%= image_tag(attachment_download_path(image.parent_id,image.idx), :size => @current_user.prefs.msg_image_thumbnail_size, :alt=>image.filename, :title=>image.filename) %> -
      -<%= link_to (image.filename,attachment_download_path(image.parent_id,image.idx)) %> -<%= size_formatter(image.getSize) %> -
      -
      - diff --git a/themes/olive/views/messages/_images.html.erb b/themes/olive/views/messages/_images.html.erb deleted file mode 100755 index afeea6d..0000000 --- a/themes/olive/views/messages/_images.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -
      - -<% for idx in 0..@images.size-1 %> -<%= render :partial => 'image', :object => @images[idx] %> -<% end %> - -
      -
      diff --git a/themes/olive/views/messages/_message.html.erb b/themes/olive/views/messages/_message.html.erb deleted file mode 100755 index 6e81fa9..0000000 --- a/themes/olive/views/messages/_message.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -<%= check_box_tag "uids[]", message.uid %> -<%= attachment_formatter(message) %> - -<% if @current_folder == @sent_folder || @current_folder == @drafts_folder %> - <%= address_formatter(message.to_addr,:index) %> -<% else %> - <%= address_formatter(message.from_addr,:index) %> -<% end %> - -<%= subject_formatter(message,:index) %> -<%= date_formatter(message.date) %> -<%= size_formatter(message.size) %> -<% if @current_folder == @drafts_folder %> -<%= link_to(t(:edit,:scope=>:message),edit_path(message.uid)) %> -<% else %> -<%= raw(' ') %> -<% end %> diff --git a/themes/olive/views/messages/_messages.html.erb b/themes/olive/views/messages/_messages.html.erb deleted file mode 100755 index d5cbe93..0000000 --- a/themes/olive/views/messages/_messages.html.erb +++ /dev/null @@ -1,33 +0,0 @@ -
      - -
      -
      <%= t(:current,:scope=>:folder) %>: <%= pretty_folder_name(@current_folder) %> - (<%= t(:total,:scope=>:message) %>: <%= @messages.total_entries %>) -
      - <%= will_paginate @messages %> -
      - - - - - - - <%= raw headers_links %> - - - <% trclass = :even %> - <% @messages.each do |m| %> - <% m.unseen == true ? unseen = "unseen" : unseen = "" %> - - <%= render :partial => 'messages/message', :object => m %> - - <% trclass == :even ? trclass = :odd : trclass = :even %> - <% end %> - -
      <%= raw(' ') %>
      - -
      - <%= will_paginate @messages %> -
      - -
      diff --git a/themes/olive/views/messages/_multi_ops.html.erb b/themes/olive/views/messages/_multi_ops.html.erb deleted file mode 100755 index fdc7804..0000000 --- a/themes/olive/views/messages/_multi_ops.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -
      - <%= raw group_action_text(@multi1_buttons,t(:checked,:scope=>:message) + " " + t(:to_folder,:scope=>:folder)+ " " + simple_select_for_folders("folder","target",@folders_shown,'',true)) %> - <%= raw group_action(@multi2_buttons) %> -
      - diff --git a/themes/olive/views/messages/_new.html.erb b/themes/olive/views/messages/_new.html.erb deleted file mode 100755 index 8ec1896..0000000 --- a/themes/olive/views/messages/_new.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -
      -<%= raw form_field( @message, - "to_addr", - nil, - "joe@domain.com"+', '+ t(:not_contain_at,:scope=>:compose), - address_formatter(@message.to_addr,@operation) - ) %> -<%= raw form_field( @message, - "subject", - nil, - t(:subject_of_the_message,:scope=>:compose), - subject_formatter(@message.subject,@operation) - ) %> -<%= raw area_field( @message, - "body", - nil, - t(:write_your_message_here,:scope=>:compose), - body_formatter(@message.body,@operation), - 80, - 20 - ) %> -
      -<% if !@olduid.nil? %> -<%= hidden_field_tag 'olduid', @olduid %> -<% end %> -<%= raw group_action(@buttons) %> - diff --git a/themes/olive/views/messages/_search.html.erb b/themes/olive/views/messages/_search.html.erb deleted file mode 100755 index cee5c10..0000000 --- a/themes/olive/views/messages/_search.html.erb +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/themes/olive/views/messages/_single_ops.html.erb b/themes/olive/views/messages/_single_ops.html.erb deleted file mode 100755 index d38a73a..0000000 --- a/themes/olive/views/messages/_single_ops.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -
      -<%= raw group_action_text(@multi1_buttons,t(:to_folder,:scope=>:folder)+ " " + simple_select_for_folders("folder","target",@folders_shown,'',true)) %> -<%= raw group_action(@multi3_buttons) %> - -
      -
      -        <%= @plain_header %>
      -    
      -
      -
      diff --git a/themes/olive/views/messages/compose.html.erb b/themes/olive/views/messages/compose.html.erb deleted file mode 100755 index 510cbbe..0000000 --- a/themes/olive/views/messages/compose.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:compose,:scope=>:compose) %> -<% end %> - -
      - -
      -

      <%= t(:new_message,:scope=>:compose) %>

      -
      - <%= form_tag(composed_path, :multipart => true) %> - <%= render :partial => 'messages/new' %> - <%= render :partial=> 'messages/file_attachs' %> - <%= render :partial => 'messages/file_select' %> - -
      -
      - diff --git a/themes/olive/views/messages/html_body.html.erb b/themes/olive/views/messages/html_body.html.erb deleted file mode 100755 index b1f0d7c..0000000 --- a/themes/olive/views/messages/html_body.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -<%= raw @body -%> - diff --git a/themes/olive/views/messages/index.html.erb b/themes/olive/views/messages/index.html.erb deleted file mode 100755 index d93e092..0000000 --- a/themes/olive/views/messages/index.html.erb +++ /dev/null @@ -1,33 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:messages,:scope=>:message) %> -<% end %> - -
      - -
      - <%= form_tag({:controller=>'messages_ops', :action=>'multi'},{:name=>'messages'})%> - - <% if @current_folder.nil? %> -

      <%= t(:no_selected,:scope=>:folder) %>

      - <% end %> - - <% if @messages.size.zero? %> -
      -
      <%= t(:no_in,:scope=>:message) %>
      -
      - <% else %> - <%= render :partial => 'multi_ops' %> - <%= render :partial => 'messages' %> - <% end %> - - -
      -
      - - diff --git a/themes/olive/views/messages/old_html_view.html.erb b/themes/olive/views/messages/old_html_view.html.erb deleted file mode 100755 index cfce449..0000000 --- a/themes/olive/views/messages/old_html_view.html.erb +++ /dev/null @@ -1,18 +0,0 @@ -<% content_for :preambule do %> -<% if @preambule.nil? %> - - -<% else %> -<%= @preambule -%> -<% end %> -<% end %> - -<% content_for :title do %> -<%= @title -%> -<% end %> - -<% content_for :body do %> -<%= raw @body -%> -<% end %> diff --git a/themes/olive/views/messages/show.html.erb b/themes/olive/views/messages/show.html.erb deleted file mode 100755 index 1718862..0000000 --- a/themes/olive/views/messages/show.html.erb +++ /dev/null @@ -1,43 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= subject_formatter(@message,:show) %> -<% end %> - -
      - -
      - <%= form_tag(messages_ops_single_path)%> - <%= render :partial => 'header' %> - <%= render :partial => 'single_ops' %> - - <% if not @attachments.size.zero? %> - <%= render :partial => 'attachments' %> - <% end %> - - <% if not @images.size.zero? %> - <%= render :partial => 'images' %> - <% end %> - - <% if not @html_part.nil? %> - <%= render :partial => 'html_part' %> - <% else %> -
      - <% if @text_part.nil? %> -

      - <%= t(:no_content,:scope => :message) %> -

      - <% else %> - <%= raw content_text_plain_for_render(@text_part) %> - <% end %> -
      - <% end %> - -
      -
      - - diff --git a/themes/olive/views/prefs/_identity_left.html.erb b/themes/olive/views/prefs/_identity_left.html.erb deleted file mode 100755 index 1857e07..0000000 --- a/themes/olive/views/prefs/_identity_left.html.erb +++ /dev/null @@ -1,21 +0,0 @@ -
      -<%= raw form_field(@current_user, - "first_name", - nil, - "Joe", - @current_user.first_name - ) %> -<%= raw form_field(@current_user, - "last_name", - nil, - "Doe", - @current_user.last_name - ) %> -<%= raw form_field(@current_user, - "domain", - nil, - "domain.com", - @current_user.domain - ) %> -
      -<%= raw single_action('save','common','save.png') %> diff --git a/themes/olive/views/prefs/_identity_right.html.erb b/themes/olive/views/prefs/_identity_right.html.erb deleted file mode 100755 index 8b13789..0000000 --- a/themes/olive/views/prefs/_identity_right.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/themes/olive/views/prefs/_look_left.html.erb b/themes/olive/views/prefs/_look_left.html.erb deleted file mode 100755 index dabe4c1..0000000 --- a/themes/olive/views/prefs/_look_left.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -
      -<%= raw select_field_table(@prefs, "msgs_per_page", $defaults["msgs_per_page_table"],@prefs.msgs_per_page,false) %> -<%= raw select_field_table(@prefs, "theme", $defaults["themes"],@prefs.theme,false) %> -<%= raw select_field_table(@prefs, "locale", $defaults["locales"],@prefs.locale,false) %> -<%= raw select_field_table(@prefs, "msg_send_type", $defaults["msg_send_type"],@prefs.msg_send_type,false) %> -
      -<%= raw single_action('save','common','save.png') %> diff --git a/themes/olive/views/prefs/_look_right.html.erb b/themes/olive/views/prefs/_look_right.html.erb deleted file mode 100755 index e541699..0000000 --- a/themes/olive/views/prefs/_look_right.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -
      -<%= raw select_field_table_t(@prefs, "msg_image_view_as", $defaults["msg_image_view_as"],@prefs.msg_image_view_as,false) %> -<%= raw select_field_table(@prefs, "msg_image_thumbnail_size", $defaults["msg_image_thumbnail_size"],@prefs.msg_image_thumbnail_size,false) %> -
      - diff --git a/themes/olive/views/prefs/_server.html.erb b/themes/olive/views/prefs/_server.html.erb deleted file mode 100755 index ca8b0f8..0000000 --- a/themes/olive/views/prefs/_server.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= check_box_tag "cids[]", server.id %> -<%= server.name %> -<%= server.port %> -<%= boolean_answer(server.use_ssl) %> -<%= boolean_answer(server.use_tls) %> -<%= boolean_answer(server.for_imap) %> -<%= boolean_answer(server.for_smtp) %> -<%= server.auth %> -  diff --git a/themes/olive/views/prefs/_servers_left.html.erb b/themes/olive/views/prefs/_servers_left.html.erb deleted file mode 100755 index fee7ab7..0000000 --- a/themes/olive/views/prefs/_servers_left.html.erb +++ /dev/null @@ -1,5 +0,0 @@ - -
      -<%= h @servers.inspect %> -
      -<%= raw single_action('save','common','save.png') %> diff --git a/themes/olive/views/prefs/_servers_list.html.erb b/themes/olive/views/prefs/_servers_list.html.erb deleted file mode 100755 index 10aec53..0000000 --- a/themes/olive/views/prefs/_servers_list.html.erb +++ /dev/null @@ -1,16 +0,0 @@ - - - - -<%= raw servers_table_header %> - - -<% trclass = :even %> -<% @servers.each do |s| %> - -<%= render :partial => 'prefs/server', :object => s %> - -<% trclass == :even ? trclass = :odd : trclass = :even %> -<% end %> - -
      diff --git a/themes/olive/views/prefs/_servers_right.html.erb b/themes/olive/views/prefs/_servers_right.html.erb deleted file mode 100755 index 8b13789..0000000 --- a/themes/olive/views/prefs/_servers_right.html.erb +++ /dev/null @@ -1 +0,0 @@ - diff --git a/themes/olive/views/prefs/identity.html.erb b/themes/olive/views/prefs/identity.html.erb deleted file mode 100755 index 9ccd679..0000000 --- a/themes/olive/views/prefs/identity.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:prefs,:scope=>:prefs) %> -<% end %> - -
      - -
      -
      <%= form_tag(prefs_update_identity_path,:name=>'prefs') %> -
      -
      - <%= render :partial => 'prefs/identity_left' %> -
      -
      - <%= render :partial => 'prefs/identity_right' %> -
      -
      -
      -
      -
      diff --git a/themes/olive/views/prefs/look.html.erb b/themes/olive/views/prefs/look.html.erb deleted file mode 100755 index 5d24aa6..0000000 --- a/themes/olive/views/prefs/look.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:prefs,:scope=>:prefs) %> -<% end %> - -
      - -
      -
      <%= form_tag(prefs_update_look_path,:name=>'prefs') %> -
      -
      - <%= render :partial => 'prefs/look_left' %> -
      -
      - <%= render :partial => 'prefs/look_right' %> -
      -
      -
      -
      -
      diff --git a/themes/olive/views/prefs/servers.html.erb b/themes/olive/views/prefs/servers.html.erb deleted file mode 100755 index 1735b4a..0000000 --- a/themes/olive/views/prefs/servers.html.erb +++ /dev/null @@ -1,22 +0,0 @@ -<% content_for :sidebar do %> -<%= content_for_sidebar %> -<% end %> - -<% content_for :title do %> -- <%= t(:prefs,:scope=>:prefs) %> -<% end %> - -
      - -
      -
      - <%= form_tag(prefs_update_servers_path,:name=>'prefs') %> - <%= render :partial => 'prefs/servers_list' %> - -
      -
      -
      diff --git a/themes/olive/views/sidebar/_calendar_view.html.erb b/themes/olive/views/sidebar/_calendar_view.html.erb deleted file mode 100755 index 3a5f5db..0000000 --- a/themes/olive/views/sidebar/_calendar_view.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= calendar_square(:month_delta=>-1) %> -<%= calendar_square() %> -<%= calendar_square(:month_delta=>1) %> - diff --git a/themes/olive/views/sidebar/_logo.html.erb b/themes/olive/views/sidebar/_logo.html.erb deleted file mode 100755 index 1116476..0000000 --- a/themes/olive/views/sidebar/_logo.html.erb +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/themes/olive/views/user/login.html.erb b/themes/olive/views/user/login.html.erb deleted file mode 100755 index 0671a2f..0000000 --- a/themes/olive/views/user/login.html.erb +++ /dev/null @@ -1,46 +0,0 @@ -<% content_for :title do %> - <%= t(:login,:scope=>:user) %> -<% end %> - -
      -
      - -

      <%= t(:login,:scope=>:user) %>

      - -
      -
      diff --git a/themes/olive/views/user/setup.html.erb b/themes/olive/views/user/setup.html.erb deleted file mode 100755 index d3a6c35..0000000 --- a/themes/olive/views/user/setup.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -<% content_for :title do %> - <%= t(:setup,:scope=>:user) %> -<% end %> - -
      -
      - -

      <%= t(:setup,:scope=>:user) %>

      -
      -
      - <%= raw form_field(@user,"login",nil,"joe.doe",params[:user].nil? ? params[:login] : params[:user][:login]) %> - <%= raw form_field(@user,"first_name",nil,"Joe","") %> - <%= raw form_field(@user,"last_name",nil,"Doe","") %> - <%= raw form_field(@server,"name",nil,"server.domain","") %> - <%= raw single_action('send','compose',"up.png") %> -
      -
      -
      -
      diff --git a/themes/olive/views/user/unknown.html.erb b/themes/olive/views/user/unknown.html.erb deleted file mode 100755 index 306f958..0000000 --- a/themes/olive/views/user/unknown.html.erb +++ /dev/null @@ -1,16 +0,0 @@ -<% content_for :title do %> - <%= t(:unknown_title,:scope=>:user) %> -<% end %> - -
      -
      - -

      <%= t(:unknown_title,:scope=>:user) %>

      -
      -

      <%= t(:unknown_flash,:scope=>:user) %>

      -

      <%= t(:unknown_login,:scope=>:user) %> -> <%= link_to t(:login,:scope=>:user),user_login_path %>

      -

      <%= t(:unknown_setup,:scope=>:user) %> -> <%= link_to t(:setup,:scope=>:user),:controller => "user",:action => "setup",:login => params[:login] %>

      -
      -
      -
      diff --git a/vendor/assets/javascripts/.gitkeep b/vendor/assets/javascripts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/assets/stylesheets/.gitkeep b/vendor/assets/stylesheets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/plugins/.gitkeep b/vendor/plugins/.gitkeep old mode 100755 new mode 100644
      + + +
      + + + + +
      +

      Getting started

      +

      Here’s how to get rolling:

      + +
        +
      1. +

        Use rails generate to create your models and controllers

        +

        To see all available options, run it without parameters.

        +
      2. + +
      3. +

        Set up a default route and remove public/index.html

        +

        Routes are set up in config/routes.rb.

        +
      4. + +
      5. +

        Create your database

        +

        Run rake db:create to create your database. If you're not using SQLite (the default), edit config/database.yml with your username and password.

        +
      6. +
      +
      +
      + + +

      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%0DWx-|f(A4L+5dyKIkPG@ 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%0DS$0PGV$FK!W&eox6KB^JjA z$GeR|9%`O-SIKqXTSP}mm`KuOZUt5-@?%ZS;&^lS z&fSz{pwxDiglODsx=d#kU9r0WlEf20O5QphcNX4BLX3R|TkrRzU;&?y88M?PQ$Cu)m<|j%4uo9fVj8E3KlT`yUuIYVGwk$>4V0m z`noz1usmGGSo^EUZ|=u#@ZYmh$MRIg;nH$o-Biz=WlO`f_)X)D^>v(cC48hOi?tPi z`Dt$?J?B2>{O(?r&!O{JJb#w$hoHqY-E4$`sQ*iHqN9H~E&fmoo8gX zhOOi2tGW!W5~9OtcL7N9Qoc*D-o^zWFHjs$^IofYk7W#yvD+#8g?KDoW&EN07%Ep>s=j-CN zSHE>(;(W&U^`mR4Yq^iuFw@${5r%HvbPmVPXc2mbq+_neRN;4e63%&r#kdSxfuExOT|nQiCeOg2UzFJtpw!=+!d*vsQr z(z0_M>$x~CTRE?(r^O=>DuG|cbpB%r0vz2CnydYNryHpJDvR#{x^bK0ZobXSPG+sv^b zcjdY1I{W-Zb8#BSa8?%0)Yz|BVC3yA9$SDzy2kLzN7D3~(FeW(_tZ56>}_Jsv)}rro7cO3zh6E3#R{!s z*O=Wyrp+aO>~?m z#A=2^zw}M`FdheIcyD@o!f-b@-QifCB8?U2nbRQBt5M!e<_pe$oQtu$ZA647E!G@& zomtIsVFhPSf%4Fzva88GiET(W80F8eStp>yicU{RgU&Ty_vx4iC%x?HQ$K-i?pAZ)V`~DBjKeI9Ey0_@J zG=ez+>iUW0FZbpjC6)g~i1bVH5->>)`KHaS(dT6E9&w!BD z3d5PUzSSpB{Gb#D+5CMgV}pfAFsaa;2eEiuhZYMaBQ(6azdz3+`DC;7-|$|~iNBAX zMn$7?>zHNm)CqIKd_Sk1;G*x5K3sdMq_QNx_UogXhC)1ZA*;9rl1&jJbBeK<6QywH z(wP&FW5c8hP!PVkFin1oY8JbsM$0WgcfND4y;UuR#MJ=+VjPAqKITKR(@!OU2Uns52vD*dMS zs`&<+#9xaLvf|8~w^_pqaJ*yYNKR1>C5(lQ;#Wxk=OaP&;$H}nV1$!kD%W7fkn_oiHI2rr$vjI)#w(?-Bmp-shKQKdcO*Kq z;OuCh%1IY;$B&s~xg#W*1%s19_wOU1;?uy!?f4_%SQZyJ_baf!*4ST3Y-?)!ljv8H zUtwZ(1eqQo9^U;(60#Z&KTNDjByF5e3Y#ENLSKx2ruB0g|1xzUSbvxhgD>QP`8k&V zS%gUqC+!va*5oiw`$P~}W>X_cJXS;ew%l)-=)$3g_O~L8)J}Bo4E|WIv-C)yiZLo2 zZ>nJPVhY!&!isP>#B(WTFo{VMCO&6Dg3&ZogCS16S(+cat(bhQA~{61fhQvfF_IDu zoIRsar=SrI%A?jrLkT2_;Sye!#d1q$)Q)Ci)Ue zaws*3Y;Bzre~6E^Pknmu2>}KXBLY-xSEVX_I|hdx4m_e#YT=l(=EL!*N?PT}+3FFh z)r)#gLC_l@l|)5BRT7&vTvsI2Lkf|I51^)Pm9!&e5rKL{m1k)=D5@qNt4d+^WoQ)% z15~k-QBT%08bazoT(WJGP)4&pbnw&8E|J5*w3 zOiR#=yZh1t-LpcCr^{3OEDQ3SZbt1=0tw7-Hcco)4B?c=k$276rpDHS=HHQq-<)Y` zY#d}ccl#50X~aBw^dXRLKpu-j?d+JF7e?BI5f}Ah!H?%AP_*jfP_qzf=m*Ftpmbzh zFr6J8?d@%Ct*tHU&T9-CTJu1k;mAV`kiEJy4J?49U!J=}3p#YekKyjj!AVAw>a?R> zowiDABK{%R3Sd5ZH-Ghdk#_mb$g{D*G=%lK(-Z*Oo(lz!NxIPk?i1kRg{1(fpjScl zSSYPCzej3z5Q1t1>a%N(V@;YAvF6otr{F%OwMk=*I*l$cVU0I&I2EU$14{lX+>u4-0$=->|uMe;5 zu4m(oeEu>Nq8}6}h$BU7ZDl1l1Zt<=4fS zQY0n>e!Y$^n*oeE^zC~8m;ex_g;Kulyaar^zWaq@0?M!BrW|vwS^0g0!rD40NtIah6W<@C>Nt6Y{59+--zm|jV7#VZxG}14e+K5Vcts{bQYifZKMS}Kf z&9z()K)O@;QAY(MiwFU9TMWfliIY%X*({V_o4xkYJ)j)N0!dmS7IYO})dP@cS@sxG zK~LtoVNe*^uj;wxzO{eY_hB1Aui*E6Cwh5o`Q)rDBeb}8NNXPC{77yLWz_rx>-v60drb?iF02`Z~X2cXsEFf7HXw*?#(lG5d;6Hh`$_-Me;F z|3c3*XYYzPJ0=(E5BYr}zw?=D#s1v397K5vc*ErgUI6y)-o2A!z)$GG=In4m4;J8n z<-qL9JX5{>H9g&&y)6(4z~&Qx2}m%+ojaj+78-UA=DXz z=GYR(B%q@J^*Yf?GJ55XB&Y5irOlgvz~fHOXT=lAch|0+;(P0s&Ce*F(}Cq@*%Ctl zu>=6y^g3YObJU!s=xpV^yZ1zb+PZo3rcL*Ft{Jg#kaJcC6w&M-Mxst!+qP{H;A;TN zs2vQPpMC>ClJJ~~jBl8z zpgJj~b2`CsBAi6ea5in+Q0-tf^RoEdk$yS-i`2);N093k$YRcPM^_0-QXp@q0TPiQ zk61`^s>cb_LhhG3Axw1I$=pJ&Yt*yOneeo_&m0#~Q}Z!~mfrB!6+KPG;&P(B`|Lq9V2=a_@SMP)Tn+StIVR$3M%S*{X{s{-Yi_5W-mre{ z+BK{7kn>3d9xF6_i1JQ5YvXQ)H$ZyL>NkK6?Ia^Pt2(!zwS4C<$#_C6_))+gIeCb- zsR3H6*q%K*H7QOYP9kg8tX>CnYvE#vWlGBH^gL4EjR+b>RPhFbB&S;5~NJKlj z#+J;>hmL@Kcj}f9{ z++IpdCAVc>gM_$)u@zz(#_>aC_J5(WPutG92ri&S3xtB}vKrJKaikx{pzIPRUse-ew|UZ-f9x((it=U4? z@)x%jxoEbe4$GD;S+W>-uf`mlw4!l}sZ}=X*6xQ+m{Lyh<1Im-YXmX zdlH9>^Ft}}N{sOnUqscYPGE0{%UJb^04bpL%?1VWRUs;2( zvf0^M27J|e4Ok2RUT^PR4c4iGy_*&ABl>1Zc5&4<;Iq;+vu{e$vA0sQJsR(T?Z95@ zk`Em$uG}jObis9C*I<-6RvxF!PCRBwW^rZZG2jO^S*$tn%~f|ebo0Sy$uFs@tb7sp z&@K#ScYmz=PT8zBh?|)H>|zl90R(T~sME}N;THL!x!H2uFIik^Dsw*v-t5ascOFJd zgS{5bCMQof+!anAs)W%5Mup8e{-;VCP7d-lN+V8A@;^yDVRMwPR(A2<@({U1xs_HW zo>Zo#FD90LN^)~Dm)l(DUr=K5Ydpn~ru^@DQhVxC(xQJ}$;-)-zMN#{Bu!sVZgWzo zKc$are60AC;{%o{@%dmG&n#aMS$%}rCwbynsl)B{5oVMoovi6!bsyv=Q!4f2+`svF zj}P*zZ{$wO$7}B6HXncTY3{GNvGMWu?&Ag@&PQO<+iy;A=U_dieSX(|tK9eE2#& zmKs|)UaYSfzE+H-fB z@iP5Z4r$$mEPmJ;<97&IaID9V}T|ti{B>?ax9GN#V ze-z{FqmhLp#e4~YSv(>qd$b$v;DS zmiZ&tnP-NR`c1`1=?FII$>H?yl-lio$q`K0W5WxFGXjy#Ix}1~O#ZLwq2Y>QjyoU& z5v@doP7DP@Wy3^>jtvzLrTIcvL-R>jL(YpZJHl5bLK+z=A5w;-k)g7o4Wv^Z9U8=^ zn3kW%V6;!2d_^J77dccIWvOGHc6c)aPB6@^YrkbKlmTP zoEY>5w~-cmWMF_iZsDULov_YHyq=CX$cDX2*Ad)Ik**_UQ-XMR(11Hwy?k4pzEyOa z#4h)Hda-cbNRihgbt|i6CqC8Lksj3tHyF|Z-x_j{G1)&5M0H5kM-AO8vH_C3JKQ}Q3C4o=g2yfoFS){7_-9dM% zC)Jy}A&VtRN~n9-ouV$?TXF+!y3xh2bWbrzGYVyDg)6S84aW9;2TlomgeM%DPK>P_LfOfFI@1;l}_r+GMBKwWymPnGT;He%JhN z^zD8}%C^kYkJ)w%HXS9ML078#3yJLg_V$isM-~fdXA$t(?yfGD+%VJG?zI}282jko!2$@UO4>%0zB_2agnt*AZM z(eAeg{LW;$T3g%FR2lX_I@-0>G1?lmrrSa&rQ1=-k6V+iC2ca@xYykIZ8!R5UxN{sBh$jy&gk;05S+96NSgt-0q;c|@Cgwl#b1?78!)^Jw@9?a?1U;ho5xq&;`~jCaNd zJ#~)EP2W6nl-A&cIq9A9PK$2ISuT>F9XV=_den!OadSEVB}L0j&*8&IjtU2gzT-!I zCgD4K=K1HjQRmL!4q%S>$INm6LY6)sKft2B*cO_p0cuG+{sg1YbOu!TH(={J$g)RnB&DK{FA&%^2Ct+-l0P^ehmlT zinz- zspMe~E<$=r9{YUa(b4@nGgeqZO=!>7HAh0^kvz&H4;SUMu+QwDKCu5FbPv^()^J@v*kktau)NRP z52^hJy@R=D4|$+*jlZ>L4+r5s+P9a7V|(f>c7cN&etRfebLfz+_R)iTygeKcOPBkw z+7vOA0|&Vkg+JcK@vXT%ynKQ!j`r;rK=QyBd9&Whv97y$R)uy>@2B?9%s!s+_wU!5 z@WD=RXKoiykKUee@9w=xOMfrJU6q)AZ3nLayLNFxtl5*>yT_;ZRf);bL(f$2*tL^~ zSzgY@um|y=&3hLwJbU+O&A3?YSC2ijV;87G-lcY|ihyWW^|k7tdg7TKmVk(;YfhKl zt>xszcC$TMJ@ZU8-R^)dy;AI=A=|Wl8%;&kvpoNEdak#F`{K{HZVR^MwpY)q=H~du zmaW^8+x+e6>OV_lE^OYiWvkhm-ZoRc4aDsveabzz*=!ECY~C7B&5HA&W^;10za`wd zg=1KA+jQr=xsQkJVk%jBI`(c#ZVESV0*D2uWADaI8#k3~Vgc$s^z?>}`jy(m0`%bc zdb8f!kfHABjb&*t1q1V=~GwV|8S%`kJHdyPg`wxjs$L5cg;oR}WSV&_3G9XKaE5{a4Cl`?PaBgU9 zo{OYhFgkyv7#AkO(#J*@^8@Fqk>L~`OHYk1h@i>OH@c93TVf8=xN9sKtpp`Kv}m+y zWZrP`(7e$lBjv+I_#Ult*u_+OgDXeMhD&fF`n;u5I$X-(3(Em4!6#+011uk&hs($! z9FXX9J`lx&j*d#}HL@C$>BKp@8Vp4b0*zAKnGymy}zh2h=X zgHH}t+2BgGX7Aqa8>|{!Ooe|xch5oenZ9xymj(xxx`<8Sz@ygO_%n-X0nJ?^Df_ZF zdU^&{$LM|pn7z?=gSeaA!+|f*6u?N_LM$EOI9c9p20n-L&H#xlllaQqBT*u}xK6wt zx0lKD_`|`03Jd1puA_52%)P(?dT?U_y-r*&0-bj=P)-nKQo~RPr@8I-qnen4K6Re!m2cyn9K}xl8sx(edzD$qtb3n?&O?6GLR*OyAGmyKfUwDmMYNNbJ`$ z!xsMlX~P#KGP9E-1NRB&jOh@Sc*8&^b9>~Wyel|dWNheue_*kb;w0$F42^PB3uiWy z9(i(NbcCSTdw2V8_YVvV4UdjbPGxe5uO=E2Wp~oIQ@4^f#81(LQ79k#gv5-JZLyR9 zKn42w#2P99FxvSozn#971}U&1h_>49K;OP)Zsl&@D!-NLOWXKF;b?2#?+DvFs4ua! z0^5`6@@;+JE%GGx8QRkH!z)Tpx|?@^jto!LZGDUSilM}d2)v0>l8wdkzLJ|sx=sRV zISSkc=}pr&dlQ$ZzMJ!Irsmq!jrM#iKuY%Vx)LL)2W^L!5}|wZMv-kSQlkdrvj;rg z%8QQvFTGJ@5yi7Q%ka7&*Nd_nVegIJWN%35S+b{CxBVC~j+kM$nl&%Bb(m&**oT(iQrT119d>r{z9by& zQHL$9ir#AmA=};4(_LmMCT*+NnxVCYw+N=Sr+X1i$<7dG6^$Td1O}pnY&9?G_PSC? zHfRrQjo(~FP13#z;WLqJPr_ZmR_}stzpJP-WdQ?Q6E<~qr@Ob>Svu-K65vJ2 zl1n!O)%gT?Nos=DWJ}6AR&*}vEQVAns<&f|fLX7JlOs z(9rK>^gGwkQLgu|j`kFUlC3FQAK=+A$%~tHk>PJ?doi38ML2%LB4`vrqgehHeq+#p zS43c6-0*WlFePoN)^yyOY{=EORkWq8tc7Eml8rul{iXP-wY8SC7DshS>YivViGBqQ zsroV|8Z9YpDQ)&ZQdRD{=Bu@(vZai=pfO3E{1aLh$+N4ac^>4`w$|>r&%GjT zD7V$Ax+GYNKU>mJ23VTkile(mKwJ3X`wa^l2(4|XFQLC8NIKAo58uDiP+#BRiUn90 z0r)N!4%92=%2Fze>(aHp?ZDNUcdMuk>#o-o*A+p}h0c9w-uJF#-@SafejbiE_1C@Y z*}Cfv#8ULd3>35PUU`?pIl}(>>q*=Zg6riF2_PQ>n0Nil=2C{7Wc78GbtSb)+!a2$ z>Rru#_`dMXyWZv8rHkewr$Nm2H`bNamDYyWYOiTrfdlelAn#(XR`-j64yI!flwj4r zYGBpBVvn*mm%NK%%YEH19^PrHErSv7qok;Oc*VC=yi4X{wytkNcZ<qV7PkDao}z-@o{I}wcwf`(+RG4?{W^vrOf+n{S&%djDOPGa_wqh zv6JE>xSVO~zBjJBML0Qp?^btPbA8=MA6|L?YHfW}TX)~bLz9@Tbhmgpi4(keA&|>_ z}piEz&eQWJk5< z<<(5Ffyk!Xz85bfFJwt-$16WM;$Aq9k>Fg?`P+lYi~C7l;kB~{nzj-{Ix`0b^eRV! zz^_pBAGzwz3l~NMI>i>?eD!(zm#=;XWNqYSv=hebTb9=`g*CizzT~`rE~V~l0D+Be z@J>wG?i@-8iuE1Qe&M-BO}{25F7Y_o#~$-8 z#T%SETV@&aPe+}wH+qcS(IdoO@ZNvO9GJ21r`oG12QtYJ0ylbwK-5Y^SUWx%f}BxC z*kpPBd7^3X@{ps)^Jh{P%bfJtdi9RY9wp#HLcdpzf;Eprp1h*;9#6P8(@lSY` zo1A3q+wEG{$CTY7-??MQX#~npWvMwGo;r zZIuekj}*Y{_x8>5PR+iT*_nHWt+g!Hrsurp%GC)*5G3mz4r)dT0bz@bJt?~*xJS@C zs=eym_7e*nWO(%05$}i(Wyeo$zpMd!c6;nk${9!dx5vHXxf92Y{`kk!lB?q;h;V{^ z-d^6}cg4Kqwr?}r798`BVq!TQ)*QxgGI5ZtJVFVO_Vh(u+ zy#pES9Q)X~n-T__gS+gY=_;cQw!`xer)xaq?~AmDHhFL~YYi6wvhB!5C02p#rkWa5 zVnNL;RvH9p4ot~55{=;z?8uB^`7ztgHcSQ}nN167{6jvp0d`8wfJ6Kcyj>v@^{NGH z`M|0WZhW>T&8*g7BFZ47g9nlaLYVipONl=R{A2A9o?+G)!0c8=y?K)-%!4HdQwKuy z&g?h)0&TR)ge_?#=$D z3EU3WquAK7Fgoe;l1D`dA53?_0JN5Va$lKeM z#mKY6>M?2ulBZkbK-cgQJmtg zu@-o#&ku^`cvinSP_qTUXB!ElcGHV(($97O%))~z*bb8F~BLfmb2R9X@2oIx&< zXA(9&Hpr2`0ZlG2w!bxIO>XzDU{|9GoO8!FCpTrV zV{KqwM9!=+tIaBJWo|j9w_Nr1B11Lv>xp_N-D2bkr{Je(vpZ!uePo40sd zvY7QY7jI6B%MDMj_a!F}a7WZE_W@qAxqNd8q%g^?mnh9TAGze2TTaKhrAy3`Dqy^) zle7o6-LuRuSG!qimYBu!H%(#YV~86ztPj?Ekns_kN<<_tB)+N^_*95Dx zt5!-Bk3;#DrR&1A>(-{$rU8kmn5F)b5D$V>W!c(r&Du5TH7WQFEUstAWU5k?rUIqJ z4!Ncjx#iZZ_E-CEOe>Zp8M?Q`TbvUOui_D&3G!8;SjZxJO1jYp%RC^>VpEl_3@XZ3 zhpSevQlqyb4UK>nXrwDs6=qd#B`w*N=p_@nYGrEW>~ee&mM=>|B0xS>Vyd{JY-PA& z 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%0AK9Sz7M_=Zz5ZN06Nae5KZV&5)H(+m1_yD-O zU1J3P@9FJ{beti)9q#rKcn*V!ytl*C9tVdAI$$u~ZtEEi&kMeKkc8Km9^b&LXp8Cz z$D0R=@7;(=b9_QeTE@*+uVxuPRd#_KIffbh0?VN5!zBdR?Nsb?j~R@%4I-dS&tmv8RoE7~G~?rk2`7Tp@z;%OeyX2B3W5|F;;xV9L?S=jUP zG}}#W5zzRzwYA2yMz@4PHI3r7wT{FKl;$nXZd&WZKw5WOqBewIMU+%Wa;O8M~-ZHrrfFZls5a6Jd_)vnhi>Jw|vIwR%xiUMK zwzJZUK$=j0S>D*Vz(yY%sj~SVnt8~~SY@tNgiC8*n$RmNYno+~CS5Fs79QD4+jwji zIu^*GoQE>0SJ3U#4Qm2QM|U_38F|ylpSHd9u<)pw5v~4~R%ORdXgV+`3u?-LVhZ+d?1Ls(JLKaE(f8g z^>R_>Zlud>13`4u#-M+Xa?c>hFr*o>;pvhQY!yl`3Z~hm4Ur9QiE5x-8t4`(ndPNH zKtnh@gADLz4Dk%o(9o2zMohg~XQGJM&y+<}ypyt48a;q#45TTtT4^}&+>&M}jcz{* z&n~Hpl8Gd$OMV6uMM-#_=aO4y7)rxNq0CT}3`2^6Qc&8u><_wQixPFoivnOL6!bzV zWKu8jUGhmB9XMJgb}K#)=@faQnXNOe`UTQU$Xvob+6luVABzmk|B{~v{tAW*p(N=1^kJ+ z;I8mUio_vjdV!T+fOwyzWyqXFkuKvaE?{H1LLkk9e6ZhI;wi?4W3 z^R&EhbolZzuT1nZk%iIo^}OC(?Ar4G@G`GNB+tw&ke8pAmn(83%dFC}QnS>8HK|z= zMqC4?J1A^EO>6XAQ3{irVWrsO1^0$SR?oF_N@EZiE+dTsLmKjEIeLjS>cXFh605ib z+rP}v14ADjwDg>~lE`AKun3#K#L;2gW98)1AU7Kb!QzsV;z&u+l&M;70I50IA{*6O zQal_L!*!Si zhrAayZ-N7~enzK7vNUOyw&1WSmS)w;7IdgJ?B5xYpFHJ0WuL@WG7Y-Lp*m#@t}OSJ z?K%y~xxKmPQpj~WkL;*vAP2S`Q5FX}C%^i9%(& zJ(#O9d#2s&&XA7-jmKfG0uz5&%xa%rz;5~hWc(2v6lk|i!|jmewz9nM30co#V+wn0 zu>V$mGWx;RLva5;z%qkxntkJ7M(*AgDzjhJPzG6`-Tz>9ZQ6K19O#9I1rN+id_-Vc_BPn+lSdqGL~QL;+}gjhYYfprjXEpYbNx*50(`btx);TM^Lq z2Wj(;P4+!q#Haj#FLty+{BV(?mk+JFkZl0%{Y^NSfqfl5X4tY<*-P{bECK6IdAm41 zX3D(@MsBa0JpPl2$QNgK0u$Gh?2|`JR?t07WgTkw^sJIOBkOgq`Cfx^Kzg*{N)m+w z$2p8Ibe!`m9I?I4875%NMvK2!-LFDX^NJ4lIc(t5HBV-SgEQeqgmS8a(oS8rbawS# zS<-cDUkL|;P>Z}6kY0DV;)FhM^&#t9-I7KR02`Gc_@Rl z8x$|w)RB1i<5E6q8*rHlZmrwXN?8oW6WfAnEb5aMhwFeE4(@b$Ngy2Cq`%=16bN5z zYZxj*SkkR|Vc&}{@Y28+EL`mh4aoC*4VfLC+HB>mD4wi!1mbw;Nr4b~^*$eRBZ9uC zofWNWnoSKVk?nok=%_*&g2nX|KT5aSi_=J--)pK|aDSe*tAoWFXrN+SK#uHUQwItL zEM=s(H*&8AF=)^Fl_12^-9*9R3#;I{{VJPJ|DL3`RlZoqtkxV_u9l0~Ovu##lSwAI$i6??pU z{Lt#a)sqF&p3$BbJ6jZ+vPnri4qh9@26RB;^{tVHp3fTK@>%U!ZMR9m6VX;V+B~UU zZ0nSzLCa`TMWlu3E(ip&-@VJ+r9Y!T-3vx#V}vqfI~5daFl~@CtyyI@U=6qC(n@zn_zn}`Vygua<7|AKgf79M>&dX$7VI@timXH)8uGx+ zGK;rIY&U@*9x+JXf%hx&sFpRb!e$%L()*-=?jopmsLg{4$JnZYC+4A{vB^SM;7P3Q zW!WiXExiX^!K!!h)@|mtAXH<}>p;`=$QEdVHk*n!Afjs4K~LjXRm1XI$V@D40Olg7 z86QL7f6#bsAubp-kSP>Cs$5XQkuAP0`erw?lfsrQ zL0j7+vt!|y-yO&gX4o`R-n_-wqHU)5tWBFYLE*F!8Z6ckxYShxLQcG&$tIV?T1e|{ zD)=@uy;% zf8NH87@VgL(9TeZtROFO`B)9k<@fSP#{cw$4N*y2F@}-gn0`X#x+%7K#O(u;-qe1`QVf z56cki(8b)W40O#^$VNjmL!p<6rTSuf(L%AX7Z?1%;yR5AJ7~Z3b38TJy27MAP_ z=K*>y?(wnbtc_8S)~eMjwUs(3D}L-Hxbeweh}(y{Q3h}{XZGwh+8TT98o@vM8V}{F zxG@|YW3jdeEZJFJv7l$(e26G*P8wkC znNl#?>Yi1yhoF;)mF5aF9hXzFCD}_B>x;Wkd8j@qS&`NY#Mv`vPG4!Rv{$XvR|Z!= zKn766a&4KmG_aV}tu5*y2C8trEHtvRU|{Z=4h!pkdO8`{`8J!4COZgI5asOUM08yi zVK(6yz)=na{i)n^g@R?9z* zF~F&btwZF9v!XAL>Oz#=-bVVAf!XA4go~JrQ(k1;oYxWWX&ga7N{@^XkZxdcjMQZr zLXq8wq<5QQPVOYOJ5h9wQ{-fH3!<3|b9RHE)?nK>GI%h`#P&A0j&(5yH$*}{0M#p_ z=;Y>>h=A%wlqP8@C`5H!7Ujl9F^U%J5`YSmvh*;j1yRrtkPC&0xMmfnib~GR2D=Gy ztSSYBh(;NqgyF%4E6Rd0t7H$}booYXPlH_#U^?xw{H$ybwqFV2fkuRHFcz(E0E{Mc za3jWp7-lgTzcbz*?^5T?Jbwx*VK2OmmVLU)rFB@p!iBs8I#;b|%3 zJ+fpZB5F_@OcH@VjHC>2>o91O?`aq_pS~fRof=I>N& zrm_Wb1XE1(*3|;8vQtKqGjBt;!mX_EBhrwNUa$+unwrXrM)VzhAdp>7_Mmz-8qG@#$&Oct_0!rh96in0zBuehKbdSs3jC4M9*Xsw>& z1RFR(s2Sr1X?q(w$T5mhQBhXXjaUP*VX`_v0o+xTG;nNc^2z)}T{mJ8T~gA4=>N>S zP0v;i6kl+X3;EHB93vYRwTZ4lw@K*_81gjKnC?d|Ur48~A$|SyY;hibj3Ef+_o&FL z(1;K!iW{5{@LrRchfL!J%S_sq9ki#HKdLAbkU=YVJ z8*(c&=uUb$lplFz)c{EOPSU-xoiK$3+3nz+39+tkZ** z1$21Qvh+-R@bQ6=Svgt*B`V4uM_3>?J<~eNZ;jmZzMO5=xl={VFnIP12Vp8thE%x9 z(2jh|0}=>Pl2s>VdG-vl%m$#7p^iEsu^|G0FeMZ(a2t?- zE=8^n6%(NJGx!vSIA^VV86oTR8BiK#6yM0y z&giG@9F|NfeApuOp;hZpu}&2@Fd;z?DYye8PT3^@g3UejKq{jz1*#-Nbmt~JN1(f2LAf^WT#Xk1Qk+Mz+ptgg#g7H0(tMG(#=IQ&w~10Xu&=Wy)D zQ5YxL<;d?4P6j~q(*c0wpyyi9s}Y966X&&aI{W?EGa71CoPs%jDSNl1;$);MYCtpr z=y+-Y!>YUtLYyUyK4f#^IOnM<6H|4r%W?sUJJ!r}GRG=k%w|?wA$XaVxH9QHV$B)|!Xc#Cf$;qZu$$hzjHU{EOg-GyK0Pj|^BW;lmXx1}? z$4XHGQ4$$He%wSr=MFu60lO~T_EPQKX}(h+XfQG^?G zcp>K=mm$YPKm^_aPxpRz)2~{I4&hQ={=HPgVQF^w?ujq>Ij7e^8@Ul1+;@cWHWwTO3Ij| z=YhbzT3Jga-0vbk5&^qta)d!?9nk}RJ2T+c9_bTawt)~oj_4Knu_-A@N$VuMYP>yi zlbSUp=J&|HiIE8mwIKspStxK)(h^|gsM9RC_scHF4Ndk9HIS)}#HIl7#590A>=fN0 zw=>!G(T3CJ%#nlCG}Yi)TggdDiPOl?%2qX^gjz6L{H2iiWj_UZ$xY&T!ei^Rmm>vR zrNAzuVqW&APRS0WN%4y$D=|qTi1c2TmQ4*;$|ZWUML!`C@Bul#h^57>ElNMs zxjD!=wZ-O;l$4M#67blGUDhQ!oT&%sun08O?r<^k^y^{mEF zW0SR&1o-$=7MR01_ByKv+UDQ2HAP<}1V_ft27Hh$O)T!AbYwRdbDZ)v$P8pxr+kpX z$hbwsKwD55$T1j=In;GkV`gg*Ng^RIGA?d4;2T+47;{1&S2>`GY4v|kJ|R9XZY$s| zIWUL?HKDez8rwkQ4AJ+G1j2Jb&=$9+9sfwGd+Cw}s&I6-GRj}&oA$X^T*&YVuqs7T_sF%g%xF*u7WPQm`sxw$Q-39GU z(w~Kat`9wT9;7eQ+5oN^GddUAgBTx>@Tx_`$038Y92pk`IaLv9eH=?wsRwkDcUO0!voxDXAh=Oc3M6IE>lkQL36iEBYj07I>}u#cQV9Ig3<64$06Yo6PN&PrHY6tWhTzyO z(eKG7Ak#R*o33Nxg0>(V!$1|N3fAL{So=jlp&(?BCFycn4Tm*ZY9&tqCSew;4TX}q zUIt~x+B*P+8~kv4V4^FfAFhG?u>!o<5BK~%u6}SxATR%0gRJrMDSmJx;1m=LKfBaV zC4R2yw{L~0@$)P7Q-&YhD9D=x@$;zq`9S?}#|xJZ&OrOd&jae`W%ZLKf2^QDU!Tx# z;{YK3ELJ}cs-NBJ=XLe-iTdH-07$N!@xzrbetOhTQ2lWC8{rnoYhVq9wcq zC;4^338jbW@;|c$2miG-4{Ht(1ZP6of#&#T+-cU^)EwK4D>!j;7E*C}O-GZ_6xoc+ zY}%T_nml+wR!z}3j0M*yS-}=O@&d1xrl=-dh=bqArb)PPrnRXN_WZaq$7*Xd8ZEr( zO}Iy=qtVwm6}&WtHBLjJ8oiCUb0^RObA4RF(*eVN+{n}0+^9F+1k8>`t#LLkC~IkG zz>!&2cav)l+2kt4n+T}0HgC#DKBMU@f zu%NKeg-h%W1A(I4+&mAW1kOP$$aevxHP^`X zo2`4o65jD$V8;d!Wtt{gqbo9oBcdtNTKfpAGsbB;SFGIs(_ zUCGYz0SpyU38P_O4z^GA9MncBb{`_~VEK!)!?LZMY((P*qTYh+=xkI-cR_Yk_Vq4* zcftAW^Vz=aNv@urqVu?T32*Lf)Qi95oN>-VjD8;Va^als9IocNn03y34i(dwg?*88 zsG6?AEO!>FrYg(K!iAtMIhk2n7V0KYnW<%>Zdwa6Gg&uv=UF!ar*7ICF_m1r2-YA= zmo2?RdWl-_BsEtg!^3^iqQ%Byv7~qDl4Wo*U7jAEjw-9C`h1aCtSy0G>5^sIGW(9@ z8k|c}eJ?It2mJzX(&zv98`-b1_MtKYxL_KrDo%gO1$Cy1H7I-;y?$^PhQGzO-S-gvJRA z7GO!RXd#=!fiyj>?UuRoflB20OveNWATD&*U1>&I$1QUu0TN->V!pkAEoJQ-F~>~n zyCn_T&IMnbbk9dZ@cf+FNb;unvEG<_%Uo?PI`BKQW*f8ZIcX7T=*4?y&YEq`*5`QA zu5$&pO`kb)mYC(4-Iq2Sh;wjCqJ8glF&*=USq7rfnCjD~o744~FesR%&9Y~+i7nOXjKJ^rkT^M>C*s&wpFlb%CsrdeACdjN|#TbG=*>OX=q#ZYd8Uz6hPeMDPjuR z*OpXos+fcpwrj#fG0~lhHumNOV}d^MMpxk6k_qGSj8?W|yosAGgYV5AH(nc$R@S_2 zoHh=v?7*V2W7*2~O=c^@h2U}oP(H?JJajomJCGj87%F)m7HVH!kA;flZCTFUSL)OJuXJ zNpHMTQVDMk$Gt*h0O*50f20D8YL0*&dN_I;9F-@ZyV_;~2^T5V84nu^fvuhj2I*&mp zlpC*V91aAyO4e#MSK^sBb6B-?ILpeau529D7%zR)m>PuUxG}zQBqDT>Q4r8aN5SZ$ zu^|!E;rIqP;2~C&T_-Umps0qASVgd`q@-b72wisogJn=&ixRuD;VL8xj>ce`-=hQFf;m*M!pkydMxPBo5+A{`C-#$W?Z zp2m^aeH~3Wrp;3qtc4<;oWs`>v~U7cNgouo4LHDhxGUiAYH6s0UtEX|oV&^d=maWT zI;kVay;*Hdbv1^>Hpz)m5@>40y>M5#F5=3!u8!6g_!ibyS5($CG&D80ws-XeY}|JI ztSg~dD{{k^$jCRO4~(82j~G*afT7JX^G)bB4D8Ft6zfIaLbn7oWQ=vbsMu3%6&2$Q zdkele9>=AIK0o+AOLCrUKoyPvo{1PE*Mxq68o$Efg<&A&cA}(8LloKtINS+;sA&_0 zK4_f005EbqP&w%5Mt}z2P3PUtDv07|zaZZYLT0X8#v9N~c459CRowU+o*xEIybg|@ zH5@d&pb@6F`Hd`SH4Qmmz!A%sfcWys}nPq3@#pZdWcM);Kc~fdP!f{M;Ual`U z%!xCh(HN2IbKZKEIpKRbK-I$5oeq;5l8)E&Tt+ooRb{^ z@*Wv0HB1pWt~e)qm_+wTbSO2)0LD6Z9@7X$iL=HT`*ilGZ2i3VoLiAo`m6YC6SO>8 zo=goe`srv?MD}^@ybp0+#OY_;r(@1XobzUdQPX0aF-~iz63+SXD$bfngyQeyx!7~z zS-ydYAoMJlvRGN?vZ7?P`-}-J`Wq!=MFPx&clu48f&-Iv{Akv&EZh%~mFYu%UXWCv z9Z;lXWoBlnAOVIs0J`#h0xGmQiHHn4<2kL%3{;#r9FJJ*%-J(xXS|@NT&0eSquP<+ z;X{WqBcMpnJgc1zo;j;PBt@OffMW14R6yd8Rg-zvggVhU8wDZ;$cF&LVf~Oe7{KW) znP=k8_)eQpH=aD9od_O3N_=rxJ7gb(&kjzc_t%^|6L}{5v~}wADVEDnKw1b$J7AyY zNYPLLb>eVP0;~E70ao=R_TfVs^3e`hIdvQlr&HhhmAvhaDK|fLFpJLIxZHTIc1#ELv)NI+F@Lvaxic- zuZ9*o{`O0yIj2q-65Avn#-YIZ;@WnO6INGq?SDqhe_f=XRKv z(pIw@Q!`G(=1L6|c0_1HDW;2QG3okp9kc-~CyfNQplQ(NTXSy#eeRxwHi)b#ccgn@ zy_$|GZUDxh%a)o;Ele_X?n6Rj!+mLO9`OXMQ(>s-p9Skq?xp~9nQxhUsf7uxSRxi1 z&; zwfR9zQs;`fhLnhyWm9~*v-#6GaRQigSTtcr3z_Q+gOs^8Uz;ax(bKd!+Mqb|?FI9V`PM>Cxc!)xqgduVG1r1jbRg;2SQ9guRiA?+CTQb> z;{Ye-TL9LvOqgc?Lvkkn1YpNIXSS+6Vu~r)J=0PhF2{*+U1K?sm$P|@FmTH}aOj0d zOj+SNK}8mJW8>9Iqs4LY`u#3E1G2$&(ecgw@80u_7f1#mMZa**ZX^2u+!> zn4~)lV#7^R#8#Rc%Z6Dx_9AD^)MvV(|sU?B}FPlDJJTW%K&rSowE}YL_$1Zw8F!oHQxbNYy|_htSA6xX zisEu8JuZBrHDTfe_XH0>LR3Vep1_S{cU< zu}svGJ)mJA1vETy?pQI_PC-gA1?>_QIyS|f;vWNT!$G&fdgBnk?CP^F^o)E|31HBr*?wEL~|eez@Vxc6px zN6gpz1I~>xD1^F02HTL}b>MCp@Hgbv8GLAO9lVhStW0_IgD#xlr0%Q1_jASrFJ}dD zb+kX2_3{HV_|+5>7C*TA^-s=MHunVWU{7=9`A=To{ovvWLNcOb`9@1!TKo23S%Z~I z1@D2@V8N^GY`bWbTUk+7R??2$Y@DGHO6Wv_!YH9jL6`%Nn^J4IIKqOb11FlP=yn?M z!nPOWOX@8|dm4Re)kZ2RzNic5n9;&ns~-wp)PyrcO-Wp<>ri=unWDm8#OolV)wc~$ zM|@Emjw91#yfRBB^H_cb3mbTEjF2g<(u|q;f}z5~9_$>3D=C0`yBe!Itdt6I!A-J@ z8CU=pHC+y$MTJcetdb5(+v(6LDlGCNfo9U8u9ciR;=wwp8=FToQHPv?;a3S*Ar(SM zxF<(0P=^SVCU`gudaMgaPGjkc6Lu;ES52aXm%cP(X9%ZpBSFc-;R`stnFbpdTu5ql ze#rvL57|eh029=;Cr$)&`GE zfM3J)F64xYbC$os{3btd1yMo(S6Id7xAE$b(7M-Z=;2LCvOK|jTvRj_mZ3U$Y3jv| zBnqRp3pbS@OI(ID(-kNz!Zk>>%qMI$l*gr`p_qW z*|>pB0boI*OB=i{T6P^ha`^C}3ib|Vmo>z&s}t#p#GzgQ&}z#ZV!_9Y@i0dghoGMr z?b5IalSXSep5b)6JfK15e&}?7X9J$gB5zLC+9{G&$p&y%vz;^ z9ht!z=fHtRbSI**7!V=~X&=Yx1WSqou-Hv@NgGDuS-=w~x|~uRJdlmHxrWR3WyV$!< z;~GM_9F)S4naQ;p&DGJn$i(r0Y)ZJ45?p+IuA9B<6qa}0A-0)M@Z+35_AYq{2iW#A zf62hdMeJQC`Xn?9qaUz7zQEqa<)N&cg9r2juq;RKl4Ww1i@}exJJ`FF2*4Fqejk^y zcc}#>Ue7eJcggYuKQ0ZhcY!<*o7uZ0#>tE9T?ecS0rsu~2P=BnyQ=WTWA9RmSZV(x z#s#Eao(fx~40p#$?OPvA18EpApwyMN7D}tF$3efk8GWeNnQ+5;z=DFwxWC-O2gPLibsgVakKq_P#g$sd~M3(mTdF~x(9TWPM%SS!An9gd7}UJPzQL8I9U zbnyoB*o7X)89(NlDK@$6lh{;zBXt`3m80~>Y)H*BF-`Qu9u-!Qn~G{DNVg7fivl%E=U{TAT;d6Z>`aJI>1mW>1{gQnut4 zNg3>RYK}d~sR!IlW0zyXP!tdHiao*Z7K)d1JUz}!TKm}7U?HT)doYoL{{Cv$fCLS2 zgSh4BUKXq)Fu#sB6=oXxjw5CRF_?j+)*=c;l$^?#lmhf3nVkbN<~(~(Jmyy_{XBY$ ziAf}}3(!LdrVqE~)S^?6LrnLUvmfBmAZMwrFh1-~Lfgw~GyXxV5E`4SRU(rVDJ?+iPXR4(azDb$>|vf0er5CfT{} zCRyEnGPglM}i&$GJtvxl_lvVJCFqj&uKxa~qFyH;;2uPw3*F&_zC>i+w^D z{e&+530(x_+zaH~5)`^LD0GRCbEi<~ilNYzL!m2(LRS(E+))&|w8+90M(pYT)w=Wl z@A8Yj+4cB8aB#WA%`TVgAOiorgm5Px@NWsiB>Ch*Cw9RIL;llex?GxuM}eR%WtXrvG9!`ERoQoU!qN zFQ;W%I)s_x>>X z{(J6ym?Sqombzi%+Iy1M{_ugjHe}rGL_M0Z_ThEOGlmp`fa~tbxNqIV$u~@$I#@Wy zUsf!NPW>|`W~hgO24J|1i9dH4^LHZr3SmFOA1{M3Qa8Aa)PF$$TDggy&txO}HZU>+c~PL&!y_ zLFjTBb4-MIgmDNrBFsa$1K}Q*k@j1camz0d!0RnZ37CBh_xG=$p`?nKy#@HoOR5cVUy zjqnLVCPFzv3qrrkxHTH#N`y%WX$ZF?+=;Le;cj|H1P7FCQ7ciqYtQ^8E5Iz~io8V!`~&k^px3JFLFWy3)_zd*QLA$pUuH zR#FY_j|g1)_oZ%_P}}=?b$!FuNY^lI()Lg2w=Ue`igDR?|8@OV@J?4Wj8FR~_FMLC zt|*uNaR1l(an4GVD=2RJ)vNlexQ@f!Z~x`huvh*6@y1`zwDm{ykK|n&X1`^HyCPiy zam|C-Fjzz6n}~!b$uL(?yR)s|!>9|4dJ#-mH?)HePSF`bav7Lt+bdMWw;3@F5tcX) zXn^b>alZ$XZkZ2a-Xob)D49JAPjIgg^^AF*F(YM+eI?1PVT4;n{1YQmheSM$c&poB zOq>Eah#&hXmLIr6#OwzLS{q}YWy~rWV_!=uD;V*jide}AdR17SW)-ssKUSMYx_2WH zB|Cu_`)`DauHvH~+9J#B;Uj%LEb$*C@&aP*8~F53vh+X0qt%nl*n1h9OtD4%2LuU^ z0aW7)%%?#}`7W-5H}iRlY6{$H`w>CwaDubaRAH@W>j z2!O6Q5aU?zJclBF08Paz`Wo4P1y_k!FGRDn1-K-{`gAtkBBF60OQ7eqZwTyt+uwxw zWZ?5(+#ZgNFVxQHe(P<68^p5i3tgtGPk57V-Q7;E_b@@WfPcp#%}PAO$nOwQHiGr8 zaF;crmZh%rai7g;2@x*)p9%RW<78XtbwdYdiL(T)_hDhC8pLt7R|)z9u;#RhXAx-` z1^c>s{9cr+eQlFtSB~1`yc^j`+$7WHGWRWNtAv()jJ0=yfc0JqpAE(?8LAWQEt@?JI$$O*OhEFs6Uv$Mt6Cr}J4MKb?9*3H4> zhkng&UB|R?JOy8RYy`{vC(`PEReKeFCc4Xdfa*i5CXRxejZUw-?3pl&weP3Y#OM9t zjCqbRKOy$_5b;$_+x}tl{R*ayU&U1QfAakDCBoy_DYA#t3VS#HSgql-O7Fj2{{5x= z`#1Ubg8bVi{|4pXKKZvr{wYGq*gr!2e-Hlbzw%qL0pAMCtiVJB zUynE8S7BLK^Gmf##e5$z_K*1G6YpY9sbhBeXr@00u~2t>)sJh3>+%1_VWUg^2PNZg5vcs+zq1HC_<(=+A>7Od{F{o9 z%m-*tU&5bb2*inAyz$Yyk{`Y6q0J9Jde_xc5aXg=lmEUV9jmxoWskqcw|=0W2Uvyz z@LRiGX5vAF&k^zvDldaE7A$lbi4%O??L&tvdm?y!TWts{%v^4Wjqvc89#i= zWo(6laO+u@@skxU<5?*F_96Xs#Jz(v;@-pQ)dwnE#^G%)!u1H>Kv;~h3gH2S?FhRO zeuwZDdB?EdKM>4MT()q{MvdAU%t(Z=G#zFoLIgD3^th(usZY}lcUYurnoASCn&I|F z#EhU>is&YYFFGzUg|=CuQ^5^SNS-jwH5m~dNcV=vjJV>O8@_&<3kF@H9q3_^v56_E zGv_T^0~44Q0VEG###}q~=EW;F{0r=3nh|GuBZiMkNu9M|`F)T6^w;q46{4BAQE^Gv zOu6~?J0E;v&%eI|3mYMt5bcW|apiS0=Ku43KYZr5fBfhKtZ;;A)IfJwLdx}D|Mtp_ zPyFiDzkGVO5L$jA8juh%JaOC&H-Go;EkFIun;)OdEvto1kARUXQesDspLXjV>wdKR z=!HJym+UAZPSPKbp$w`~BV8w$!{`DUZ zoXW4PZ|&+0(4G(enMAx|!pz%NKD6_GRtjxqei6MaBKR5JAe1?abS1!NZw2&*CKCE zMBJ6v-+agYPyP1K$8wpqOm*XeU!>~bEa|$he|Oyz``$j1b0L)K!DYY@H*$^{bH~#eH z4^9==wsy-B`H)yAG>}cacGm6pJ@K1ApD3tl>FQ%?!*OFV(n$5{X$w~W@K3fAGECF$@p{92zVPsH;p+Qf^}hH!ic!xG0~CX zVP21E7`lef2{Wpdc)p0JVX-4dC0&^^?%Ijh-!S#Y=`&_}X4cM_e&f^|uK(JEYpzbd zB5`EgaH4zM1}YTp(F!p#CU!*P6<3X$kb1+7H_f?a-ffE(FZu3w;l(Dt`xy>xyKVkA zzcG8p)JYS^r;JG)85;uvkOIa-k1rxRcI4>fvDZzSc2nA|w=G`wy_IY3&A1;ouRmx$ zC^mlf!2KEbu343S$C7W)zh(CH$rHyVCndziAX86Rc+~I_qm#!?oH8?Q{-R~+tM6IA z>5(7p`0-DFhC6M3;r_*EyMO-7PoH{X+oKO{xNpshI~ITI=9{K|?V78SfEf`JmoR4R zbyIG-<+ksp-<9#;quYP{vuFS9H~U|C?GJx^^G}{XefH)b|M2@)UwUEhFL(W9#}6M` zfA@-|3%@yg>eqac!{SF@HGa~Jn{QjX;+_W{eSGIH_Wt(YU;ope-~afN!$*%DKjAs? z+3{mX4}bFU`|rN}#;f~({mZAHcx>anEC1=+-yAj~>FVpI%$|39`q~E```2Cn_TqoM z`R5M~etP0m=K0+G!lL35PswLEqc=bIeCFxTj(+mdU*7ut{=Gl{@zw|L{eIHbU%N5w zwtu?w2ai0lYwt^cc;~}I$4_PD6cm?TsH&;0tFLe1;q<5KE?umyEH5d{J$L5B;gA0O z#>>Cn{o@}_yz%Bm%kSR!qn*F{-Rpn;_{is3xkY7_HJ9oen_Jr2J32ajou@n6+gh8O z8ZKR|Dlg7Eck1YYzr6AC^J$CH@7=s(*RNlF`-8)upUW@3P*c|k_wCNE?jGF4?GN{h zzRcd9?yk;`wwA{Fi!etzWZjs3k{@?&H7&*=B7@5)X6Ds2`(=k$a8;ti9r-Cc*#lY>}ZGU zeM3EJ^+I`RaUnKhLNu%WxJn&F6+~Sv{B+7n3iET$XPrHbaZcq?>d@&1A!O1(u=3KP zg52z^v#{y{_4nZubYqn#HqD74jdz=H#}6Cc_g1a_!Nx6H zA0HVT9T6tU0yq}HIho{_~{^Box{AkAaZ~x}> zucai$p~TEy7cX#P%?bIqNwdFo$K4O@`1x;s|K|h8GxJI+FV;6v4ulVI9jm zd+ejPUjEgOx7@pY!R$%nlH#K&bhZ*s^~X<5`_A{*|LB?Dy#C(dQ#mD-ml`>oarBg9 zqUisuro15Y_(y+w>6cGzx@+m&>DMKb2M=0sBv%DDee0j^edH&5|Kr_5r*ccH>zX-K zDr8}s{ij+RYby$~j(zyY-|qU+`v3LqIg^opOk_l4Ogz>OXo;7RlAJPr^4Gup{RejJdG+1HXA3S|YQ{Ls z$+xhh`p;PyuX{RM8>)-X9ee-v=YN9S=FNin>rJ;VU9)B9Z~pl4$(*u_P3@uaIYtih z`M~LDzEqKa`XDmew*LD|ZkxYg$%-Fr+x^lzhtG1c(kZ9+c7Gh;3zy@oh@}2@=yKkt^L1z>R-10%a5P^ z-Jkw;D*po4GGyC^mc7ijtUzCPdt-HR*3tL>_|m?;`}Y6guSYVAtJR_gKx06yQc?q> zd8a@9@ZERb{owGaT)AFSbglx(MbPPLYp5>GJ^T4*C(q`TfO)K$I2|908gC}=1wF0Za@>EtBe#%C2pz$a4ls#Y(> z)^Y0enR9vggtu|UqM9ivF_0pB_D#nO||~|4{bUfpJyM`}p2X>h4aB zxW-Ep%dq}X3O$W&qgo%Xsoj!dfSPlO)8YU?2vyIRPA>#G_G!m2& zVu>eAG#CUGod&@`*&x7GFsQRw!0vTncj?Nu+WSpI}Tx9_sq4N~0Q zcj)Nx6Qs^({}*+>+lDtlard^RjUANuo{pLSMT!60me)^l*H;%55*ixTGc3cPygS+6 zxnWS=-+g`MlZ(1C1vFmLS0Y$S9Sg0_Bt}N?#s%0 z>c1-M#!c?g@goQK!&XkaGMRPvm9#KOSx;v*66#iUMQLG>|c+L8_xR|ZC``*!(^2``#!1n z4Yif>W_9xvHmfx+JVBck6qDY42M!$r^_BGdT%o#m-I#v-==G-OX)%E+!zMIm%J?y3Crq8U459TbT>rV@Jp1_EnKS1ue(p_Z+fqldyt`EL z?qYord)eAok$C+1*WdpZG%FH_<=wWDog2SI_L&dA-n3gk4YwhEkpzo&4s1@=myZ0k zdE>?{JC9vqTcfgbtMGHRxM+6tsM%#pH}LtSj%wN*c*6wOc5qj{!Lx?-&eF=gWa$DKa^#Tdbufn2N(Y8Na2z*ZQFK^6*WSOcW&zybaH z0#1R3ZVF-?79VuPDok>~Ft8oE!Z1Cj)=rr`Y2pMKh5>}rr#BdVN+6VEJ^<1fFlgxT zQDY}e>H@&@SSBs4qvJK^&7Se-=sWav*czo&d zXIH)~qc5iK)T~+k_M59-eR0LpPd>3|-mGa5$q0y&aH^OvH3q^Qd1T6rxr>%8U-9y) z)oVZejKG(T0AEZu)%>#Y=MCSl|KgMP-+k+~7oU6Ti3PLaWRMV=&$!Ki!NbQq^60Du zPdvTy)wkDu^3``g|GM?BJqHdSgS75p7JBl;@uP?K?b`O+rVZbG@zL5hUs*x!4ysBk zdgS;ivlcFW?&Y`EeY$?b=54zV9zT8Is`(vjf?s+#hC0~W*;wAbe)*i)k^MWj{^!T9 zKH{o9sOqQ*kIr5E%*$_o@a2!cZr^+K^rahj?3~;U089^rTZab+>3lVwu8uahuU#-Z zy!#I*+|btt4jVmj`uwHOzwzFe8-Cw)`1IvlHclQI|KM<>oDvXB&+M?Q%=FacgxJW? zKwq`Hqt%TI!pImsamK6r|a`w8FlZQ`WIJAt6?7YI_Qpohms-9I5l@&0> z+4N10j|$a!yOEwvHJ^HE&8I*9zR&EcrL$TW7L%BkonKU1P6_cK*PHt^M?yKFOnH^C zvU4+2<0JbI0ocFb$(PoA_S2sS&zjqN`iIA*WaSl=Rn}k?7*LqL5bO!EDPPNiefYRX z=Pi2?wYD8Tf7?kD9G#p+$W0xL8Cq`8+N1~lA=st+X{5&q$v%1Z6VJc>>4t5GFWhl~ z5t9xDtEOI55ID?GHuLj^U|;mist>>4dg#1`i%(cWMt&I}6xnQ$AP$BDKOp6=;v z)_%Qt-`U&FD3)1JRt>nuXj}*&rt;IDcb>fAs0qb=z&VW5Kpv1@SlRLWp-VPi!EqUU z#{kjH*4LcAPMIHKOMnFf|@iYTErq9wp&-_hmdx+J%j4_1{01FbL z>scP$$MS~l2x&8iuQZ7D-nT#LMr004##e3@Z@82r%xI;a_B%{yD}PpH2F9X>)+r5 zz@bk)HfP!+V}=jz&o}_7979k%>A!#nzkK`2yRSdLY~jo)<3?gz?}f&o#z54Fqqh7j zbZ}zdpTB(b(dw6WyFrf=<&v>jToV@5r~i+;p2GyI2!QElk=vI z8#Q9o_^I=k|2vG(7Yaz6s99fG1dH6m>ioX{eE!yRkIzQtuGx>TSpDUeLzn*!B@9HZ zB&yX)P(o^?kK?tYe|)>{m8YM0?1`seeee5iC;kp5kfM`DdJ7rsS@A(Ci_^O{e*Vtu zudaIc^IvwKwe;);CyYetOxUi3ROF?EYwRu`{`05xU#|b@&%=N-5PTMpjhy)xuMz(WzW zl3|RPAdSjRr3s2jD}c{b01H!4f^dh{hN_aBl(@)<$hZ`ezA_Hdi96KExC1P9VbFKz zr=xBaHB|r)Ft;09@l+^vq~CVO9axPd^%jaOHlJ>|1F4KKQ=nE7?ywBo&MuQL{w9iF zf%=CmOzet7UJqIQGZ@mQaL+ZddyV{Sib->miCp11LOUB7AQD z&E-bIUMUS!G#Wr+7}{{NNlSYeEbXp-HY^)iyi5HRjRw?MSlrSYQ+U_9n%rHyYldnF z5oj==$m{=UdUtiJ8MX-lvG!6l7$D{UeeG*ywlf8Fjh8dDOZY>DW$yKpW6y z*+@?nZjnwSJ;Gq58+VXCJ%s~KdN_=2bXk=XF11b@{XJmJu+azhh40OzV}xv<7czYI zulD&+2HeQtE@jKSi7fNN#vm*58*v286-38jwv zB%1W(<$L(>fqpr@W|smnQXNb1R}Ubd^laGI4*(64uM!=$KwrzRHyGS}QU0WRZ0xc% z%ZBb8eHF?AD6Xj}EiNtvL=Q|8vT_zQWL$5-c9oN!l9G`NG7K?0aHFE*!M)b{iu}}= zu;7r0gsc*ofH6Z~-tq8$dt+sOa+r_G#mzf7A*Wn0BIwqGdo8s^sbOAr=GV<_y~0w9 zL5aZgNL*JuXm6~@iP73zHamX$x}z?!pql9t)AeO|Vq1MlYOu?-<9l}>JO>s@es!~` zhkN&0Y6=p3ZO-l6_UGQyR$APXpGo(ctMg(tcTVm3bKCxNwv@+^*%X8RCcO%a3L*uTcs&``xY-}JIE(PU!`o#71(@kn zhB*`D)$4Ao6KA4bhDZ@5MJ4}@C9&}F#Y>hfHC-yfOm8y~B@juel!{0hhcXYFe&m?0 z+=x|g0WdXP)A7z4X$?{j3w8v;=g0skVB?xe5ffou8%Ysge)Gcy11X}-K#G8LSCY=( zqv!uchG;dSr@$N7)yQVTKWPwV1{wrGsI5i_mGOowQttmBI1sG{7}c4`;2L-}EBr488fq=+1tu%qiZj(V(+F{eUtwgFL4#WrRH~l4ZAR+_@ zqU>Kd5M)S^F#@X{+&jU6IC1$7{DR;>z%R%g2=WUWI1p@oH)H$4Fq1!U`ogDQd;i-l zdrw`rRrz(}K#+ritZ#xBa;YSi%>d2cqVeGhx(-z2#ziu=LgKuxVzG(5hS+f@`UAg)TCII?%=R%OH zrRcTipLzC$H$VDe8&d%jJ1G$)!=~s{pUYh z_nf@$=mSz98QrquWrn`;^63*N&t4~I7x~#boley%M_W55PhC_hd$@#4ZH~SsGB^;f zlVp0op)d^o?DW*sjGQk1toi!-%Cb^`DxHq31^ULOhWdI?P-GX@B7GAsao zC?_N;ebZvSDdaVyoYE#BobXq5^a53bG)-b>^teaxDeVhP%4lsdX_=1;&7>-WasnW- zwnkY)xN8&X#!UpZ7Z(*4C=2H4Yap%fL5i0H-bqVIqKuPb7sIC02xBEJAv!!HI4Cec zhs)J0+Uv^lQe#5=G+rL=Zm!Pa^8NOv>Y|Le5FZa02Rj>UOAGmOTVqvWT6Cb=)xpN< z&TaE+xQsX6r_1TF!CIBGgDv2+8{NTC9mMByBxo{~mMWwk4-CAs#fsLhyfUS81sU6eNV;{dLC0ESH`1*%hD6Py4+OTZ&>Fdk1;5T^dkp(4Eh3?_g?qJ(~8 zaHw>uZAMQ&w7@=uS4r4LdtyrG{!M`sE|nLam^E?aAV3^caJZs3o|#X2lTnu=H~xl? zUSB?M%IG2edU3H~ihg)rfhcCw>ke%Ga`khI9vwThzbG|SF#x6D|28Oj0MT54nKxTM#O* zFCj?+nL+n&@dG+Pq>o}89#G!x{%cETjvLyKh7!60+5hDa?zc5@b@QW}KYeY0%tQqUdXyXU)&RRzgG&X@Omzvk)L2aA`)E>!lrEzrJ|tNby;cqR!vX z*VjKVJU*ka65MQlHk^YG?l#v@y6+Reez0QRgrR*gJW!Tuo$T#w?VUY!(dosc@?%FE zsZZmURAfhaUf=uOn@gvS8pu7SFu!*B(xvNGZo2r~3cL_m5wg z|A=_7;?miZM~|MoXz3ZAURuutY8r}6oFG({7wc_);D@)-Z(D(Wm7@yj0CmIm1m?;gzZZutK0$_x+KBD7IX2Ju3Hhpo8VkB6N z@7r&JfN99zMu;}%UX$=E!FdJ+fB1N~<(h{M0YO@T-mJPd5&B6?W8yX2jtBeNYTh6(G0|8$WHq zGI-3Gwwgf+QtTKIgvVz zMi-fe(Ykvd6>3X!k|KlreEow&g`VitMFwa*+(Zpb!ikTq z`tINz|CEyY)^0F7}+< zgdnw>yCx(lA1mfQCI=(isj;E{T!Y8%skQj<@ND{0XyFA(p&EBLb&!ys#0`UXUsjNr z7=;=+66W9Nna_T>^@2M-9F0I<7Nth`sN6htFNo;J?(?32k9YI%i$aJE!6TT61f17a6roC%=&c1Wf3?S4n^+9ljGeuqJUcGX%N<{z zQi!i7{u@D8fW&I#w_uhmdhOc-7XB%v4VXyxNscFmXjCdqNMe3f6K@>+B4}}_g0+Dj zp7i(|KOD9WOe|!(?5?5Cu*pxn_0uui;EW196HREX zD@l*?^K|#pMQ4`Q^X_0G7Oq@_X5;FgPuPcKR#FXY8x3Vyu>op#Prt}C8IB^B$zX01 zN-tfr@uWj&R%J72eh-0BVHktGRUX=~SX@jRHLo8y7c54Rj`b|~&NugQ~4{a#sDGk(rFI`308)lrZr^-7hp2mpu zfgb8_m(7x{zsrbE(^oyWI3fYPye?+CR!L z2dQ`st-YZW7rp-N0mvOJBovpR>+sB?#(UvY^1uuWS$J{50)+&Yr&7sMa z9_6q0(uO3;6OoFiur$Di^x2N9>Uc;4nsnUy`ch0UZ%+**s2t8_g7OlMK<+hg%&g}= z`r{%*Z4JY$RKC5TJSRR_>*XB~&GHkEG0_h}^GT#ZmTx}e94;oh+qy;TLSDt15YPD}zvOFh6c_B1beSgrhvwNTxi_r@3#`h)|G*2ZOL?7H| z2>R!%-8VG}MRmN&#Bf2N1!>iqpjgASG?b_P@%c}-UGj)AelVsQjaR6T+FM5xllwub zAIcxxxp|R%=^QUiHb1r6&p2LGJ_YfCox3BCZo*txn6 zSXOMH#!C~#TON(0T;909yGP}+sNn(rmjRRX!!Y?xdP19e5*m$Na5_n0o7>1}IkH&5bW>}=WS51A9x*7%v~-6}etZ?0qov*52wWcJ7^N~$bIs5l~;g}V37#^W|nWmtHzu}GpJCQz&K z3#Z9RYg7-E0*@EkUqh|!g(U&w-v!DB5%V~#@bg}Bh zev_9J=BM!qip@j-EV*TNbqNS3&?FW6Az_6SB}XbK2k7NwA}}hB0;7UOpp%!Uhss^) z-ohbE8rXXwSaTT^AaIWXBJjc}qN;#{v=ZW?Bf=10=&SWsQ$JkrHk=^XCj>ZYRi`UeDshDUK-xKIlblE|Wyi3^3?x_fwe``~k_Zc<8mW)5@dswmD-tcB)UcoX9zg8j8>uIl9I z=-}Y!=;T6G)mrK*=I*6uiP!Q8vxrz|YlDqaM_@r^0pef$y;ZJGjt=%p`wRz1CudYf zT^;J;dy|;LhbF^+D?)w<+L!Jr5$PcG*>Hcgo0EgRWS{2X=tb|ZMFE?i=YPF}D>V_HKi||bmiAil14uS^{O&>-= zi^4AuFjxT(^ig|xsmUQ88bM4&!%NXmL~VL{(=B|$u7&j&t{EInmMFLpz+ z?psd5oAsFHm@x%;QeG9urm|OD&=sje9x8$4P~=An>7}ofHyc4+oxw|lWG3>ugxP?ApRhn*tw!q?6zu1XMd|M0?Hd#k zpO(wvSaO)nKz%H|L0BiE;ogX935|}A2=Y~XxKS;?;3&kNl^R1{5sD>sMDu%Sgwo=| z1AM(P0RzM1()f#f)GD+PpC1~NoK;BFP8lcbtq+smR$GpNiVnfbRcjE+mk0)EVHR~T zOg+&V;TRM6Z;W9_rg&*k=S$H(KaIDyR)=?F7gf}QQ zTlz?RE4@7?Gyq|w)a>}Qyprk$BBmk4AR$ujE>DdZzS7PC0gAvv4u5vuayA*CS_OfsUwu<5;OdGx@r-nOD_tKO-86@K|Uf&Fh&|LPcMxwG&U8HfyPKWGTkDn z4=@fedeajy+qt?1ofMOR6Q{wM4)F2zq!xw8r{^QYiar~v0!a)o`$(|C^vy}b5MpAX zpw=%CaXTSF{#4D-V&alsXS;5;}9rL++lv% zV0|LbVZv|FPbsl97Q9Ehxw+D;r{zL~WdZk!@CEGjH1x!L%uI^Gy7b00cfoeyq0xnL zKY)l#DnbXcuoA6L?uU}R3>3%mf(pQs0Sgh|E%WRM6bG$Od^frbMT7i-2nW&H!74XA zl3@J;F*#~5f*Hy2(UFnS@g!`-v(SeG&%;x~Gl2Qf!qys1^ zDJ@4ZoID0Z1Q9$P0AUn7LgDw~izs4+C@~=TAbNxStNf+p3Y8wh#cB%K4B^O;CB%tY z3jA-E364JM0QIIXrX}KG`XQP``Jm%IBH8=G?W%lWdS3~8`@{A&M0<3-BDG6x%2ui6 zK1HU(GVIr-bO(WYbhDmr)}xv5$pZQ-@95Fd+xSdlse4?iPO6h?>$zAdKDxM=BIdKZ z>T)^Z(eViFB^NhHJIwZs(s?*oTRV6L%a{q`jEAxX#PT;?nVbJ9ZubDJMQ( zScGGc6#M~#CG+5S$7y|Z!4c81(IHyrJJ+w>cGe|!ElBVgmNh*Nxin&u z($Z7og1zi+n_IaBCIJB>OJgjCrU08qDDSTR!BGk6IR%BesfaSRvanGFB^L@qk;`fS6_2JxOwvbPQt-NYbI2RkS4@HAj` zG%P3vDUbb+wiyzn4b9CBaDRn*yEwY}L}kbjJc{{vt2u}?mE1yDR-oq=rG{(WT|Iyn z%8(O0d)|3kY^4-)!79N$fQrTGgr|B38Bi<)no>W+reMni~JiFfEgcV%B29ZrbPw#_`)K?!)Od>wLO#tdrujkDNKp**JuM{ z2oMovu+T)CdT|j02BKrkSroa~K|yWUiGcACY!?@(cK7g&NQ0k?rWi@;2ZZVLVdozq zm(hMIXE$v)h;(uZEYkZO$csweL6GLsBeX6K&gxK_RpJpqG4Db5qWk2B3sXDUI(mf| zX6G3F1FST|{o10G5HANCd(U9QeexXx1r-JEwbm9T2Yc9C+j(>;KrLvK3$)Z0ashgR z+=9_0NA9(BDG=i6VB_Ewnu2ejZlD6N!aHAqHaOWicTRaO(B9ZtAT_M}WFMu!$6s$O zQJfa;(`}w}2{a!i$aP4larY@c8jpAY_F!j$zs+tgaJQ+_Sm5sydzAhzHKL)sO9`6N zLB=U9N?;CmmiXIj<`P7i>|Vk@1QS$DD=LA`s>&B782Q3mxP*Ye$yB&Uvnf|DLhCs? z(AO7>Mt;ah+5`wx&f+2h0uj@~Gh~~4WgS9oON@)JHi)FA^uo~Rh5*$I@c1mwX zCps!BGCV}5QMov|!sBLOEf3%iB1T*~Xx&y&i?;vXRckAQL?(l)vJ@mdFf_`LRf65Q zXd>~w$tbR?0z6hI73LHpvQq4YBmkBHIf2ngn9}U0g^Hb$m;n4I zGmo@z*bU@d1@S$cEKZn=ap?$_q3jbdL87@5#wiunub;190CwI?BsPRzEogfIo{rWQ zx9=dvJ0gV=^wEm#hiYJCV=^Ql0^Hu(+SW_D9=IP{>&oEdQ(0X-bK=;^b2scY z*oN5Ghe;brZzBvm*u(nT`7>uOT(@%d0sM*Fe(2tkj3}-B)f0QS|G9ndiEEC2M(1Lk!jZkZ_8vZc-OdY6iE=a)71JZVtJdw1+Pe$7c2pIwT)mG~0865h}dmF1Q5 z=PsMuxN1YoE7oLH^xrQ?U8IcuUakrjk(LDAt68V3vWTh>mVzKGTZ z9YFS6Dv5~&(E(xRYJUFogBc_%ZXVi6fa#A59Tx=rp1#lV^)Flu`dKf{rTnkaCv}l{9 zt1f|kJE+V)1QPDPDpz++U}StUSh$7db!as1l0TOiaHtIuTv>Ju6zn^8tT?l1kn~0J zK7}aFtX!ZgoX-XIi%4LiHh>UJofuyi8yhE0q(N2Y`ohmk{_4Q!&G z|CU!k!F!llN-!?T{)h1l^SQbtGuqG1-rmj7ft2pFm{hWiD8b1{%P*w_bNPn%i;P9| z{)Prbv_mpSq66*SK{I174mmdNkz<<41C(j0yrR4q^#M|`kcIRDT0^gw8f)sS(0@>Z z9Xx^(5mrJQ66&+d3w#B4`0jH`E2}C>3JVHLz$B+BNLiJreq)o=R8wD>pA_tgE!hiM zQ$_!q=(A}x#s}f^ec-YzucqyR>Qjmz&I3gCr6#Glx~U#oQh>_dwu? zvl0ry{2{!%utcOJk{-4beuB|&ky@%Tg|lP)-0WbHXhRYmxHX(lGHEl*(H#IZbcn7N=8%!TqgOcH#5VKG(!i4!L)FVldZkGarT<(i=g;1M*`oD6t_){;2aeeAdCRyEdtNsvbcBG|ZZ2f}gSy4pqA*E|N?Fz5zN~~8 z1#Kr@=VogSh0}mI^w8($fyw0R>IGgB5%Nf%B=x75&`RoMEFjdy5`b)Wv9azVTYKp9 zz?<@Pb<>10eFg*3B1VXsOyZSHcCt;e05T#qPS!Rqz6QbCQ=gX+<>%q5B8wQ?5Ru2I za()57nKuVfSs1ns*0yfOe(tFcgFKL_QT3RJP|OfmT#%bvfMrQpobhVmycQ-aG~G@lHkS3DY`Jew5FBB@`W9i5a4cSP1dYz?xHSD3zdN{1j*UfSW{Y% zlbr*X4iI}o-KNT%SbtYr>_ia;3M}f94DgVdNmzNFoA#E6I7WzdPIAtS)z5kV`1kRYOo$r)X~As7dWASn8>YJK{Ex?Ce+jR_H8>a zt=7%v=K14$xBve8_Wh^LU39U4 zh}Z_|(Jk1O@&uEY5q(D({M0B{%Y08MN%t|}!y^RgZhI>d$)Y8T&&LAV86yOeJ-6bA% zd6`spuYy+3^L^75o)-YA4ANH!S~fkp&?mBFNpkg)LZurLI?2KuR8Z48B)kl8aa zGRWT#q?|BtMUqoeQ&UoqsTldST~P?hH)%?8`i!u!i0Jra&^q!9ie#p3~Y!bbP&Cc zC4B{AWifJw7*@iJi1q<|@ew?!miAuC;*3-Vh;pR~Leu9ilyXp>F&020S;gcmZD7ye zy=QW-2jw4tt%<<|B+s)26YQ>Z*Q8z925%h-!5jpZN-;o&OdbSNk(C2ZeGAPsVX(26 zvd%E!&=4`i6n;SDy$Hv4G$tg2CJ2NE){sG}3W*G)cgtJy7|2lF|OS+c85ICOV<6|QN7~szq zatj-EPKF^>wIBS@@Szi}CnPvP>kf>(l;jlUASf%yPD=#o3Je^irY4WDlm(oqsr1bW*l!Qo~y9L-P_%xce$XyfW5BE77 z|KxJZ&MPP??p@ptG%z_rYmaip*!?i#kbS;h;3)WjtdRy^Ge}mowRNU&x3*VT6z3!a zxgp8~A4XtmUUImvr<<#XHV8S(z$p=F&U(O?+ul@PRg@O)g|a0CAJh8B_SE72|8!&>*!Un zt@}XFc2q;DHk{1She|TJKf=ozC24Jv2@&dLcgGT{4{y@gL;AuIM%`VNm*DSsT@-}z zT#y*(W_9b1BkPlFQ}$t;nG}PxFb|7!T#_{2yf{B6iyOBcd}0h3aBt3hK|ypmalUq! zj>$!#;Kukkm|weTuZbq8g!UHVFCyzb#ak4mhPs=Z?dwulYk%{~bsIHlX>3;XfMSKj z`D8Mb=f?ZnUplFGqBPd$4s1tpq^BUo zGv3e9{L*D}C%@Qi(lkJXBOX8SePZe5$_6NG&zI@@Tl}B)5F1S4G z2$!1cAX|{PzPt#awztj2BfC+7$An-!4}f(SZrG_q6SHVmRwHh^wi^61PT!ZE9O>(L z{p108yvbJ5+Fw6+=Hg9zbx=%lMs{94;AA9YD^TXQlFg`z#nTgz(b%f=?NO zEdd0>G;kvGb2H)t-EN=9^iQVg4~sEaWp(B3snh2#-@thl4$iJBwbnl<41|wN$iJez z)JTo(RTNJ_bK2^`pVqm-$A0$gxeJ%CUN^U}vU65}xfX>bSp@%fNlpSD-xWCDrPM*` zeOfQFc0Q>Wj5(U*OY|+2+nhCa3Yc$3xIM^U!g>0*z6lwo%gLq88rx&~Mr25Y<6GdQ zME_{;4d76IMhx)0h580(R}Y`y*mU_+8%jrdr_st@g}4HWLL&8MfxiCc)hpNUxWNA* z>%w&D(%G|@ZoB9bDE0`eWr4oV^2+HGW(ZWofi!GZ>F4X~oXpQ1KYHq#gOOfh3 zP98aS-clWvEvW3c7UXv8?9n5q&D}!5@P(Czy0y_-n@cB-oGB6)U~io}aq^*^p+fE+ z^Gg?R*!$w79}WS*h0ABp-*D0;$`BteoH@z8ELwhXLcKh{RnylesAA%>W&87aE7fhk+<(V0~!q>VKgHb>gzlHI&j|BFM&cl z(9RCdJyiFQXgL@hf?jx2kW=>F-+%O?tu`jBR0jT$rHAeNyKRS#T@YE{WHy<8CTHn^ zs&@3)*_%#2T`eF^w}XAPq58xz$`tJ1#m3=#q~R8yIu4hRZC5LX6A_awQkHx1^r>@K zEnV195hlnqb}(~ViLN4GBxEITA+Z{(vj=v;UpDO)AbY zL|$=Ns5UpRncD%Il35}m{SW{;0$*KS+zEZH5?c)&yh0ES^ooRt;2^{};&?8$tvJmQ zEAF`&sVV6>lrV&?$XP@VAbqG-!&ZpMY7Ytq3n=@rAWR za6q#mF%u2qbiqRFKwkQeLExzo=MAB25AI9%dvk<24=Sa%>yib;6hY+@tIA~F5{VAa zBoG*l_B*sL91o~^-krear-hIceI0hORa;)OB{#;&!v?|Ej8xi1X zd)4glA+zf)c%#?^CQy%pq6Xywa|H(^(SCjB;>i=|ZmYs%VaP_NaGc;Mq{=d!-auRa z*(=uG(TMn@t}++?Wj(+hn5;PfO4-AD(>DER#`2$@ou3ftW z$DJ%Xak>Gf9L^tV$1a{2;CkoAO&fqRG7)SV?t)>-z^=cu#f@9`+9(;yqIE!cQcjGo zqs7fT&i*X@(5jhuC4e))N0AzPklx&l%!rw+SAu7h7UpGp>z1u&r~xJBJAzE1vc7fO zUL&}PnEx{wVjjvA+ zSKC`y*sG17DPF?Jn}@B1rIQb8*cp0sv$3#t)fv2QhPMM)bg{l;t1?nVjBk(j zak8=m;@IsI38)4p=wM~#q>VDrFT1?m)85ji6ZbQ`9qP5p*3woL2#A^Y*e-7etZCng zAB#_v0p4z)CBNi;TU|+7I3UR`IJtNURK(<9PkSrdPS=ch2~>7~)V5a4>JknszQK6C zAK4L|R4YRVmu5r&iwEop53gXD8a|OM3VSR1M0pe^K)lfe0~XF8Cf;vw?Dj(9W@Seo z_)uURl(XZOn2|{ZeE8f(EdARhQ3g{>$dHbn#qR~ewc3yCQNW+m~^v%z4nf|h>M z(I+as06{Cz(WTlJ3bc`vzz@*36MchHESVHk=I3Rn#p48+E7$-pTB-tLQ-P-xNCi@1 zQxOv92_iEDY=3>5ELoEhm5G%J@iE~fG)^Aad*I|%ThD;-7)V`l{K!zy92D;Pee!cW*zK<5FNff^EX16UiGdeA1|w97XaM zc$LyE-POg>*5c}^gMaPP06u^KCn#rVOk=By<<(AX$v8(SA&`HK9Bp;+UP=|^u{H=mH5<$jeXV2N#f(s&FGW4Dugs`~O#Tgr%jI5=7$-_n7 zXxPu}W=(~5M=9Z?2Mq+@z+>ZVZB2j;t96L)p`E|Sy*hZdD9uqYwzoSD-ndQBDr<~F zD4Mj?QHUMb6~0au*UfD_Lz5ZQBuX0TjU)w4YU&^bk&8Oe-SWzX%P@3fQ3iQS8OD{x zp0c10ka}8Nu%|UrbDCYY_6!E@i4SHg!6@dW#5%z0VLA_+%P02lJ!p2_UM-5T!C;hX zQeYi`buSky_(!(?x#QrOn|9!^OC1fub}&jY$*qp0*zGH3@P=$=DTZ=HE@U&pD7GZ) zdWfx?SI!>YyY06vf9yPDcCo98Q4604seP9n0t}|52qqv5NPFwxk8dxVHfjJRS+cu% z_6Rh;%bofm6=ZlVBh=~a){j@tn=phjEUE3UpFVQftc$@u7Tk1pXU1vF_kaK9lBpy5 zBNr6)*Qt|T^gp7o^YhX}98Yig;5lS$LL#UbKPU5x=b!@uCtwevP;n`7srvfv^{+iP zX&5p~0gbV|cEucII@ux>$}6Qs4X`=>%ezlar>|gx=!PW)B?t~I>F2braw6R?Zu|6w zdEY|d5dwv%C_!t!cm1mi9~la=>uoC+KZF03TuP+SrUh6Z-SGC3DZ}AGwXkuAIwlk% zzJIs5GCSP)%;xv-wOS`jaLkNuQ+7!~OytMlQ$JlfXPnx>5~ymV!AzMVpy9frM6LOr zuU}dCh^O5hD`(#rks|}k9vE|bLuqP&)!`rBTs)b4z0^qp8Q{Bjn<_Fx9Zqg~=gCK1 ztt~-sGtippF6~~qk*?={|KORK@MOcsYUmrj3!t|k*7M5tPoJOT2)z_ao6HHA27?~Pi$PhME0ADF_I1Z%B(PllfSH4$||JX6k*__ z_rn~`=$0Mp$&8Z7x2m$koy<19vy3!l18ePXw?I2F`uF)5x_ixrT3vKyVWt@GkerrT zcz?SCj*@|1_qRJ;h+BWV;>A3}F^W$npvo`6M7BBl)7wj@j*#KJZZBB>DiZGzpah$tXU7zol93y&y0q<+l}PkQ^aq$L zrZ86~Q4e-X#hK%V6$5?iW~Pj%`qXR5es>Q3@aB?7#|$s1Kv>@2ZIiL`d-7sDuk85z zrG=BnjLIw|i$szw5;+nQ-b4h$iFcmb{NA&3CXN{w2k#iU3kul?fvbw(LO2Q2g%nKk zwK(|0TT5q57&j>}A{Lehxe8!+6d6HtauUk>#HH<@y|i%3_zBb8HDqiAQe1ybQbxXk zJ}c7wK}$>xv^}wD?bEX-j+;1J7#J!fYM`jvjKV5IBEdAVF~+KI>{L{tlv}JF8v*XMiS8YIWXxNyrdc^wbd_0}4uAbcepD$Na z!D?fAj$e;kc!tEK&{5ibvj=2JnT_eGiLqh+9=2DHZ~KnQa$=Do6Xw74`Sy#>L5bN2 z!$hwC9#u#HUeT-Eq@upO3?zlDQg({37&GmO zS3lmg|Dv4_6C#NqNTCeTey&zGE}c7b`t+G|m#$klcm_nX8;KIp)f8|dPx^|U{f3U8 zwd}QzH}1RWfY?z2?D+*TKK4We`hD}Szi$5R&s_&k5m5=`HV_WsH7ntaosuGu`freXwrr+I8=L{N)c@_MWi>9152x(2vG)N;=9p z%!5pN^cgtfk=akK`tr}Sj=}IkwBAKVtehy1>j!@M^zE0PTmIBj%b$7v<+nfj;jdFx zK2Re$#asonMsxu;fu1mO()<cwr6LH~F?;qMJa)!YYkoRnrK9?7h>}Xs-rE1e>g98%j2}H}5?iINRvn5WFD!1*}%cW z$4y_dYW?o(>Nx0X?RdbjzBCg|6nSU>(o#OUY|Tbay4TR!+E|el=5+ek_nw(Gb_mY4 zmU@=qDCgl57ra0zh>$a{nd*-uWgYc#a*~{H=+{$D$UWHD+6o0RkQGE^OQo}`k+r?= z5Y8ld!7VBm)!UjXM~fb$4=CXDSd@?tcdMFOTS(8nweOqP7EPoyr^pvyias7ZZuW|g z{@|Q_^ni-7U3w5XfX2;z0r|MR@O90t2=|IpU)}LJ>(Y1trH$`5bi(`>KHGlTGbSIi zsI9Sl!eF@vF#=f3k1Tw3{k~gB|5ex03ad5B{leCdo|`=uS#Ie>=bn8Ajhae1IFSGg zHUbhEmOf$_0n|szqRETjM0T=(v@+^HC>iKKsQY7Zq$bWS?}J0MC(eC#?Jviy4}L$-9oUA}r9wmh`JLsn9~m`#7#(>&Y5IcYuYbDbxTO!= zVoeyL@=Vw(LKg5c;tu>vbfElzW529hv1rERi4!MJoiX>Zr(RtB#pc5|$VXWZig#^M z($uaG=-Pvn=#ln0v)?{_{h7rJ7c5%5^y!tat@-4KKaXB_g+5r_*wWHaksaCf0o}T= ztsSJx^bqHZyMFxW?N?uV`PDbpy!Yw)pZ_>;*20|`h0QHUvYg~Ub%gv0yQLjndoin` z3Hdr8sG`*tCwKhv?U!GCx&DWZTej^zcHZ1kL*YnuNO)O`tiEpYBhZUoI}w8D9)%7i z!}WaT@SYtzcI`WS;w&PFTr}{9LlJ2L!5*lM#==;i5>e44BJdy@>xhhDd%8>gE?o%k2m~n-6lEud>$J$&fxxxk@R-EZY$W92 zWFl}FCImQM+}T;bYY&p|j+`$w@X;j4$HvAX9xem9g2Vyn6h2d$9UtI)W#0z5KFMNv z5;}&W`{2mq2h>sohRC6eBM}Af2UHKl561dCUD?0!15qDmWOiM|(1*D`@w>p?kg8hc z)Ik81rS@t>PgE2j*|*)reH%Y~Nj!m$y`wy5^IrUX=QRi^^dP)@245X$%!ceh62)C2 zi+5gfsF&5*T^l}lX|dr6ft1*8;$ujxcH1`@dHk>$F~tmNCUBY~oiGgrRD2jxStkX% z-#WSdyLB%-K21zSNeZM~yHl6EjntSyl*kRc75Lj#Nbp4(VvQj;5J5QPMn#hFtzWNM zfz0TJ2V{{bobmK~n<;f4Wg~^NnA0^SC#T>GB`E~LtbJw{<={3E0vVf;L6$}4R5i7cqzZGr zvTx((>(;FO_`9t~ZnzTy(*k{{p)3Q45Om(Tz-M|W#fH#r86vSU1}e$V>e#QJtXi@B z=@;JqeDl#;YOpqtS{CH3+-Q$0JHLEo5o1NPBVn)k+g^aZG{*DVuJvy&Uod<2!sV+z z-+IbcN1#G`J3rd;$WLpYM2_uVro16`+Y6vf&|V5KUodsTgeh~Mdh46rS5&O1 zK*r(IT+UPGZAui*^1O2yioF26Pe#|zYo44jZp83Wljc45-lpT$I{0GI0PJ%B;|~1r z){;k&mYh*G#9dIwpv8Z7!3#NL~N-h zq>ezfeev@hv<&6l)C;@mi)dy4zWs-coBiy2zarx_I5MqhLv=o^l)c}qT0CXsfPvWU zaU{%u5mOc;o#1WXF1zU;9|LiMHqnP~ax!b0-LzAr1=*SX`u=ls#t$9Pn>Nbi6z9WIW}`KI2H~{wN&>M$z-?uJx;yOdB%*C&l$2JYw9m z$6x;J&-1PkSb}XBfy_{+GrxVba{j~-1N-8f!%>eeee3%Jx3r*)paIY}Fbz*`{_urG zj}GWRV91EElV(2t{Mro%%)OCtr5W|hGee!v{qfnWPfQ<&Grs!vANI)n7e4vpJd$D~ z{RdPD))x2uxc2$S1`ioAZt|=}PrbDE+wEr^I43vmS7b%FU)l4+yU#D0hLaom_a8iZ z`m)s<4q5o%TqT}H#VLUf=XZR!_Ql~iMdq=mUtaymkK4`ec!RhhrYW7pbmEV%*F69D zjPb(<4IowQrO&oeHf-p-oFX~a$NJ394IkscnkQd=_wx-~_n)=!0J{Urgw^4cVAmUT z{NamF%osmx(7+*MXD)wd<54SrF^xb51uxV3{Qk{T<~{w!r$22wc;<#ZlOo|IgFX&I zV!X};heiAdSvzgakb#3nOj`8HmpiZU9KuG+tWO`u>nCPE^~M)l4xGR3=oJtRo(Rbq z=|LcbC3c%2m~Fc^@VNtM!MIt^$Z5+thzhjT%(y@gtH)pdWb=`0j^1o&RON#}vg#U%tsUri z_78v=8heCo&9IH2=76#R9__2*VW3yXZWJaYI<$9HwYGyZy`8_#6YWV1_E1ERX*Oiw`20 z3<~^KT?KspI3Q*^x?rfHQAa@eat6v#0VgR&xLx>@Rz%LM`8$vPrR$gt-B zxIoVU@Yz}7A8*MBvOT)tttUF$k*c#i^!=*GWn~<1N%Xn3cRipo7M@NfdBNc7a4CjW7RJ6l}<4H40(N5bmodz>XaaaCpG#z3b* zj`E>9G;OC(7|DnB;ua?A(z!T=7bYTo4!-=2=N^NA6CZ?$x_<3TI4edzAO!ukW5b6p zKQT={1_TrH{NA76U%6nS+#MJ@y9>L%eQO!dRJ;urG?phee}K7doT(u$7q@@@5|*D~ zrbc>P+fB&mQ10L%imt#JoxV^DwRi*{*r6HOUk>^OQE6bv! z%Gw}`bt1$QomhjE$2iXc`wpHQBK!o>!)nqYa}y{7wja*%E-V9uABB+?+_V=V0&o9- zO$=v72yLDsf0M&}Jw4R^VevTRys!xKAYFd&%8yA95pYauH!vDHKET7(%@a8g=>T>v zDjvJ^&F}VJ_hh#lhjentwWqVA6HfTlA&>z_9cA!SC(K>(!LKK*{oow}u7dzz4scdG z+uGPVxVVE$%_Z^B0VAQ4e6<5m8omsc6H%}Vkssa7&gzb(4FFFMOwUZ}+`;2!J^k)a zhi+kSB&Y}eR%9{&XVKZ#%F-H7RiPlx&%>Y%pS1ABPkx84#xxnAMwE&qCeRz{Vjb{6 zZ=CT&Ir@7K8a;jK8{h1@><@J+F9w28eib+x)y>qWT5aMkPL++sZ!aa_rQ@;7QOi4ro%T? zgjiCk`@N7dO7RHpR{&rkfcTY9em!EY3ZwfRW6=ZiS22-}6Ctf|?2IL^eY)kSxd#f! zapk69rYR;VO3@5JEaPS_ef_g7$2tq(u8Dp!UQkBO90sh1jJ?G#7;N^6w`6DLcY25wNEx308|=ldf?zcYM zxXbK@V!omd1J#2M0-w9=<+bZK?^7&L)YCO_xcFnwuKMtM#X?kW;`7Rfj+s3BiRa%^ zEW(v$E;VSx_($h0Q#^(XlClji=s#rSglUS!_}xYY`VJU6O0fjL?((mJ3LH;|k`GLK z^j18HKOX>VQ!K|H9ZJPBw14a}_3tKBO^lfyDOaQkLWu5Cq#5Jw?UZL2Fh3T7goq_M zCy|tXmr@PI$8xL*)uJSla(YN5;+5_iYqf!I2GRwR6DbiHMU`Trqm)tYkr5P_NFmK# zvPxEi7=v^^y`|5sM{7wjdyjvT`F(&|m3)pVE5QO0{irf~At; zE{#-jBPn{)B&r3kLl$t5e*OF<|9VcY?cwRAM(Ra`j-l3F{xo`-ly;X}85OCF%)#5j zkapbP&)?q=X9ngORU>|y8~*l|ydNOnG%8Xxye!frvK8Nkh%;YMjPWu~Ant*;@yjTv z?Ez)-mb_aK3Wr!YBqI0MDRs&y4YD=`(h*i@BtkOj72;)RA`%b7B_*1Ri(JPa&7z=B zM5jeZ#~_{!SOQkCM%5QM36a}k-p@sS*$i45S9zvS13b|I@as+mMJ#~^7FhuUPS zk>s^OO?g-;YqxlUq`L2cs7-V=s`=}XFCDco4DAR=1%5>#Z&F5W7NTwn5l~-Rh9FQ4 z@|L3wwFvUVd;GW;0ui4RNuwT(tmpJPWqKQednkaj7&8kM%Mqu^`Kf&GDe|sdQ$kc;TSm8zd$2y&m@K7^+8O zl?W$QKA>`lY{kF*I%a~kx=T`li1dt}h4FIzJ(B7j`X}}6kf8kMQhh73;X)YG^(XYr zBI&WXM<;kTrsg442$kUCl$jPGq``5>GHkd^H7OE7dRPTa&`}c_pTW7h!8S!D%BnDl z>Dy%@^7PCtCoK{PQSwi6?NJ#CAp@hq5R)F}qYS8ANUyT>z`5H_nh>M_Mr2eSI{_&f zuJmvuD3BRM7^B^`z8Z0AAOG;j!L#O$>cB|kb4LF0I;2$)p;yv_!4PSQcqVpSz`AfX z=4B>Dy|DVzAGaPjeH~$DA@Bp|79ocj;8Xc{+5uqd#&Ogfe1(-r5B{ovV*;ka9h*GBwmbf}-Fqs661rp;fr^34y{ z|FZ4Csmm4)Ds3P^#hJMU#h4hCl~sLk`ffCxzFYABHFw={Iq&`Z`@JjeQr)SvCr2`p z%FbTln1`Qo4jI{dkBZPiB{M_|p|Ua}9vPK{C?}GUy`yZ7dan29`@I+GIp@FM^Llx5 z+~0NI)q7m;>wR5!ZWa|>f;#mfl9gRH-`L#7+0C&Re`<&8E1W zDF=>ZV3##J=e+j$+#FaaoXR+IAZ2IVrZp><%$qj$k3qdUX~1yVs1C+iZXT^W`3~?K zIbr(z#bM0WIB8EZ7Q!|6@~L?#dy>FSTOS#=c>atDqx=W<>fEMzBaC4*f$m7ntsUw& z@@Un*Tc1Jx0pq63njgG0Y-M;vq;_O3vr!J7KWoak0RKUKx^-yf(Wt(IHS!;`0M<8> znp@esxHj=@-M(wDeuMo-j2=5-(&WigG^g;BFEH0;|H1uwb#33;vuQ&Y2Wtzd5fT}j z9$|uGU?erOv~|QN&!a_~4qdwYGIu#mxXV2kOrqPg@Mz*%&(YS>OloAHtBv8H1Z9aD zIpb-={LUCt7#n-1`mT+dGXFYl?`K}jklMArlf4b|y3^OyhHoBbYUrHE_Zn|lONV^( zOzN1|wIXjk2S;s~vxUE7~g<>7k91l;OR??-)3kzF}=+6BDV_RNIt? z>0X6#Z9{!M9c`^z8f47}8$VtbHT2!1j^ zofjAaoIJ2&OH|n6MVV@up9JHKqv?|LH^?VxM^0ox$W0K~Fd$|M<1pU1boxk2;+FNR z!(qID#P$)14GeAME45>9Gfrja7eBy^mWUjrBnUr7=9HG3nGU7C#CVqD_+wAWwE?@{ zw5EM7JFkE|9MSoZJsv5E0CK18>>Stw97`9DQ_FmT&Cl}}^01;#BX!xblb}e>Bw|WS zt`}a-zkG>ph+>KRB5jvmE4pzLWOqpI2nKi9EQPHA5k(+D1jIpE89mw(xLjQ|0 zNDVVKiV5C?f_wVvCI9l_Ey@xPSt6qxL9-Ea6R3mz;QleUGVl0rN&3%-1o;Ib60D;aMc+7+Y{@D{n0!Z`git>i(*m;^{j z_69Ne18q3a@(b33aX1u{&`Xuvy32Hrg-k;$U(Ea!)Cc(X<>g+;|LZmrhNM#~p>sjv z>bPk6^ZUh@VYqzo5G|*dQYS84fhfRth08y^doAa9YQmQ2&GE_USyyifjR1RQqTAl4 zp%}#LZh`unxIQd+LC~@_aU_h0o{8^0?r?U8i@9f!?*8^rZDmrVby_vs;gT{u368Z3E=XWVw-aX83P~0A;ZV@BonM z!T87p;|6zcv)ycu} z7x%Wlev^Wu5)Pb#wYMS*^Obs47uY$NAYQ+8I&J&fkjehOZ5lgSnVHtHba16sWOi8e zt|MnJf0w4Ut8%eB4!gbLD_QA#wyc;tW>6O|S37fK1APPZ5-#rTdihUW7_l|wSk@J& zWy9Y=k;H3NohRw@;w#V@ja?l)<@Y{5&FWd38tQ5x5b7ISkRSVifN6`P;`X8h_#wYb zs-D3^;!1YLzJ#@*Ge-^T+S1Lz!dPFsmO8I~n;b@Q`=)Jr3?4IU>AH9!@spSV8w?6H z0#tm8E@vIzm#}WxoUzR8*#>x(CL>7CZ^cp&LHme6tqaFYu49p|BdC8gd z)Oege&aY1gPglaXaDVblJu5U=QcK5%ULE`Rjhh`BwRP9Q6X&pyatG2wy34E z$NB%-$-9v=%t`^IF;I=>{JbOw(-l2f*(2ezN+EdF#`xqzC!v}yR0=er4G)#cD_2!&qX4{c*WREQ80u?Zc0c_gGeP647VW*GiBtEULCv}x!B+vro-Mi z&uQV@OG3X#=TgPc&u`4s`JoXTW0UsEDuw~weLUTq#q${Wr^}xCDtbd!FE}=EZ`rZu z0RJ&l=7y|@lGO{Xnz=ezo8e}}6d}lvOlAuyWs9YPi4T-`wLunrQf;1R_v0N|I)9~{&P^$u z<6OQz%fRI-Ih#ixPl@+~JTIdi7g8{@U?UpSJUKSCZh+hn-rV89Z zQXGQN5oiQA^UodIw{zQuh~*)R7A;x1ArT613ZbL2@W^$W6ZRa!(z2-5B-coSPDnw{ z$wMhSwryG)86L4FIzIJSHWQwuYzcX#_{5#bwB>ZQ1oF3xv&+PwAaDYEr_1E7l)8Io zVgimjc>G-cO=7B1ZpN9&tKw^zBVl1KsSrh3WDh? zte+Cm;Vyr-0_`R3{EElm+An!HPQ#W7NtT_aEhu#`i5qw$y?QBm`4%}=aR5AY(OxOs ztjV(nSy|k@(!h3|;x$N;DVFo7WDyp!G!_4-Q$;I&Cdk6N_^Mx}iAKhtGDxBc5h-t$ zZ0RI*BwM}`5)I5j7q{X8W>QpR>+kRxWn2nKcYZ;n`utT`9Yb2AHxJN-#3J5*Vi_3C z7cnf@l5;U^NH9oaOYtl-!$=h&_Cj`6&PDpBu&#`(M=0BosB}i!UP!w9=X~KUre5`w z?n}w-?zP+#`w};;U9&!BXWFTYOudT#_EeF{4sBl_ws7{$Il(KT3(S%>NuIH^McUU$ zTPx>J95Hl=-^eLJk+F)EU#1v&_xi=mgNbWHrVQ`jt%Fa;o`XisT!u9o`dseO8y6B1 z%qMnl{&UWl-@3JK=GL%L^LD;NCxGrtd%t&ZD;m+svrlBuV+QQAz($v_<7_qrY>q-+GS%e0X;99hVXdq>2Wp?0@ zo^9RhA+4YmM@}=hYw-6s?6b=|$Z{P1@NRLz1$iFn-QLsH-U6d%GzYabbquAJsH3QZ zys6Yd-ho$5)`_&;TZQb=(c8_*iV`P68LuV)c@-eXQVUruZy`(2LS~&joRSbNOB#)w zt<8+|#H7J|y)|`!L12sePP2VWi&x-%hQYyM324bh)o$*LeH8uCcw)HLBzceeTQH2@}Ouu~fBHbak<} zHm88hxU?l=~`g|DIRZ{?S3mY$m)^r}}nJ z!eca|WAI~thcTbJhM~N*v*V;_?3_4LWS9mj8O9W%HPlW$g2e8j-SIJ-Hg4FkF?#dX zgqk=mv5nAic-;?^IK$pFp8rRB{)P9)42ZKnR<~V}kS` z8Tc4xo<&#lFmus2l2zydljep-M91$DD|Ape;owO>XxcAwMMbRJ1nK3RKAxshpm*!% zH+ssv(C`hcK+nu#qH#bXN^WW0$}PEh12qz)J2Ep4?@fx`h>DVGXTtQTM(=hpfA|>OEwcdXX+lepc06E+wm*4C?53zcL*^jz%1U(*r(7B~Q&~HTGq#1J;Em^i=6>vSx$g+rV ztg0+oG1ALNB%K% zP+#A!?OS;^apg29IY}N;w*Xj9R@66c=GEG#Q`a87`uy6rpJu8lzLdHRgk^-@px#2dGuNHwP?0{k?mGT&XtLp%+^5AtSm<`ZllUfl>0imM=wsrowjKgV% zGf0e$kVoNBm>v-eXG7OnyF&kG1v65VHY&dxH0i!0(UlEfk%)Dh+q=b5%U6Jsuypt)Lm(LhEs8#+a80*Er^UiK%;Rbj7#W& zu2L3;y6TNfnFrz`<_8Yy;_c?*Q%B(XPLUy+(@6>_#sGx~{JzF<&tP8fJA!>A2ug*WiyZEYL zZX1(U721r_8<)=>Ns3-RYt+EbUJXFt(*vB2{g0ZEFPPzo-3L^cv*61UzHowHueMEH ztfU0OfKv<9rY7`@T2ZkhIleb8YVouY{X2U#w6`$UWAKsW3^4%c8GZ(TK_&Xheb%Jx zjbFEP)|kOPS~qnesV9aAv+rT2;oqB0}d)8SU4v8*5?+z!D!; zpFQlg>QS%Bqx}c;?9kG^fg{7b@V!NX09B3W|DtU6BjnY;XUA5}8oJokHB|zJG8kV>o8#+(({oEXs8|J54_$7 zv9%qE@$m`UllG*N29P9;KU5Bqfv}|u<`RG?Wziw^GoOe^0E4M?KK(P?Gik7-c7{J& zjy2%RFkmDX9>TqF5~M#+eiarLXcX{Q|Gt8Ok>t{s%lTKXUM)~B;0wz!F)9(Qt0)cV zDwLG8?(wA>cllC$z5n(h%);SXDad*1$rYM(UTMD6VXM#Bm=Wr8m}AK#pR55r@u*kD zT!v7KLf4)_O_el7uZ{k~86cB!RRi=DQZj*Ui8{L_LL`~RLb*o;Y+Ng3$w;Z@RyC-4YOgs5LD2aOm=Mf%gqU=hpQBymoufQ>sCNF;($ z6zfqRD1k$AFp9nKL>Uxf3k8B(u$9`1!12tej zvT4A-g?`F8*+AgmqCY%WA)5>QOAJVjdn=m|{0l5dgR2ne1H(Zd_{W%#CRYLG0Gk~A zV{Ay9d;1+_phk>Hk9!NM0GloRZ>-3Gd;3pF0yO^T)j!t64>0BaMnnh7SY3m`2m)#j zD#6`K)FVPSArJF>;_HNXg!#4M%V^t@!hE&5MG~f4L{U95d=-o8)yg1A5XCF@r7A`7 z>O_^)&Xgl+pF9CSc7Y8b9K_lVd6Y&>mPP5W6s3PudeRiba^*d|raY}Ld!>zN%)cUe zN+pRYllL@|7ANnfUmOu&&AvHR)kPDMiNCjkM?{M%H3sK-E|mKis#kn`M@j>f z7Xa4CPNx@OtF~aKe2ti`vZDT%s;5JT_>Y>3!LdMWRZOVsRXy&|zLW27m<|in zR%NyqTE#{U8+-cn_MaTQhWM?jGiS%Dd)8LA;GcFGB=B5+;DFgxl^PqFnAy~GZzphG ztD}P9o1k+~*T4jzjX;9^DIM%)B@lHj-P(0z>G8dzX)M)H$ZKJ zsU$1BiB$U!8DXUEAfalTF>n6?BMe#>aAIIm05@2%sxsjHIV0?|faXK@gLZF;+iUPo z_+Xy}C||@;Zp+Ht8p&WEWk5bq6wvdPD%~1+V4p-FA215o@UnWh1_Ibe8I;e_=vj^r z)x`VyB!c;zP__dXV#D5_lD$5Oa6V^<3bsai*GCzikMjNp6iAiO^;tmlu@X}wh3hL( zxUe)q74#3Rt*^w|!WM!uS&LV*V?-^g&55XWS|tuYV}ysd|R~Ov+w(JLLTZemx^hNtq@#?c&msBvx5%O^r=$8d1^A zr@aO*>lijjKu8gX!%`^ULQawvR})A@&c(vW5IYX2mL+FipFNkAlb4UlfQ(#aBIx9b z7x(Yf*cSVfwauNc7O0_8u7JNKf%xKpmzYwdRQ<9v|2P!te#KUg5V- za4UgG;+3&{nw7eCHXa*WRhpQsS-jFf@%#>)Dh4YNfMdemArvp}TuP4(4eaghY>quw z{8}5ouccZ}(-SVeIbo9ELu2aodgbb<(- zI#Q^H);Dbw-(~{ZM&gDUiEO{x3d?)cH>qh<>Y@q-MGfy0>IA2g*UTB#)!o6A&PTXG zjADb;$7E0Y=tj=L%^_p@w5V4X>($i0;dg?eN)VETHbF^VdVJWVK|XG5p$rRC67coe z;Pp9)KtH>ae=-RQ4qe=3J7($}#6dodXh#vx4dx;-u*g#NE%tu055Ifvs`O!w>B+?j5SUl)WF!nlN&p?rHde&vi|-M#8z;gQ{1izDI|UZxEo z@#P-gv{%ONtB?b=nSD5J<;>rEwon|P%MoDq80`;43reqLK{Q~7$^m*DvA~GI#xS~qvj<~W z%os-Zz$zSjhx#1-WQiO%Lg)5x4V%u6kS)&{a7H)+19KYO3#iB4SOYug8n7R2ghmN#(S8`z z3p6oz(8LTF(Tdg#sh7Kr=M!k&)o{WDSPV;TMAT#LoIvxIP3gZUeDfP0v23|}szmG`XjgXJ z1698DcLQ?=?vX03T4g})#63}EPAiSWUASke)M)weyFOQ@%6%3XQ?A^bIx5^|ifwM( z2W9rMgl~e?RdK{2;XSxY79e>qh9I|FIzYU``R1vV}&NB*M;Dfb?^(C~N-) zLE%$JOPiDdu-q7P==}8u&v7IST%SKI?&v>vUFzv8C2;S0MofrWZ1nc1wD{7=U6G_m z3Xz~%$OhJK?FUa=nV6nibmt+gTj0HWtDx;~Q&%P&Id}OQ8@*}Yx>IuVdO_Z)eOs1{ zMSh|HhulEhkAKWvz2hi5j=%Zl#$T7uc`0eD@i|)O`J78xXZ~{}Ip)vlew`t-r&|lC zFjSR(Y1L=c{K&Yy>8CKG%RZNR{D8828=tDRH;*Q7+qbR>o&JZfH_HVWV$sf^Tid>) zW-nj2ZTs%z6jWOA(SktSA|?>08~HjSe8sZh+2j3uTQ#&1BDJKP)(Gtzx9vS_!kpmc zE5iBkH>>^(U0_wuqeJf@!^e!r&`o#B>&cTQ1O^Q4+qp$UyE+CeO!DQlU}$FV*0M{# zp#gytCh?QrOdLP@4-+fr#@;?%dV)*ePq*Lez9_D`wr|-K^cbu%Gf)v_Uo9QOI=1zj zw(QWAbsj6bKif?yx&h{rf@jssyio)TZ{C zP*W2PUL8bHJP9Gs_^QUMYifK$fiB_A(P10lXIn?2#?=KKM3)cJ^Wl`m0xGb}95g~{ zm$~BXz76w-k=TH2+xbYsO6>aM2bS%OV?jDGYQe}}UZRvQB74QE1!D)cZ=~3%emiaC zz)rMT&d$IR_HVs>nz>lYm$Kir^Kx^t6p|&aa5o?VsF*0Qyk57Cu>p+`@Y!Nr9oq`P zYqx`)@9;DoF8%LxJ@x{%-{S Z(EoPfPgC|cjvIil=HlNQ;Hw_}{lAB1WZVD% diff --git a/config.ru b/config.ru old mode 100755 new mode 100644 diff --git a/config/application.rb b/config/application.rb old mode 100755 new mode 100644 index 804c716..08be6a9 --- a/config/application.rb +++ b/config/application.rb @@ -2,9 +2,12 @@ require File.expand_path('../boot', __FILE__) require 'rails/all' -# If you have a Gemfile, require the gems listed there, including any gems -# you've limited to :test, :development, or :production. -Bundler.require(:default, Rails.env) if defined?(Bundler) +if defined?(Bundler) + # If you precompile assets before deploying to production, use this line + Bundler.require(*Rails.groups(:assets => %w(development test))) + # If you want your assets lazily compiled in production, use this line + # Bundler.require(:default, :assets, Rails.env) +end module Mailr class Application < Rails::Application @@ -13,47 +16,44 @@ module Mailr # -- all .rb files in that directory are automatically loaded. # Custom directories with classes and modules you want to be autoloadable. - config.autoload_paths += %W(#{config.root}/lib) + # config.autoload_paths += %W(#{config.root}/extras) # Only load the plugins named here, in the order given (default is alphabetical). # :all can be used as a placeholder for all plugins not explicitly named. - #config.plugins = [ :acts_as_notes_owner, :all ] - - config.action_view.javascript_expansions[:defaults] = %w(jquery rails) + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] # Activate observers that should always be running. # config.active_record.observers = :cacher, :garbage_collector, :forum_observer # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. - config.time_zone = 'Warsaw' - - #FIXME time zone move to config + # config.time_zone = 'Central Time (US & Canada)' # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] # config.i18n.default_locale = :de - # JavaScript files you want as :defaults (application.js is always included). - # config.action_view.javascript_expansions[:defaults] = %w(jquery rails) - # Configure the default encoding used in templates for Ruby 1.9. config.encoding = "utf-8" # Configure sensitive parameters which will be filtered from the log file. config.filter_parameters += [:password] + + # Use SQL instead of Active Record's schema dumper when creating the database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + # config.active_record.schema_format = :sql + + # Enforce whitelist mode for mass assignment. + # This will create an empty whitelist of attributes available for mass-assignment for all models + # in your app. As such, your models will need to explicitly whitelist or blacklist accessible + # parameters by using an attr_accessible or attr_protected declaration. + # config.active_record.whitelist_attributes = true + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' end end - -class ActiveSupport::BufferedLogger - def custom(desc,t) - info "\n**** #{desc} *****" - info t - info "**********************\n\n" - end -end - -class MailrException < Exception -end - - diff --git a/config/boot.rb b/config/boot.rb old mode 100755 new mode 100644 diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000..bc273ff --- /dev/null +++ b/config/database.yml @@ -0,0 +1,42 @@ +# MySQL. Versions 4.1 and 5.0 are recommended. +# +# Install the MYSQL driver +# gem install mysql2 +# +# Ensure the MySQL gem is defined in your Gemfile +# gem 'mysql2' +# +# And be sure to use new-style password hashing: +# http://dev.mysql.com/doc/refman/5.0/en/old-client.html +development: + adapter: mysql2 + encoding: utf8 + reconnect: false + database: mailr_development + pool: 5 + username: root + password: + host: localhost + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + adapter: mysql2 + encoding: utf8 + reconnect: false + database: mailr_test + pool: 5 + username: root + password: + host: localhost + +production: + adapter: mysql2 + encoding: utf8 + reconnect: false + database: mailr_production + pool: 5 + username: root + password: + host: localhost diff --git a/config/defaults.yml b/config/defaults.yml deleted file mode 100755 index 30b753d..0000000 --- a/config/defaults.yml +++ /dev/null @@ -1,53 +0,0 @@ -version: 0.8.7 - -theme: olive -locale: pl - -themes: [olive] -locales: [en, pl] -msgs_per_page_table: [15, 20, 25, 30, 35, 40, 45, 50] -msg_send_type: [html, text] -msg_image_view_as: [attachment, thumbnail] -msg_image_thumbnail_size: [128x128, 128x96, 192x192, 192x144, 256x256, 256x192] - -contacts_table_fields: [nick, first_name, last_name, email, info] -contacts_per_page: 25 - -links_table_fields: [name, url, info] -links_per_page: 30 - -servers_table_fields: [name, port, use_ssl, use_tls, for_imap, for_smtp, auth] - -msgs_per_page: 20 -msgs_refresh_time: 300 -msgs_send_type: html -msgs_update_time: 600 -msgs_inbox_view_fields: [from_addr, subject, date, size] -msgs_sent_view_fields: [to_addr, subject, date, size] - -msg_subject_length: 50 -msg_address_length: 35 -msg_search_fields: [subject, from, to] -msg_upload_dir: "tmp/uploads" - -contact_tmp_filename: contact_import - -# if encoding can not be get from data -msg_unknown_charset: ISO-8859-2 - -imap_debug: true -imap_use_ssl: 'false' -imap_port: 143 -imap_ssl_port: 993 -imap_bye_timeout_retry_seconds: 2 -imap_fetch_slice: 20 - -smtp_port: 25 - -session_encryption: true -session_password: asDD3s2@sAdc983# - -mailbox_max_parent_folder_depth: 3 - -# array of logins which only can login to application, comment it to allow everyone to login -only_can_logins: [somelogin1, somelogin2] diff --git a/config/environment.rb b/config/environment.rb old mode 100755 new mode 100644 index 9fde94f..0d0a345 --- a/config/environment.rb +++ b/config/environment.rb @@ -3,4 +3,3 @@ require File.expand_path('../application', __FILE__) # Initialize the rails application Mailr::Application.initialize! - diff --git a/config/environments/development.rb b/config/environments/development.rb old mode 100755 new mode 100644 index 5e43cf8..7c6754a --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -2,16 +2,15 @@ Mailr::Application.configure do # Settings specified here will take precedence over those in config/application.rb # In the development environment your application's code is reloaded on - # every request. This slows down response time but is perfect for development - # since you don't have to restart the webserver when you make code changes. + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. config.cache_classes = false # Log error messages when you accidentally call methods on nil. config.whiny_nils = true # Show full error reports and disable caching - config.consider_all_requests_local = false - config.action_view.debug_rjs = true + config.consider_all_requests_local = true config.action_controller.perform_caching = false # Don't care if the mailer can't send @@ -22,5 +21,17 @@ Mailr::Application.configure do # Only use best-standards-support built into browsers config.action_dispatch.best_standards_support = :builtin -end + # Raise exception on mass assignment protection for Active Record models + config.active_record.mass_assignment_sanitizer = :strict + + # Log the query plan for queries taking more than this (works + # with SQLite, MySQL, and PostgreSQL) + config.active_record.auto_explain_threshold_in_seconds = 0.5 + + # Do not compress assets + config.assets.compress = false + + # Expands the lines which load the assets + config.assets.debug = true +end diff --git a/config/environments/production.rb b/config/environments/production.rb old mode 100755 new mode 100644 index 1925999..b435507 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -1,7 +1,6 @@ Mailr::Application.configure do # Settings specified here will take precedence over those in config/application.rb - # The production environment is meant for finished, "live" apps. # Code is not reloaded between requests config.cache_classes = true @@ -9,31 +8,46 @@ Mailr::Application.configure do config.consider_all_requests_local = false config.action_controller.perform_caching = true + # Disable Rails's static asset server (Apache or nginx will already do this) + config.serve_static_assets = false + + # Compress JavaScripts and CSS + config.assets.compress = true + + # Don't fallback to assets pipeline if a precompiled asset is missed + config.assets.compile = false + + # Generate digests for assets URLs + config.assets.digest = true + + # Defaults to Rails.root.join("public/assets") + # config.assets.manifest = YOUR_PATH + # Specifies the header that your server uses for sending files - #config.action_dispatch.x_sendfile_header = "X-Sendfile" + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx - # For nginx: - # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' - - # If you have no front-end server that supports something like X-Sendfile, - # just comment this out and Rails will serve the files + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true # See everything in the log (default is :info) # config.log_level = :debug + # Prepend all log lines with the following tags + # config.log_tags = [ :subdomain, :uuid ] + # Use a different logger for distributed setups - # config.logger = SyslogLogger.new + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) # Use a different cache store in production # config.cache_store = :mem_cache_store - # Disable Rails's static asset server - # In production, Apache or nginx will already do this - config.serve_static_assets = false - - # Enable serving of images, stylesheets, and javascripts from an asset server + # Enable serving of images, stylesheets, and JavaScripts from an asset server # config.action_controller.asset_host = "http://assets.example.com" + # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + # config.assets.precompile += %w( search.js ) + # Disable delivery errors, bad email addresses will be ignored # config.action_mailer.raise_delivery_errors = false @@ -46,4 +60,8 @@ Mailr::Application.configure do # Send deprecation notices to registered listeners config.active_support.deprecation = :notify + + # Log the query plan for queries taking more than this (works + # with SQLite, MySQL, and PostgreSQL) + # config.active_record.auto_explain_threshold_in_seconds = 0.5 end diff --git a/config/environments/test.rb b/config/environments/test.rb old mode 100755 new mode 100644 index 1dafbaa..124f77e --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -2,12 +2,16 @@ Mailr::Application.configure do # Settings specified here will take precedence over those in config/application.rb # The test environment is used exclusively to run your application's - # test suite. You never need to work with it otherwise. Remember that + # test suite. You never need to work with it otherwise. Remember that # your test database is "scratch space" for the test suite and is wiped - # and recreated between test runs. Don't rely on the data there! + # and recreated between test runs. Don't rely on the data there! config.cache_classes = true - # Log error messages when you accidentally call methods on nil. + # Configure static asset server for tests with Cache-Control for performance + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Log error messages when you accidentally call methods on nil config.whiny_nils = true # Show full error reports and disable caching @@ -25,10 +29,8 @@ Mailr::Application.configure do # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test - # Use SQL instead of Active Record's schema dumper when creating the test database. - # This is necessary if your schema can't be completely dumped by the schema dumper, - # like if you have constraints or database-specific column types - # config.active_record.schema_format = :sql + # Raise exception on mass assignment protection for Active Record models + config.active_record.mass_assignment_sanitizer = :strict # Print deprecation notices to the stderr config.active_support.deprecation = :stderr diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb old mode 100755 new mode 100644 diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb old mode 100755 new mode 100644 index 9e8b013..5d8d9be --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -8,3 +8,8 @@ # inflect.irregular 'person', 'people' # inflect.uncountable %w( fish sheep ) # end +# +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb old mode 100755 new mode 100644 diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb old mode 100755 new mode 100644 index dbec6e1..6b8acd1 --- a/config/initializers/secret_token.rb +++ b/config/initializers/secret_token.rb @@ -4,4 +4,4 @@ # If you change this key, all old signed cookies will become invalid! # Make sure the secret is at least 30 characters and all random, # no regular words or you'll be exposed to dictionary attacks. -Mailr::Application.config.secret_token = 'f07b5830035b1471d3c008debde5c152077eaff97f0dfcebaf265fe96db24dc5af46eb27e149e3077df89d7dbe2eb088ab7ef7b0e8b496d7ca005e31f6dc3017' +Mailr::Application.config.secret_token = '014b3111b40bea36f7c0ab07ff2ae820f71b19bb67970baf1f7b44dc1555aae92a68395db757548058884dd4884b1267823d4d44a783160a595e2668d2e904a8' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb old mode 100755 new mode 100644 diff --git a/config/initializers/show_exceptions.rb b/config/initializers/show_exceptions.rb deleted file mode 100755 index 741bb94..0000000 --- a/config/initializers/show_exceptions.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'action_dispatch/middleware/show_exceptions' - -module ActionDispatch - class ShowExceptions - private - def render_exception_with_template(env, exception) - body = InternalController.action(rescue_responses[exception.class.name]).call(env) - log_error(exception) - body - rescue - render_exception_without_template(env, exception) - end - - alias_method_chain :render_exception, :template - end -end diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..da4fb07 --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters :format => [:json] +end + +# Disable root element in JSON by default. +ActiveSupport.on_load(:active_record) do + self.include_root_in_json = false +end diff --git a/config/locales/en.yml b/config/locales/en.yml old mode 100755 new mode 100644 index 0ca154d..179c14c --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,63 +1,5 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + en: - activerecord: - attributes: - prefs: - theme: Theme - locale: Locale - msgs_per_page: Messages per page - msg_send_type: Message send format - contact: - compose_to_selected: Compose to selected - delete_selected: Delete selected - modifying: Modifying contact - creating_new: Creating new contact - create_new: Create new contact - contacts: Contacts - contact: Contact - no_selected: No contact selected - total_entries: Total contacts entries - no_entries: No contacts - was_created: Contact was created - are_you_sure_to_delete_contact: Are You sure to delete contact? - - prefs: - prefs: Preferences - - folder: - folders: Folders - no_shown: No folders shown - parent: Parent folder - to_create: Folder to create - to_delete: Folder to delete - shown: Shown folders - emptybin: Empty - current: Current folder - no_selected: No folder selected - to_create_empty: No folder name - max_depth: Maximum folder depth reached - can_not_create: Can not create folder - was_created: Folder was created - to_delete_empty: No folder to delete - can_not_delete: Can not delete folder - was_deleted: Folder was deleted - - message: - messages: Messages - - compose: - compose: Compose - - user: - login_failure: Login failure. Bad email or password - logged_out: User was logged out - setup_done: Setup done. Please login in - - must_be_unique: must be unique - some_add_info: some additional information - example: example - refresh: Refresh - create: Create - delete: Delete - show_hide: Show/Hide - mailr: Mailr - save: Save + hello: "Hello world" diff --git a/config/locales/en.yml.old b/config/locales/en.yml.old deleted file mode 100755 index 3c785e8..0000000 --- a/config/locales/en.yml.old +++ /dev/null @@ -1,160 +0,0 @@ -en: - activerecord: - attributes: - prefs: - theme: Theme - locale: Locale - msgs_per_page: Messages per page - msg_send_type: Message send format - contact: - compose_to_selected: Compose to selected - delete_selected: Delete selected - modifying: Modifying contact - creating_new: Creating new contact - create_new: Create new contact - contacts: Contacts - contact: Contact - no_selected: No contact selected - total_entries: Total contacts entries - no_entries: No contacts - was_created: Contact was created - are_you_sure_to_delete_contact: Are You sure to delete contact? - - prefs: - prefs: Preferences - - folder: - folders: Folders - no_shown: No folders shown - parent: Parent folder - to_create: Folder to create - to_delete: Folder to delete - shown: Shown folders - emptybin: Empty - current: Current folder - no_selected: No folder selected - - message: - messages: Messages - - compose: - compose: Compose - - must_be_unique: must be unique - some_add_info: some additional information - example: example - refresh: Refresh - create: Create - delete: Delete - show_hide: Show/Hide - - mailr: Mailr - email: Email - password: Password - log_in: Log In - wrong_email_or_password: Wrong email or password specified. - mailbox: Mailbox - empty: Empty - logout: Logout - filters: Filters - search: Search - search_txt: Search in message field - operations: Operations - operations_txt: Operations on marked messages - copy: copy - move: move - mark_read: mark read - mark_unread: mark unread - destination_txt: Destination for move and copy operations - for: for - to: To - subject: Subject - date: Date - size: Size - from: From - show_all: Show all - pages: Pages - first: First - prev: Prev - next: Next - last: Last - back_to_list: Back to list - back_to_message: Back to message - reply: Reply - forward: Forward - delete: Delete - view_source: View source - add_filter: Add filter - cc: CC - bcc: BCC - send: Send - choose_address: Choose addresses from contacts - compose_txt: Compose new mail - attachment: Attachment - add: Add - first_name: First name - last_name: Last name - send_type: Send type message - messages_per_page: Messages per page - check_external_mail: Check external mail? - check_external_mail_txt: Note that by selecting this option webmail system will try to log you using your original email on a local server. - save: Save - cancel: Cancel - add_one_contact: Add one contact - add_multiple: Add multiple - name: name - add_folder: Add folder - total_messages: Total messages - unseen: Unseen - please_login: Log in - site_link: https://github.com/lmanolov/mailr - user_logged_out: User was logged out - unknown_user_title: Unknown user - unknown_user_flash: Your email identifier was not found in database - unknown_user_login: Go to login page and try to login once more. - unknown_user_setup: Go to setup page and do the setup of Your mail account. - setup_title: Setup - server_name: Server name - setup_done: Setup done. Please log in - login_failure: Login failure. Bad email or password - general_error: General error - unspecified_error: Unspecified error occured - imap_error: IMAP Error - folder_to_create: Folder to create - subscribe_unsubscribe: (Un)Subscribe - folders_subscribed_selected: Folders subscribed - messages: Messages - folder_to_create_empty: Folder to create is empty - folder_was_created: Folder was created - can_not_create_folder: Can not create folder - folder_max_depth: Maximum folder depth reached - folder_to_delete_empty: Folder to delete empty - folder_was_deleted: Folder was deleted - can_not_delete_folder: Can not delete folder - system_folder: System folder - refresh_folders: Refresh folders - show_hide: Show/Hide - page_not_found: Page not found - bytes: Bytes - kbytes: Kb - mbytes: MB - previous_page: Previous page - next_page: Next page - copy: Copy - move: Move - checked_messages: checked messages - to: to - to_folder: folder - set_read: Set read - set_unread: Set unread - search: Search - in_message_field: in message field - string: string - total_messages: Total messages - no_messages_in: No messages in folder - no_subject: No subject - no_messages_selected: No messages selected - - - - diff --git a/config/locales/es-ES.yml b/config/locales/es-ES.yml deleted file mode 100755 index 6fb97d8..0000000 --- a/config/locales/es-ES.yml +++ /dev/null @@ -1,91 +0,0 @@ -es-ES: - mailr: Mailr - email: Email - password: Contraseña - log_in: Iniciar sesión - wrong_email_or_password: Email o contraseña incorrecta - mailbox: Buzon de Correo - folders: Carpetas - folder: Carpeta - empty: Vaciar - logout: Cerrar sesión - compose: Redactar - preferences: Opciones - filters: Filtros - contacts: Contactos - search: Buscar - search_txt: Buscar en el campo - refresh: Refrescar - operations: Operaciones - operations_txt: Operaciones en mensajes marcados - delete: borrar - copy: copiar - move: mover - junk: Basura - sent: Enviados - inbox: Bandeja de Entrada - trash: Basura - drafts: Borradores - mark_read: marcar como leido - mark_unread: marcar comono leido - destination_txt: Destino para operaciones de copiado y movido - for: para - to: Para - subject: Asunto - date: Fecha - size: Tamaño - from: De - show_all: Mostrar todos - pages: Páginas - first: Primero - prev: Previo - next: Siguiente - last: Último - back_to_list: Volver a la lista - back_to_message: Volver al mensaje - reply: Responder - forward: Reenviar - view_source: Ver fuente - add_filter: Agregar filtro - cc: CC - bcc: BCC - send: Enviar - choose_address: Elegir dirección desde contactos - choose: Elegir - compose_txt: Componer nuevo correo - groups: Grupos - attachment: Adjunto - add: Agregar - first_name: Nombre - last_name: Apellido - send_type: Enviar mensaje tipo - messages_per_page: Mensajes por página - check_external_mail: Comprobar correos externos? - check_external_mail_txt: Note that by selecting this option webmail system will try to log you using your original email on a local server. - save: Guardar - save_and_add_another: Guardar y agregar otro - cancel: Cancelar - add_one_contact: Agregar un contacto - add_multiple: Agregar multiples - add_multiple_contacts: Agregar multiples contactos - name: nombre - add_folder: Agregar carpeta - total_messages: Mensajes totales - unseen: No leidos - edit_create_contact: Editar o crear contacto - back_to_contacts: Volver a contactos - email_exists: Una cuenta con ese correo electrónico ya existe. - delete_contact_question: "Desea borrar este contacto? {{name}} - {{email}}" - validate_fname_error: Por favor, ingrese un nombre (2 a 20 caracteres) - validate_lname_error: Por favor, ingrese un apellido (2 a 20 caracteres) - validate_email_error: Por favor, ingrese una dirección email válida. - contact_cannot_be_changed: El email del contacto no puede ser cambiado - csv_file: Archivo separado por comas(CSV) - tab_file: Archivo separado por tabulaciones - select_file: Selecionar archivo - import: Importar - back_to_folders: Volver a carpetas - add_edit_folder: agregar/editar - user_logged_out: Sesión cerrada correctamente - please_login: Por favor, inicie sesión - want_to_empty_trash_message: ¿Realmente quieres vaciar la papelera? diff --git a/config/locales/pl.yml b/config/locales/pl.yml deleted file mode 100755 index f54c166..0000000 --- a/config/locales/pl.yml +++ /dev/null @@ -1,227 +0,0 @@ -pl: - date: - day_names: [Niedziela, PoniedziaÅ‚ek, Wtorek, Åšroda, Czwartek, PiÄ…tek, Sobota] - abbr_day_names: [Ni, Po, Wt, Åšr, Cz, Pi, So] - month_names: [~, StyczeÅ„, Luty, Marzec, KwiecieÅ„, Maj, Czerwiec, Lipiec, SierpieÅ„, WrzesieÅ„, Październik, Listopad, GrudzieÅ„] - abbr_month_names: [~, Sty, Lut, Mar, Kwi, Maj, Czer, Lip, Sier, Wrze, Paź, Lis, Grudz] - order: [ :year, :month, :day ] - activerecord: - errors: - messages: - blank: "nie może być pust(a/e/y) " - too_short: "za krótki(e) (min. %{count} znak(i/ów)) " - too_long: "za dÅ‚ugi(e) (max. %{count} znak(i/ów)) " - invalid: "ma niepoprawny format " - not_unique: "musi być unikalny " - taken: "musi być unikalny" - record_invalid: NieprawidÅ‚owy format danych - models: - contact: Kontakt - server: Serwer - link: Sznurek - attributes: - link: - name: Nazwa - url: Adres - info: Informacje - contact: - nick: Pseudonim - first_name: ImiÄ™ - last_name: Nazwisko - email: E-mail - info: Informacje dodatkowe - prefs: - theme: Temat - locale: Ustawienia jÄ™zykowe - msgs_per_page: Ilość wiadomoÅ›ci wyÅ›wietlanych na stronie - msg_send_type: Format wysyÅ‚anej wiadomoÅ›ci - msg_image_view_as: Prezentuj obraz jako - msg_image_thumbnail_size: Rozmiar miniaturki obrazu - message: - from_addr: Od - to_addr: Do - subject: Temat - size: Rozmiar - date: Data - body: Treść - cc_addr: Dw - bcc_addr: UDw - user: - email: E-mail - password: HasÅ‚o - first_name: ImiÄ™ - last_name: Nazwisko - domain: Domena - server: - name: Nazwa serwera - port: Port - use_ssl: SSL? - use_tls: TLS? - for_imap: IMAP? - for_smtp: SMTP? - auth: Metoda autoryzacji - - contact: - compose_to_selected: Napisz do wybranych - delete_selected: UsuÅ„ wybrane - modifying: Modyfikacja kontaktu - creating_new: Nowy kontakt - create_new: Utwórz nowy kontakt - contacts: Kontakty - contact: Kontakt - no_selected: Nie wybrano żadnego kontaktu - total_entries: Liczba kontaktów - no_entries: Brak kontaktów - was_created: Kontakt zostaÅ‚ utworzony - are_you_sure_to_delete_contact: Czy na pewno chcesz usunąć kontakt? - export: Export - import: Import - were_imported: Kontakty zostaÅ‚y zaimportowane - format_error: NieprawidÅ‚owy format kontaktu - - link: - link: Sznurek - links: Sznurki - create_new: Utwórz nowy sznurek - no_entries: Brak sznurków - total_entries: Liczba sznurków - delete_selected: UsuÅ„ wybrane - - prefs: - prefs: Ustawienia - look: WyglÄ…d - identity: Tożsamość - servers: Serwery - were_saved: Ustawienia zostaÅ‚y zapisane - thumbnail: Miniaturka - attachment: ZaÅ‚Ä…cznik - - folder: - folder: Folder - folders: Foldery - no_shown: Nie prezentowany jest żaden folder. Skonfiguruj widok folderów w zakÅ‚adce - parent: Folder nadrzÄ™dny - to_create: Folder do utworzenia - to_delete: Folder do usuniÄ™cia - shown: WyÅ›wietlane foldery - emptybin: Opróżnij - current: Folder bieżący - no_selected: Nie wybrano żadnego folderu - to_create_empty: Nie podano nazwy folderu - max_depth: OsiÄ…gniÄ™to maksymalne zagnieżdzenie fodlderów - can_not_create: Nie można utworzyć folderu - was_created: Folder zostaÅ‚ utworzony - to_delete_empty: Nie wybrano folderu do usuniÄ™cia - can_not_delete: Nie można usunąć folderu - was_deleted: Folder zostaÅ‚ usuniÄ™ty - to_folder: do folderu - system: Folder systemowy - not_all_configured: Nie wszystkie systemowe foldery zostaÅ‚y skonfigurowane - inbox_name: Odebrane - sent_name: WysÅ‚ane - trash_name: Kosz - drafts_name: Roboczy - not_configured_drafts: Folder Roboczy nie zostaÅ‚ przypisany - not_configured_sent: Folder WysÅ‚any nie zostaÅ‚ przypisany - not_configured_trash: Folder Kosz nie zostaÅ‚ przypisany - not_configured_inbox: Folder Odebrane nie zostaÅ‚ przypisany - show_hide: Pokaż/Ukryj - refresh: OdÅ›wież - - message: - messages: WiadomoÅ›ci - no_selected: Nie wybrano żadnej wiadomoÅ›ci - total: Liczba wszystkich wiadomoÅ›ci - checked: zaznaczone wiadomoÅ›ci - set_read: Ustaw jako przeczytane - set_unread: Ustaw jako nieprzeczytane - no_in: Nie ma żadnych wiadomoÅ›ci w bieżącym folderze - no_subject: Brak tematu - no_content: Wiadomość nie zawiera treÅ›ci - attachments: ZaÅ‚Ä…czniki - content: Treść wiadomoÅ›ci - header_source: Nagłówek wiadomoÅ›ci - show_header: Pokaż nagłówek - edit: Edycja - images: Obrazy - delete: UsuÅ„ zaznaczone - move: PrzenieÅ› - copy: Skopiuj - trash: UsuÅ„ zaznaczone - no_date: Brak daty - - compose: - compose: Nowa wiadomość - new_message: Nowa wiadomość - not_contain_at: ",jeżeli nie zawiera znaku @, adres bÄ™dzie szukany w kontaktach" - subject_of_the_message: Temat wiadomoÅ›ci - write_your_message_here: Tu wpisz swojÄ… wiadomość - was_sent: Wiadomość zostaÅ‚a wysÅ‚ana - was_saved: Wiadomość zostaÅ‚a zapisana w katalogu roboczym - not_configured_smtp: Brak konfiguracji SMTP - select_file: Wybierz plik - delete_marked: UsuÅ„ zaznaczone - upload: WyÅ›lij plik - sendout: WyÅ›lij - save: Zapisz w katalogu roboczym - - show: - reply: Odpowiedz - show_header: Pokaż nagłówek - delete: UsuÅ„ - reply_string: "Odp: " - trash: UsuÅ„ - - user: - login_failure: Nieudane logowanie. Podano bÅ‚Ä™dny e-mail lub hasÅ‚o. - logged_out: Użytkownik wylogowany - setup_done: Konfiguracja zakoÅ„czona. ProszÄ™ siÄ™ zalogować. - please_login: Logowanie - unknown_title: Nieznany użytkownik - unknown_flash: Twój identyfikator użytkownika nie zostaÅ‚ odnaleziony w bazie - unknown_login: Idź do strony logowania i zaloguj sie jeszcze raz - unknown_setup: Idź do strony konfiguracyjnej i skonfiguruj swój dostÄ™p - setup: Konfiguracja - login: Logowanie - only_can_logins: Podany identyfikator użytkownika nie uprawnia do korzystania z aplikacji - logout: Wyloguj - has_no_domain: Użytkownik nie ma ustawionej domeny - - internal: - imap_error: BÅ‚Ä…d protokoÅ‚u IMAP - unspecified_error: Nieoczekiwany bÅ‚Ä…d - not_found: Nie znaleziono żądanej strony - internal_server_error: BÅ‚Ä…d aplikacji - unprocessable_entity: BÅ‚Ä…d procesowania - about: Informacje o programie - current_version: Aktualna wersja - general_error: BÅ‚Ä…d aplikacji - - common: - false_answer: Nie - true_answer: Tak - file_format_error: BÅ‚Ä™dny format pliku - no_tmp_dir: Brak katalogu tymczasowego - must_be_unique: musi być unikalny - some_add_info: jakieÅ› dodatkowe informacje - example: przykÅ‚ad - create: Utwórz - delete: UsuÅ„ - mailr: MailR - save: Zapisz - copy: Skopiuj - move: PrzenieÅ› - to: do - previous_page: Poprzednia - next_page: NastÄ™pna - bytes: B - kbytes: kB - mbytes: MB - site_link: https://github.com/lmanolov/mailr - no_data: Brak danych - download: Pobierz - view: Pokaż - version: Wersja - set: Ustaw - no_file_chosen: Nie wybrano żadnego pliku - calendar: Kalendarz diff --git a/config/routes.rb b/config/routes.rb old mode 100755 new mode 100644 index fb486e6..2b33cf1 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,79 +1,58 @@ Mailr::Application.routes.draw do + # The priority is based upon order of creation: + # first created -> highest priority. - namespace :prefs do - post "update_look" - post "update_identity" - post "update_servers" - end - match "prefs/look" => "prefs#look", :as => :prefs_look - match "prefs/identity" => "prefs#identity", :as => :prefs_identity - match "prefs/servers" => "prefs#servers", :as => :prefs_servers + # Sample of regular route: + # match 'products/:id' => 'catalog#view' + # Keep in mind you can assign values other than :controller and :action - namespace :contacts do - post "ops" - get "export" - end - match "/external" => "contacts#external", :as => :contacts_external + # Sample of named route: + # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase + # This route can be invoked with purchase_url(:id => product.id) - resources :contacts + # Sample resource route (maps HTTP verbs to controller actions automatically): + # resources :products - namespace :links do - post "ops" - get "export" - end - #match "/external" => "contacts#external", :as => :contacts_external + # Sample resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + # Sample resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end - resources :links + # Sample resource route with more complex sub-resources + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', :on => :collection + # end + # end - namespace :folders do - post "create" - post "delete" - post "system" - post "show_hide" - post "refresh" - get "refresh_status" - get "emptybin" - end - match "/folders/index" => 'folders#index', :as => :folders - match "/folders/select/:id" => 'folders#select', :as => :folders_select + # Sample resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end - namespace :internal do - get "error" - get "imaperror" - get "loginfailure" - get "onlycanlogins" - end - match "/internal/about" => 'internal#about' ,:as => :about + # You can have the root of your site routed with "root" + # just remember to delete public/index.html. + # root :to => 'welcome#index' - match "/messages_ops/single" => 'messages_ops#single' - match "/messages_ops/multi" => 'messages_ops#multi' - match "/messages_ops/sendout_or_save" => 'messages_ops#sendout_or_save' ,:as =>:sendout_or_save - match "/messages_ops/upload" => 'messages_ops#upload',:as => :upload - match "/messages_ops/edit/:id" => 'messages_ops#edit', :as => :edit - match "/messages_ops/composed" => 'messages_ops#composed', :as => :composed + # See how all your routes lay out with "rake routes" - root :to => "messages#index" - - match "/messages/index" => 'messages#index', :as => :messages - match "/messages/compose" => 'messages#compose', :as => :compose - match "/messages/compose/:cid" => 'messages#compose', :as => :compose_contact - match "/messages/show/:id" => 'messages#show' - match "/messages/html_body/:id" => 'messages#html_body' , :as => :html_body - match "/messages/attachment/:id/:idx" => 'messages#attachment', :as => :attachment_download - - namespace :user do - get "logout" - post "authenticate" - post "create" - get "login" - get "setup" - get "unknown" - end - match "/user/setup/:login" => 'user#setup' - - themes_for_rails - - #match '*a', :to => 'internal#not_found' - #match ':controller(/:action(/:id(.:format)))' + # This is a legacy wild controller route that's not recommended for RESTful applications. + # Note: This route will make all actions in every controller accessible via GET requests. + # match ':controller(/:action(/:id))(.:format)' end diff --git a/db/migrate/20110723115402_create_users.rb b/db/migrate/20110723115402_create_users.rb deleted file mode 100755 index 2232901..0000000 --- a/db/migrate/20110723115402_create_users.rb +++ /dev/null @@ -1,15 +0,0 @@ -class CreateUsers < ActiveRecord::Migration - def self.up - create_table :users do |t| - t.string :email - t.string :first_name - t.string :last_name - - t.timestamps - end - end - - def self.down - drop_table :users - end -end diff --git a/db/migrate/20110723153214_create_servers.rb b/db/migrate/20110723153214_create_servers.rb deleted file mode 100755 index e69c4aa..0000000 --- a/db/migrate/20110723153214_create_servers.rb +++ /dev/null @@ -1,14 +0,0 @@ -class CreateServers < ActiveRecord::Migration - def self.up - create_table :servers do |t| - t.string :name - t.string :port - t.references :user - t.timestamps - end - end - - def self.down - drop_table :servers - end -end diff --git a/db/migrate/20110724125806_create_prefs.rb b/db/migrate/20110724125806_create_prefs.rb deleted file mode 100755 index f6c6564..0000000 --- a/db/migrate/20110724125806_create_prefs.rb +++ /dev/null @@ -1,14 +0,0 @@ -class CreatePrefs < ActiveRecord::Migration - def self.up - create_table :prefs do |t| - t.string :theme - t.string :locale - t.references :user - t.timestamps - end - end - - def self.down - drop_table :prefs - end -end diff --git a/db/migrate/20110724134917_add_params_to_prefs.rb b/db/migrate/20110724134917_add_params_to_prefs.rb deleted file mode 100755 index 4c6c323..0000000 --- a/db/migrate/20110724134917_add_params_to_prefs.rb +++ /dev/null @@ -1,11 +0,0 @@ -class AddParamsToPrefs < ActiveRecord::Migration - def self.up - add_column :prefs, :msgs_per_page, :string - add_column :prefs, :msg_send_type, :string - end - - def self.down - remove_column :prefs, :msg_send_type - remove_column :prefs, :msgs_per_page - end -end diff --git a/db/migrate/20110725210440_add_use_ssl_to_servers.rb b/db/migrate/20110725210440_add_use_ssl_to_servers.rb deleted file mode 100755 index d6e51bb..0000000 --- a/db/migrate/20110725210440_add_use_ssl_to_servers.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddUseSslToServers < ActiveRecord::Migration - def self.up - add_column :servers, :use_ssl, :boolean - end - - def self.down - remove_column :servers, :use_ssl, :boolean - end -end diff --git a/db/migrate/20110727070907_create_folders.rb b/db/migrate/20110727070907_create_folders.rb deleted file mode 100755 index fba11a5..0000000 --- a/db/migrate/20110727070907_create_folders.rb +++ /dev/null @@ -1,17 +0,0 @@ -class CreateFolders < ActiveRecord::Migration - def self.up - create_table :folders do |t| - t.string :name - t.string :delim - t.string :attribs - t.integer :messages - t.integer :new - t.references :user - t.timestamps - end - end - - def self.down - drop_table :folders - end -end diff --git a/db/migrate/20110727074214_rename_attribs_in_folders.rb b/db/migrate/20110727074214_rename_attribs_in_folders.rb deleted file mode 100755 index 8d3f701..0000000 --- a/db/migrate/20110727074214_rename_attribs_in_folders.rb +++ /dev/null @@ -1,11 +0,0 @@ -class RenameAttribsInFolders < ActiveRecord::Migration - def self.up - rename_column :folders,:attribs,:haschildren - change_column :folders,:haschildren,:boolean - end - - def self.down - change_column :folders,:haschildren,:string - rename_column :folders,:haschildren,:attribs - end -end diff --git a/db/migrate/20110727081504_change_new_in_folder.rb b/db/migrate/20110727081504_change_new_in_folder.rb deleted file mode 100755 index 32bea01..0000000 --- a/db/migrate/20110727081504_change_new_in_folder.rb +++ /dev/null @@ -1,9 +0,0 @@ -class ChangeNewInFolder < ActiveRecord::Migration - def self.up - rename_column :folders,:new,:unseen - end - - def self.down - rename_column :folders,:unseen,:new - end -end diff --git a/db/migrate/20110727105240_add_column_to_folder.rb b/db/migrate/20110727105240_add_column_to_folder.rb deleted file mode 100755 index 43bf3e9..0000000 --- a/db/migrate/20110727105240_add_column_to_folder.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddColumnToFolder < ActiveRecord::Migration - def self.up - add_column :folders, :parent, :string - end - - def self.down - remove_column :folders, :parent - end -end diff --git a/db/migrate/20110727132531_add_column_msgs_to_folder.rb b/db/migrate/20110727132531_add_column_msgs_to_folder.rb deleted file mode 100755 index b82b390..0000000 --- a/db/migrate/20110727132531_add_column_msgs_to_folder.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddColumnMsgsToFolder < ActiveRecord::Migration - def self.up - add_column :folders, :msgs_updated_at, :datetime - end - - def self.down - remove_column :folders, :msgs_updated_at - end -end diff --git a/db/migrate/20110727134352_create_messages.rb b/db/migrate/20110727134352_create_messages.rb deleted file mode 100755 index 6d106a3..0000000 --- a/db/migrate/20110727134352_create_messages.rb +++ /dev/null @@ -1,23 +0,0 @@ -class CreateMessages < ActiveRecord::Migration - def self.up - create_table :messages ,:id => false do |t| - t.integer :folder_id - t.integer :user_id - t.string :msg_id - t.string :from - t.string :to - t.string :subject - t.string :content_type - t.integer :uid - t.integer :size - t.boolean :unread - t.datetime :date - - t.timestamps - end - end - - def self.down - drop_table :messages - end -end diff --git a/db/migrate/20110731185416_add_shown_to_folders.rb b/db/migrate/20110731185416_add_shown_to_folders.rb deleted file mode 100755 index b273b51..0000000 --- a/db/migrate/20110731185416_add_shown_to_folders.rb +++ /dev/null @@ -1,11 +0,0 @@ -class AddShownToFolders < ActiveRecord::Migration - def self.up - add_column :folders, :shown, :boolean - add_column :folders, :alter_name, :string - end - - def self.down - remove_column :folders, :alter_name - remove_column :folders, :shown - end -end diff --git a/db/migrate/20110803115924_rename_m_essages_in_folder.rb b/db/migrate/20110803115924_rename_m_essages_in_folder.rb deleted file mode 100755 index a56b1e4..0000000 --- a/db/migrate/20110803115924_rename_m_essages_in_folder.rb +++ /dev/null @@ -1,9 +0,0 @@ -class RenameMEssagesInFolder < ActiveRecord::Migration - def self.up - rename_column :folders,:messages,:total - end - - def self.down - rename_column :folders,:total,:messages - end -end diff --git a/db/migrate/20110804130051_rename_unseen_in_message.rb b/db/migrate/20110804130051_rename_unseen_in_message.rb deleted file mode 100755 index cbc909b..0000000 --- a/db/migrate/20110804130051_rename_unseen_in_message.rb +++ /dev/null @@ -1,9 +0,0 @@ -class RenameUnseenInMessage < ActiveRecord::Migration - def self.up - rename_column :messages, :unread, :unseen - end - - def self.down - rename_column :messages, :unseen, :unread - end -end diff --git a/db/migrate/20110810073021_create_contacts.rb b/db/migrate/20110810073021_create_contacts.rb deleted file mode 100755 index 9121cef..0000000 --- a/db/migrate/20110810073021_create_contacts.rb +++ /dev/null @@ -1,17 +0,0 @@ -class CreateContacts < ActiveRecord::Migration - def self.up - create_table :contacts do |t| - t.string :nick - t.string :email - t.string :first_name - t.string :last_name - t.string :info - t.references :user - t.timestamps - end - end - - def self.down - drop_table :contacts - end -end diff --git a/db/migrate/20110816093648_rename_from_column_in_messages.rb b/db/migrate/20110816093648_rename_from_column_in_messages.rb deleted file mode 100755 index c191d46..0000000 --- a/db/migrate/20110816093648_rename_from_column_in_messages.rb +++ /dev/null @@ -1,11 +0,0 @@ -class RenameFromColumnInMessages < ActiveRecord::Migration - def self.up - rename_column :messages, :from, :from_addr - rename_column :messages, :to, :to_addr - end - - def self.down - rename_column :messages, :from_addr, :from - rename_column :messages, :to_addr, :to - end -end diff --git a/db/migrate/20110816120258_remove_msgs_update_from_messages.rb b/db/migrate/20110816120258_remove_msgs_update_from_messages.rb deleted file mode 100755 index 9582b84..0000000 --- a/db/migrate/20110816120258_remove_msgs_update_from_messages.rb +++ /dev/null @@ -1,9 +0,0 @@ -class RemoveMsgsUpdateFromMessages < ActiveRecord::Migration - def self.up - remove_column :folders, :msgs_updated_at - end - - def self.down - add_column :folders, :msgs_updated_at, :datetime - end -end diff --git a/db/migrate/20110830070509_add_options_to_servers.rb b/db/migrate/20110830070509_add_options_to_servers.rb deleted file mode 100755 index 40f19c0..0000000 --- a/db/migrate/20110830070509_add_options_to_servers.rb +++ /dev/null @@ -1,13 +0,0 @@ -class AddOptionsToServers < ActiveRecord::Migration - def self.up - add_column :servers,:use_tls,:boolean - add_column :servers,:for_imap,:boolean - add_column :servers,:for_smtp,:boolean - end - - def self.down - remove_column :servers,:use_tls - remove_column :servers,:for_imap - remove_column :servers,:for_smtp - end -end diff --git a/db/migrate/20110830074142_add_domain_to_users.rb b/db/migrate/20110830074142_add_domain_to_users.rb deleted file mode 100755 index 12f7cb9..0000000 --- a/db/migrate/20110830074142_add_domain_to_users.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddDomainToUsers < ActiveRecord::Migration - def self.up - add_column :users, :domain, :string - end - - def self.down - remove_column :users, :domain - end -end diff --git a/db/migrate/20110831090041_add_type_to_folders.rb b/db/migrate/20110831090041_add_type_to_folders.rb deleted file mode 100755 index 25af170..0000000 --- a/db/migrate/20110831090041_add_type_to_folders.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddTypeToFolders < ActiveRecord::Migration - def self.up - add_column :folders, :sys, :integer - end - - def self.down - remove_column :folders, :sys - end -end diff --git a/db/migrate/20110901120826_add_auth_to_servers.rb b/db/migrate/20110901120826_add_auth_to_servers.rb deleted file mode 100755 index 89a0dd9..0000000 --- a/db/migrate/20110901120826_add_auth_to_servers.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddAuthToServers < ActiveRecord::Migration - def self.up - add_column :servers, :auth, :string - end - - def self.down - remove_column :servers, :auth - end -end diff --git a/db/migrate/20110908094506_add_msg_params_to_prefs.rb b/db/migrate/20110908094506_add_msg_params_to_prefs.rb deleted file mode 100755 index 6c533f0..0000000 --- a/db/migrate/20110908094506_add_msg_params_to_prefs.rb +++ /dev/null @@ -1,11 +0,0 @@ -class AddMsgParamsToPrefs < ActiveRecord::Migration - def self.up - add_column :prefs, :msg_image_view_as, :string - add_column :prefs, :msg_image_thumbnail_size, :string - end - - def self.down - remove_column :prefs, :msg_image_thumbnail_size - remove_column :prefs, :msg_image_view_as - end -end diff --git a/db/migrate/20110927091830_rename_email_in_user.rb b/db/migrate/20110927091830_rename_email_in_user.rb deleted file mode 100755 index 11a9215..0000000 --- a/db/migrate/20110927091830_rename_email_in_user.rb +++ /dev/null @@ -1,9 +0,0 @@ -class RenameEmailInUser < ActiveRecord::Migration - def self.up - rename_column :users, :email, :login - end - - def self.down - rename_column :users, :login, :email - end -end diff --git a/db/migrate/20120109191128_create_links.rb b/db/migrate/20120109191128_create_links.rb deleted file mode 100644 index 2d78a01..0000000 --- a/db/migrate/20120109191128_create_links.rb +++ /dev/null @@ -1,17 +0,0 @@ -class CreateLinks < ActiveRecord::Migration - def self.up - create_table :links do |t| - t.integer :user_id - t.integer :lgroup_id - t.string :name - t.string :url - t.string :info - - t.timestamps - end - end - - def self.down - drop_table :links - end -end diff --git a/db/schema.rb b/db/schema.rb deleted file mode 100755 index ee3579e..0000000 --- a/db/schema.rb +++ /dev/null @@ -1,103 +0,0 @@ -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended to check this file into your version control system. - -ActiveRecord::Schema.define(:version => 20110927091830) do - - create_table "contacts", :force => true do |t| - t.string "nick" - t.string "email" - t.string "first_name" - t.string "last_name" - t.string "info" - t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" - end - - create_table "events", :force => true do |t| - t.integer "user_id" - t.integer "priority" - t.text "description" - t.string "category" - t.datetime "start" - t.datetime "stop" - t.boolean "allday" - t.datetime "created_at" - t.datetime "updated_at" - end - - create_table "folders", :force => true do |t| - t.string "name" - t.string "delim" - t.boolean "haschildren" - t.integer "total" - t.integer "unseen" - t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" - t.string "parent" - t.boolean "shown" - t.string "alter_name" - t.integer "sys" - end - - create_table "messages", :id => false, :force => true do |t| - t.integer "folder_id" - t.integer "user_id" - t.string "msg_id" - t.string "from_addr" - t.string "to_addr" - t.string "subject" - t.string "content_type" - t.integer "uid" - t.integer "size" - t.boolean "unseen" - t.datetime "date" - t.datetime "created_at" - t.datetime "updated_at" - end - - create_table "prefs", :force => true do |t| - t.string "theme" - t.string "locale" - t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" - t.string "msgs_per_page" - t.string "msg_send_type" - t.string "msg_image_view_as" - t.string "msg_image_thumbnail_size" - end - - create_table "servers", :force => true do |t| - t.string "name" - t.string "port" - t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" - t.boolean "use_ssl" - t.boolean "use_tls" - t.boolean "for_imap" - t.boolean "for_smtp" - t.string "auth" - end - - create_table "users", :force => true do |t| - t.string "login" - t.string "first_name" - t.string "last_name" - t.datetime "created_at" - t.datetime "updated_at" - t.string "domain" - end - -end diff --git a/db/seeds.rb b/db/seeds.rb old mode 100755 new mode 100644 index 664d8c7..d34dfa0 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -4,4 +4,4 @@ # Examples: # # cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) -# Mayor.create(:name => 'Daley', :city => cities.first) +# Mayor.create(:name => 'Emanuel', :city => cities.first) diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP old mode 100755 new mode 100644 diff --git a/themes/olive/javascripts/.gitkeep b/lib/assets/.gitkeep old mode 100755 new mode 100644 similarity index 100% rename from themes/olive/javascripts/.gitkeep rename to lib/assets/.gitkeep diff --git a/lib/imap_folder.rb b/lib/imap_folder.rb deleted file mode 100755 index a8788e1..0000000 --- a/lib/imap_folder.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'net/imap' - -module ImapFolderModule - -class IMAPFolder - - attr_reader :utf7_name - attr_reader :delim - attr_reader :attribs - attr_reader :name - attr_accessor :messages - attr_accessor :unseen - - def initialize(utf7_name,delim,attribs) - @utf7_name = utf7_name - @name = Net::IMAP.decode_utf7 utf7_name - @delim = delim - @attribs = attribs - end - -end - -end diff --git a/lib/imap_mailbox.rb b/lib/imap_mailbox.rb deleted file mode 100755 index aa84eb9..0000000 --- a/lib/imap_mailbox.rb +++ /dev/null @@ -1,207 +0,0 @@ -require 'net/imap' -require 'imap_folder' - -module ImapMailboxModule - -class IMAPError < RuntimeError -end - -class IMAPMailbox - - attr_reader :connected - attr_accessor :sfolder - attr_accessor :logger - - def initialize(logger,debug) - @sfolder = '' - @folders = {} - @connected = false - @logger = logger - Net::IMAP.debug = true - end - - def connect(server,username,password) - - server_name = server.name - server_port = server.port - server_use_ssl = server.use_ssl - - unless @connected - begin - @imap = Net::IMAP.new(server_name, server_port, server_use_ssl) - rescue Net::IMAP::ByeResponseError => bye - begin - System.sleep($defaults["imap_bye_timeout_retry_seconds"]) - @imap = Net::IMAP.new(server_name, server_port, server_use_ssl) - rescue Exception => ex - raise IMAPError, ex.inspect - end - rescue Exception => ex - raise IMAPError, ex.inspect - end - @username = username - begin - @imap.login(username, password) - @connected = true - rescue Exception => ex - raise IMAPError, ex.inspect - end - end - end - - def disconnect - if @connected - @imap.logout - @imap.disconnect - @imap = nil - @connected = false - end - end - - def folders - @folders = {} - folders = @imap.list('', '*') - if folders - folders.each do |f| - folder = ImapFolderModule::IMAPFolder.new(f.name,f.delim,f.attr) - status = @imap.status(folder.name, ["MESSAGES", "UNSEEN"]) - folder.messages = status["MESSAGES"] - folder.unseen = status["UNSEEN"] - @folders[folder.name] = folder - end - end - @folders - end - - def create_folder(name) - begin - @imap.create(Net::IMAP.encode_utf7(name)) - rescue Exception => e - raise e - end - end - - def fetch_uids - begin - uids = [] - imap_uids = @imap.fetch(1..-1, "UID") - imap_uids.each do |u| - uids << u.attr['UID'] - end - return uids - rescue Exception => e - raise e - end - end - - def delete_folder(name) - begin - @imap.delete(Net::IMAP.decode_utf7(name)) - rescue Exception => e - raise e - end - end - - def fetch(range,attribs) - begin - @imap.fetch(range,attribs) - rescue Exception => e - raise e - end - end - - def uid_fetch(range,attribs) - begin - @imap.uid_fetch(range,attribs) - rescue Exception => e - raise e - end - end - - def set_folder(folder_name) - begin - if folder_name != @sfolder - @imap.select(folder_name) - @sfolder = folder_name - end - rescue Exception => e - raise e - end - end - - def status - begin - @imap.status(@sfolder, ["MESSAGES", "RECENT", "UNSEEN"]) - rescue Exception => e - raise e - end - end - - def fetch_body(uid) - begin - uid_fetch(uid,"BODY[]").first.attr["BODY[]"] - rescue Exception => e - raise e - end - end - - def delete_message(uid) - begin - @imap.uid_store(uid.to_i, "+FLAGS", :Deleted) - rescue Exception => e - raise e - end - end - - def expunge - begin - @imap.expunge - rescue Exception => e - raise e - end - end - - def set_read(uid) - begin - @imap.uid_store(uid.to_i, "+FLAGS", :Seen) - rescue Exception => e - raise e - end - end - - def set_unread(uid) - begin - @imap.uid_store(uid.to_i, "-FLAGS", :Seen) - rescue Exception => e - raise e - end - end - - def copy_message(uid,dest_folder) - begin - @imap.uid_copy(uid.to_i, dest_folder) - rescue Exception => e - raise e - end - end - - def move_message(uid,dest_folder) - begin - copy_message(uid,dest_folder) - delete_message(uid) - rescue Exception => e - raise e - end - end - - def append(folder,message,flags) - begin - @imap.append(folder,message,flags) - rescue Exception => e - raise e - end - end - -end - -end diff --git a/lib/imap_message.rb b/lib/imap_message.rb deleted file mode 100755 index 44ca826..0000000 --- a/lib/imap_message.rb +++ /dev/null @@ -1,91 +0,0 @@ -require 'net/imap' - -module ImapMessageModule - -class IMAPAddress - - attr_accessor :name,:mailbox,:host - - def initialize() - name = "" - mailbox = "" - host = "" - end - - def self.from_address(addr) - a = IMAPAddress.new() - a.name = addr.name || "" - a.mailbox = addr.mailbox || "" - a.host = addr.host || "" - a - end - - def to_db - name + "#" + mailbox + "#" + host - end - - def self.parse(addr) - a = IMAPAddress.new() - f = addr.split("#") - a.name = f[0] - a.mailbox = f[1] - a.host = f[2] - a - end - - def friendly - if name.empty? - mailbox + host - else - name - end - end - -end - -class IMAPMessage - - @@fetch_attr = ['RFC822.HEADER', 'FLAGS', 'UID', 'RFC822.SIZE'] - #@@fetch_attr = ['RFC822','FLAGS', 'UID', 'RFC822.SIZE'] - -# attr_accessor :envelope,:uid,:content_type,:size,:unseen,:from,:message_id,:to,:from,:subject,:date -# -# def initialize -# end -# -# def self.fromImap(message) -# m = IMAPMessage.new -# envelope = message.attr['ENVELOPE'] -# m.envelope = envelope -# m.message_id = envelope.message_id -# m.date = envelope.date -# m.subject = envelope.subject -# m.uid = message.attr['UID'] -# #content_type = m.attr['BODYSTRUCTURE'].multipart? ? 'multipart' : 'text' -# m.content_type = message.attr['BODYSTRUCTURE'].media_type.downcase -# m.size = message.attr['RFC822.SIZE'] -# m.unseen = !(message.attr['FLAGS'].member? :Seen) -# m.from = IMAPAddress.from_address(envelope.from[0]) -# m.to = IMAPAddress.from_address(envelope.to[0]) -# m -# end -# - def self.fetch_attr - @@fetch_attr - end -# -# def from_to_db -# from.to_db -# end -# -# def to_to_db -# to.to_db -# end - -end - - - - -end - diff --git a/lib/imap_session.rb b/lib/imap_session.rb deleted file mode 100755 index 13354fb..0000000 --- a/lib/imap_session.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'net/imap' -require 'imap_mailbox' - -module ImapSessionModule - -def open_imap_session - begin - @mailbox ||= ImapMailboxModule::IMAPMailbox.new(logger,$defaults["imap_debug"]) - @mailbox.connect(@current_user.servers.primary_for_imap,@current_user.login, @current_user.get_cached_password(session)) - rescue Exception => ex - redirect_to :controller => 'internal', :action => 'loginfailure' - end -end - -def close_imap_session - return if @mailbox.nil? or not(@mailbox.connected) - @mailbox.disconnect - @mailbox = nil -end - -def select_imap_folder - @mailbox.set_folder(@current_folder.full_name) if not @current_folder.nil? -end - -end diff --git a/lib/mail_plugin_extension.rb b/lib/mail_plugin_extension.rb deleted file mode 100755 index 3f71520..0000000 --- a/lib/mail_plugin_extension.rb +++ /dev/null @@ -1,114 +0,0 @@ -require 'iconv' - -module Mail - - class Message - - def decoded_and_charseted - begin - if not charset.upcase == 'UTF-8' - charset.nil? ? source_charset = $defaults["msg_unknown_charset"] : source_charset = charset - charseted = Iconv.iconv("UTF-8",source_charset,decoded).first - else - charseted = decoded - end - rescue - decoded - end - - end - - end - - class Part - - attr_accessor :idx,:parent_id - - def isImage? - not (content_type =~ /^image/).nil? - end - - def isText? - not (content_type =~ /^text\/plain/).nil? - end - - def isHtml? - not (content_type =~ /^text\/html/).nil? - end - - def getSize - body.raw_source.size - end - - def decoded_and_charseted - begin - if not charset.upcase == 'UTF-8' - charset.nil? ? source_charset = $defaults["msg_unknown_charset"] : source_charset = charset - charseted = Iconv.iconv("UTF-8",source_charset,decoded).first - else - charseted = decoded - end - rescue - decoded - end - - end - - - end - - class Field - def charseted - begin - if value =~ /\=\?([\w\-]+)\?/ - source_charset = $1 - if source_charset.upcase == 'UTF-8' - return decoded - end - else - source_charset = $defaults["msg_unknown_charset"] - end - Iconv.iconv("UTF-8",source_charset,decoded).first - rescue - decoded - end - end - end - - class Address - def charseted - begin - if value =~ /\=\?([\w\-]+)\?/ - source_charset = $1 - if source_charset.upcase == 'UTF-8' - return decoded - end - else - source_charset = $defaults["msg_unknown_charset"] - end - Iconv.iconv("UTF-8",source_charset,decoded).first - rescue - decoded - end - end - end - - class Part - def filename_charseted - begin - if content_type =~ /\=\?([\w\-]+)\?/ - source_charset = $1 - if source_charset.upcase == 'UTF-8' - return filename - end - else - source_charset = $defaults["msg_unknown_charset"] - end - Iconv.iconv("UTF-8",source_charset,filename).first - rescue - filename - end - end - end - -end diff --git a/lib/tasks/.gitkeep b/lib/tasks/.gitkeep old mode 100755 new mode 100644 diff --git a/lib/tasks/clear_db.rake b/lib/tasks/clear_db.rake deleted file mode 100755 index b12913c..0000000 --- a/lib/tasks/clear_db.rake +++ /dev/null @@ -1,23 +0,0 @@ -namespace :db do - - desc "Removes all users data from db" - task :remove_all_data => :environment do - users = User.all - puts "Number of users in db: #{users.size}" - puts "Deleting data....." - User.destroy_all - puts "Done" - end - - desc "Deletes users data (messages,folders,contacts)" - task :remove_users_data => :environment do - users = User.all - users.each do |u| - puts "Removing folders & messages for user #{u.email}" - u.folders.destroy_all - puts "Removing contacts for user #{u.email}" - u.contacts.destroy_all - end - end - -end diff --git a/themes/olive/stylesheets/.gitkeep b/log/.gitkeep old mode 100755 new mode 100644 similarity index 100% rename from themes/olive/stylesheets/.gitkeep rename to log/.gitkeep diff --git a/public/404.html b/public/404.html old mode 100755 new mode 100644 diff --git a/public/422.html b/public/422.html old mode 100755 new mode 100644 diff --git a/public/500.html b/public/500.html old mode 100755 new mode 100644 index b80307f..f3648a0 --- a/public/500.html +++ b/public/500.html @@ -20,7 +20,6 @@