From 406abd7c4df1ace2cd3e4e17159e8941a2e8c0c4 Mon Sep 17 00:00:00 2001
From: Tristan Zur
Date: Wed, 10 Jun 2015 20:55:53 +0200
Subject: Initial import
---
.gitignore | 1 +
.htaccess | 82 +
LICENSE | 340 +
README | 85 +
application/Bootstrap.php | 67 +
application/config/config.php | 156 +
bin/.htaccess | 8 +
bin/README | 5 +
index.php | 116 +
installer/cli.php | 121 +
installer/database_config.php | 46 +
installer/index.php | 40 +
installer/init_var.php | 12 +
installer/install.css | 92 +
installer/install.sql | 433 ++
installer/installer.php | 270 +
installer/views/already_installed.html.php | 5 +
installer/views/db_not_empty.html.php | 8 +
installer/views/environment_errors.html.php | 20 +
installer/views/get_db_info.html.php | 89 +
installer/views/install.html.php | 24 +
installer/views/invalid_db_info.html.php | 6 +
installer/views/invalid_db_version.html.php | 5 +
installer/views/missing_db.html.php | 13 +
installer/views/oops.html.php | 10 +
installer/views/success.html.php | 23 +
installer/web.php | 94 +
lib/flowplayer.controls.swf.php | 31 +
lib/flowplayer.js | 228 +
lib/flowplayer.pseudostreaming-byterange.swf.php | 31 +
lib/flowplayer.pseudostreaming.swf.php | 31 +
lib/flowplayer.swf.php | 47 +
lib/gallery.ajax.js | 15 +
lib/gallery.common.js | 253 +
lib/gallery.dialog.js | 221 +
lib/gallery.in_place_edit.js | 75 +
lib/gallery.panel.js | 100 +
lib/gallery.show_full_size.js | 58 +
lib/images/Galerie-Logo.png | Bin 0 -> 4047 bytes
lib/images/apple-touch-icon.png | Bin 0 -> 4441 bytes
lib/images/favicon.ico | Bin 0 -> 1150 bytes
lib/images/logo.png | Bin 0 -> 10222 bytes
lib/jquery-ui.js | 328 +
lib/jquery.MultiFile.js | 11 +
lib/jquery.autocomplete.css | 49 +
lib/jquery.autocomplete.js | 13 +
lib/jquery.cookie.js | 96 +
lib/jquery.form.js | 645 ++
lib/jquery.jeditable.js | 32 +
lib/jquery.js | 19 +
lib/jquery.localscroll.js | 9 +
lib/jquery.scrollTo.js | 11 +
lib/json2-min.js | 39 +
lib/superfish/css/superfish.css | 136 +
lib/superfish/images/arrows-ffffff-rtl.png | Bin 0 -> 378 bytes
lib/superfish/images/arrows-ffffff.png | Bin 0 -> 244 bytes
lib/superfish/images/shadow.png | Bin 0 -> 1698 bytes
lib/superfish/js/superfish.js | 121 +
lib/swfobject.js | 4 +
lib/uploadify/cancel.png | Bin 0 -> 603 bytes
lib/uploadify/jquery.uploadify.min.js | 37 +
lib/uploadify/uploadify.allglyphs.swf.php | 47 +
lib/uploadify/uploadify.css | 58 +
lib/uploadify/uploadify.fla | Bin 0 -> 125952 bytes
lib/uploadify/uploadify.swf.php | 47 +
lib/yui/base-min.css | 7 +
lib/yui/reset-fonts-grids.css | 7 +
modules/akismet/controllers/admin_akismet.php | 67 +
modules/akismet/helpers/akismet.php | 193 +
modules/akismet/helpers/akismet_event.php | 70 +
modules/akismet/helpers/akismet_installer.php | 28 +
modules/akismet/module.info | 7 +
modules/akismet/views/admin_akismet.html.php | 18 +
modules/akismet/views/admin_akismet_stats.html.php | 11 +
modules/calendarview/controllers/calendarview.php | 296 +
modules/calendarview/css/calendarview_calendar.css | 59 +
modules/calendarview/css/calendarview_menu.css | 3 +
modules/calendarview/helpers/calendarview.php | 48 +
.../calendarview/helpers/calendarview_block.php | 72 +
.../calendarview/helpers/calendarview_event.php | 99 +
.../helpers/calendarview_installer.php | 40 +
.../calendarview/helpers/calendarview_theme.php | 25 +
.../calendarview/images/ico-view-calendarview.png | Bin 0 -> 4191 bytes
modules/calendarview/libraries/PHPCalendar.php | 87 +
modules/calendarview/module.info | 7 +
.../views/calendarview_sidebar.html.php | 9 +
.../calendarview/views/calendarview_year.html.php | 95 +
.../views/user_profile_calendarview.html.php | 86 +
modules/comment/controllers/admin_comments.php | 60 +
.../comment/controllers/admin_manage_comments.php | 144 +
modules/comment/controllers/comments.php | 81 +
modules/comment/css/comment.css | 45 +
modules/comment/helpers/comment.php | 71 +
modules/comment/helpers/comment_block.php | 39 +
modules/comment/helpers/comment_event.php | 97 +
modules/comment/helpers/comment_installer.php | 118 +
modules/comment/helpers/comment_rest.php | 74 +
modules/comment/helpers/comment_rss.php | 92 +
modules/comment/helpers/comment_theme.php | 46 +
modules/comment/helpers/comments_rest.php | 62 +
modules/comment/helpers/item_comments_rest.php | 50 +
modules/comment/js/comment.js | 45 +
modules/comment/models/comment.php | 194 +
modules/comment/module.info | 7 +
.../views/admin_block_recent_comments.html.php | 23 +
modules/comment/views/admin_comments.html.php | 7 +
.../comment/views/admin_manage_comments.html.php | 46 +
.../views/admin_manage_comments_queue.html.php | 157 +
modules/comment/views/comment.html.php | 25 +
modules/comment/views/comment.mrss.php | 43 +
modules/comment/views/comments.html.php | 56 +
.../comment/views/user_profile_comments.html.php | 20 +
.../downloadalbum/controllers/downloadalbum.php | 300 +
modules/downloadalbum/css/downloadalbum_menu.css | 3 +
.../downloadalbum/helpers/downloadalbum_event.php | 40 +
.../downloadalbum/helpers/downloadalbum_theme.php | 24 +
.../images/ico-view-downloadalbum.png | Bin 0 -> 4125 bytes
modules/downloadalbum/module.info | 7 +
.../controllers/admin_downloadfullsize.php | 93 +
.../controllers/downloadfullsize.php | 37 +
.../downloadfullsize/css/downloadfullsize_menu.css | 3 +
.../helpers/downloadfullsize_block.php | 51 +
.../helpers/downloadfullsize_event.php | 57 +
.../helpers/downloadfullsize_theme.php | 26 +
.../images/ico-view-downloadfullsize.png | Bin 0 -> 4125 bytes
modules/downloadfullsize/module.info | 7 +
.../views/admin_downloadfullsize.html.php | 5 +
.../views/downloadfullsize_block.html.php | 18 +
modules/exif/controllers/exif.php | 33 +
modules/exif/helpers/exif.php | 167 +
modules/exif/helpers/exif_event.php | 39 +
modules/exif/helpers/exif_installer.php | 45 +
modules/exif/helpers/exif_task.php | 88 +
modules/exif/helpers/exif_theme.php | 38 +
modules/exif/lib/exif.php | 1135 ++++
modules/exif/lib/makers/canon.php | 426 ++
modules/exif/lib/makers/fujifilm.php | 247 +
modules/exif/lib/makers/gps.php | 218 +
modules/exif/lib/makers/nikon.php | 411 ++
modules/exif/lib/makers/olympus.php | 189 +
modules/exif/lib/makers/panasonic.php | 292 +
modules/exif/lib/makers/sanyo.php | 158 +
modules/exif/models/exif_key.php | 21 +
modules/exif/models/exif_record.php | 21 +
modules/exif/module.info | 7 +
modules/exif/views/exif_dialog.html.php | 33 +
modules/exif/views/exif_sidebar.html.php | 6 +
modules/familygallery/controllers/login.php.backup | 10 +
.../familygallery/helpers/familygallery_event.php | 20 +
modules/familygallery/module.info | 7 +
modules/forge/libraries/Forge.php | 323 +
modules/forge/libraries/Form_Checkbox.php | 83 +
modules/forge/libraries/Form_Checklist.php | 92 +
modules/forge/libraries/Form_Dateselect.php | 138 +
modules/forge/libraries/Form_Dropdown.php | 78 +
modules/forge/libraries/Form_Group.php | 89 +
modules/forge/libraries/Form_Hidden.php | 25 +
modules/forge/libraries/Form_Input.php | 555 ++
modules/forge/libraries/Form_Password.php | 23 +
modules/forge/libraries/Form_Phonenumber.php | 98 +
modules/forge/libraries/Form_Radio.php | 22 +
modules/forge/libraries/Form_Submit.php | 30 +
modules/forge/libraries/Form_Textarea.php | 31 +
modules/forge/libraries/Form_Upload.php | 191 +
modules/g2_import/controllers/admin_g2_import.php | 136 +
modules/g2_import/controllers/g2.php | 121 +
modules/g2_import/data/broken-image.gif | Bin 0 -> 1589 bytes
modules/g2_import/helpers/g2_import.php | 1375 ++++
modules/g2_import/helpers/g2_import_event.php | 40 +
modules/g2_import/helpers/g2_import_installer.php | 50 +
modules/g2_import/helpers/g2_import_task.php | 225 +
.../g2_import/libraries/G2_Import_Exception.php | 39 +
modules/g2_import/models/g2_map.php | 21 +
modules/g2_import/module.info | 7 +
modules/g2_import/views/admin_g2_import.html.php | 150 +
modules/gallery/config/cache.php | 50 +
modules/gallery/config/cookie.php | 48 +
modules/gallery/config/database.php | 23 +
modules/gallery/config/locale.php | 51 +
modules/gallery/config/log_file.php | 29 +
modules/gallery/config/routes.php | 32 +
modules/gallery/config/session.php | 66 +
modules/gallery/config/upload.php | 36 +
modules/gallery/config/user_agents.php | 25 +
modules/gallery/controllers/admin.php | 94 +
.../controllers/admin_advanced_settings.php | 57 +
modules/gallery/controllers/admin_dashboard.php | 97 +
modules/gallery/controllers/admin_graphics.php | 50 +
modules/gallery/controllers/admin_languages.php | 135 +
modules/gallery/controllers/admin_maintenance.php | 243 +
modules/gallery/controllers/admin_modules.php | 119 +
modules/gallery/controllers/admin_movies.php | 72 +
modules/gallery/controllers/admin_sidebar.php | 69 +
.../gallery/controllers/admin_theme_options.php | 120 +
modules/gallery/controllers/admin_themes.php | 80 +
.../gallery/controllers/admin_upgrade_checker.php | 57 +
modules/gallery/controllers/albums.php | 207 +
modules/gallery/controllers/combined.php | 96 +
modules/gallery/controllers/file_proxy.php | 174 +
modules/gallery/controllers/items.php | 43 +
modules/gallery/controllers/l10n_client.php | 179 +
modules/gallery/controllers/login.php | 90 +
modules/gallery/controllers/logout.php | 29 +
modules/gallery/controllers/movies.php | 91 +
modules/gallery/controllers/packager.php | 191 +
modules/gallery/controllers/permissions.php | 91 +
modules/gallery/controllers/photos.php | 91 +
modules/gallery/controllers/quick.php | 144 +
modules/gallery/controllers/reauthenticate.php | 105 +
modules/gallery/controllers/upgrader.php | 118 +
modules/gallery/controllers/uploader.php | 133 +
modules/gallery/controllers/user_profile.php | 108 +
modules/gallery/controllers/welcome_message.php | 30 +
modules/gallery/css/debug.css | 28 +
modules/gallery/css/gallery.css | 213 +
modules/gallery/css/l10n_client.css | 206 +
modules/gallery/css/upgrader.css | 183 +
modules/gallery/helpers/MY_html.php | 91 +
modules/gallery/helpers/MY_num.php | 54 +
modules/gallery/helpers/MY_remote.php | 167 +
modules/gallery/helpers/MY_url.php | 92 +
modules/gallery/helpers/MY_valid.php | 26 +
modules/gallery/helpers/access.php | 758 +++
modules/gallery/helpers/ajax.php | 31 +
modules/gallery/helpers/album.php | 126 +
modules/gallery/helpers/auth.php | 134 +
modules/gallery/helpers/batch.php | 40 +
modules/gallery/helpers/block_manager.php | 115 +
modules/gallery/helpers/data_rest.php | 115 +
modules/gallery/helpers/dir.php | 40 +
modules/gallery/helpers/encoding.php | 35 +
modules/gallery/helpers/gallery.php | 233 +
modules/gallery/helpers/gallery_block.php | 145 +
modules/gallery/helpers/gallery_error.php | 30 +
modules/gallery/helpers/gallery_event.php | 621 ++
modules/gallery/helpers/gallery_graphics.php | 183 +
modules/gallery/helpers/gallery_installer.php | 844 +++
modules/gallery/helpers/gallery_rss.php | 76 +
modules/gallery/helpers/gallery_task.php | 826 +++
modules/gallery/helpers/gallery_theme.php | 151 +
modules/gallery/helpers/graphics.php | 546 ++
modules/gallery/helpers/identity.php | 247 +
modules/gallery/helpers/item.php | 433 ++
modules/gallery/helpers/item_rest.php | 210 +
modules/gallery/helpers/items_rest.php | 96 +
modules/gallery/helpers/json.php | 31 +
modules/gallery/helpers/l10n_client.php | 323 +
modules/gallery/helpers/l10n_scanner.php | 178 +
modules/gallery/helpers/legal_file.php | 310 +
modules/gallery/helpers/locales.php | 264 +
modules/gallery/helpers/log.php | 108 +
modules/gallery/helpers/message.php | 109 +
modules/gallery/helpers/model_cache.php | 42 +
modules/gallery/helpers/module.php | 594 ++
modules/gallery/helpers/movie.php | 282 +
modules/gallery/helpers/photo.php | 145 +
modules/gallery/helpers/random.php | 48 +
modules/gallery/helpers/site_status.php | 132 +
modules/gallery/helpers/system.php | 113 +
modules/gallery/helpers/task.php | 113 +
modules/gallery/helpers/theme.php | 113 +
modules/gallery/helpers/tree_rest.php | 92 +
modules/gallery/helpers/upgrade_checker.php | 105 +
modules/gallery/helpers/user_profile.php | 55 +
modules/gallery/helpers/xml.php | 35 +
modules/gallery/hooks/init_gallery.php | 56 +
modules/gallery/images/ffmpeg.png | Bin 0 -> 2888 bytes
modules/gallery/images/gallery.png | Bin 0 -> 22178 bytes
modules/gallery/images/gd.png | Bin 0 -> 5531 bytes
modules/gallery/images/graphicsmagick.png | Bin 0 -> 1486 bytes
modules/gallery/images/imagemagick.jpg | Bin 0 -> 20337 bytes
modules/gallery/images/missing_album_cover.jpg | Bin 0 -> 4453 bytes
modules/gallery/images/missing_movie.jpg | Bin 0 -> 3428 bytes
modules/gallery/images/missing_photo.jpg | Bin 0 -> 2034 bytes
modules/gallery/js/albums_form_add.js | 25 +
modules/gallery/js/item_form_delete.js | 5 +
modules/gallery/js/l10n_client.js | 315 +
modules/gallery/libraries/Admin_View.php | 120 +
modules/gallery/libraries/Block.php | 30 +
modules/gallery/libraries/Breadcrumb.php | 70 +
modules/gallery/libraries/Form_Script.php | 66 +
modules/gallery/libraries/Form_Uploadify.php | 72 +
.../gallery/libraries/Form_Uploadify_buttons.php | 25 +
modules/gallery/libraries/Gallery_I18n.php | 472 ++
modules/gallery/libraries/Gallery_View.php | 243 +
modules/gallery/libraries/IdentityProvider.php | 283 +
modules/gallery/libraries/InPlaceEdit.php | 91 +
modules/gallery/libraries/MY_Database.php | 101 +
modules/gallery/libraries/MY_Forge.php | 45 +
modules/gallery/libraries/MY_Input.php | 31 +
modules/gallery/libraries/MY_Kohana_Exception.php | 101 +
modules/gallery/libraries/MY_ORM.php | 52 +
modules/gallery/libraries/MY_View.php | 85 +
modules/gallery/libraries/Menu.php | 257 +
modules/gallery/libraries/ORM_MPTT.php | 341 +
modules/gallery/libraries/SafeString.php | 162 +
modules/gallery/libraries/Sendmail.php | 98 +
modules/gallery/libraries/Task_Definition.php | 50 +
modules/gallery/libraries/Theme_View.php | 271 +
.../gallery/libraries/drivers/Cache/Database.php | 166 +
.../gallery/libraries/drivers/IdentityProvider.php | 134 +
modules/gallery/models/access_cache.php | 21 +
modules/gallery/models/access_intent.php | 21 +
modules/gallery/models/cache.php | 20 +
modules/gallery/models/failed_auth.php | 20 +
modules/gallery/models/graphics_rule.php | 21 +
modules/gallery/models/incoming_translation.php | 21 +
modules/gallery/models/item.php | 1191 ++++
modules/gallery/models/log.php | 38 +
modules/gallery/models/message.php | 21 +
modules/gallery/models/module.php | 21 +
modules/gallery/models/outgoing_translation.php | 21 +
modules/gallery/models/permission.php | 21 +
modules/gallery/models/task.php | 86 +
modules/gallery/models/theme.php | 21 +
modules/gallery/models/var.php | 21 +
modules/gallery/module.info | 7 +
modules/gallery/vendor/joomla/crypt.php | 151 +
.../gallery/views/admin_advanced_settings.html.php | 57 +
.../gallery/views/admin_block_log_entries.html.php | 15 +
modules/gallery/views/admin_block_news.html.php | 11 +
.../views/admin_block_photo_stream.html.php | 14 +
.../gallery/views/admin_block_platform.html.php | 24 +
modules/gallery/views/admin_block_stats.html.php | 12 +
modules/gallery/views/admin_block_welcome.html.php | 20 +
modules/gallery/views/admin_dashboard.html.php | 43 +
modules/gallery/views/admin_graphics.html.php | 40 +
modules/gallery/views/admin_graphics_gd.html.php | 30 +
.../views/admin_graphics_graphicsmagick.html.php | 21 +
.../views/admin_graphics_imagemagick.html.php | 21 +
modules/gallery/views/admin_graphics_none.html.php | 8 +
modules/gallery/views/admin_languages.html.php | 118 +
modules/gallery/views/admin_maintenance.html.php | 212 +
.../views/admin_maintenance_show_log.html.php | 19 +
.../gallery/views/admin_maintenance_task.html.php | 84 +
modules/gallery/views/admin_modules.html.php | 129 +
.../gallery/views/admin_modules_confirm.html.php | 22 +
modules/gallery/views/admin_movies.html.php | 44 +
modules/gallery/views/admin_sidebar.html.php | 64 +
.../gallery/views/admin_sidebar_blocks.html.php | 5 +
modules/gallery/views/admin_theme_options.html.php | 7 +
modules/gallery/views/admin_themes.html.php | 98 +
.../gallery/views/admin_themes_buttonset.html.php | 48 +
.../gallery/views/admin_themes_preview.html.php | 8 +
modules/gallery/views/error.html.php | 12 +
modules/gallery/views/error_404.html.php | 26 +
modules/gallery/views/error_admin.html.php | 307 +
modules/gallery/views/error_cli.txt.php | 3 +
modules/gallery/views/error_user.html.php | 60 +
modules/gallery/views/form.html.php | 77 +
modules/gallery/views/form_uploadify.html.php | 167 +
.../gallery/views/form_uploadify_buttons.html.php | 11 +
modules/gallery/views/in_place_edit.html.php | 21 +
modules/gallery/views/kohana/error.php | 46 +
modules/gallery/views/kohana_profiler.php | 35 +
modules/gallery/views/l10n_client.html.php | 82 +
modules/gallery/views/login_ajax.html.php | 52 +
modules/gallery/views/login_current_user.html.php | 7 +
modules/gallery/views/menu.html.php | 24 +
modules/gallery/views/menu_ajax_link.html.php | 10 +
modules/gallery/views/menu_dialog.html.php | 9 +
modules/gallery/views/menu_link.html.php | 9 +
modules/gallery/views/movieplayer.html.php | 50 +
modules/gallery/views/permissions_browse.html.php | 62 +
modules/gallery/views/permissions_form.html.php | 92 +
.../gallery/views/quick_delete_confirm.html.php | 12 +
modules/gallery/views/reauthenticate.html.php | 15 +
.../gallery/views/upgrade_checker_block.html.php | 55 +
modules/gallery/views/upgrader.html.php | 163 +
.../gallery/views/user_languages_block.html.php | 19 +
modules/gallery/views/user_profile.html.php | 47 +
modules/gallery/views/user_profile_info.html.php | 9 +
modules/gallery/views/welcome_message.html.php | 36 +
.../gallery/views/welcome_message_loader.html.php | 7 +
modules/greydragon/changelog.txt | 11 +
modules/greydragon/css/gd_common.css | 59 +
modules/greydragon/images/blue-grad.png | Bin 0 -> 337 bytes
modules/greydragon/module.info | 9 +
modules/greydragon/views/gd_admin_include.html.php | 180 +
modules/html5_uploader/controllers/uploader.php | 126 +
modules/html5_uploader/module.info | 7 +
modules/image_block/controllers/image_block.php | 27 +
modules/image_block/helpers/image_block_block.php | 56 +
.../image_block/helpers/image_block_installer.php | 43 +
modules/image_block/module.info | 7 +
.../image_block/views/image_block_block.html.php | 8 +
modules/info/helpers/info_block.php | 93 +
modules/info/helpers/info_installer.php | 45 +
modules/info/helpers/info_theme.php | 41 +
modules/info/module.info | 7 +
modules/info/views/info_block.html.php | 8 +
modules/kbd_nav/changelog.txt | 47 +
modules/kbd_nav/helpers/kbd_nav_theme.php | 7 +
modules/kbd_nav/js/kbd_nav.js | 120 +
modules/kbd_nav/module.info | 8 +
modules/kohana23_compat/config/pagination.php | 27 +
.../libraries/MY_Database_Builder.php | 50 +
modules/kohana23_compat/libraries/Pagination.php | 252 +
.../localprint/controllers/admin_localprint.php | 26 +
modules/localprint/css/localprint_menu.css | 16 +
modules/localprint/helpers/localprint_event.php | 39 +
.../localprint/helpers/localprint_installer.php | 35 +
modules/localprint/helpers/localprint_theme.php | 27 +
modules/localprint/images/localprint_logo.png | Bin 0 -> 2449 bytes
modules/localprint/js/localprint.js | 8 +
modules/localprint/module.info | 3 +
modules/localprint/views/admin_localprint.html.php | 4 +
modules/localprint/views/localprint_code.html.php | 9 +
modules/notification/controllers/notification.php | 36 +
modules/notification/helpers/notification.php | 218 +
.../notification/helpers/notification_event.php | 149 +
.../helpers/notification_installer.php | 54 +
.../notification/models/pending_notification.php | 21 +
modules/notification/models/subscription.php | 21 +
modules/notification/module.info | 7 +
.../notification/views/comment_published.html.php | 35 +
modules/notification/views/item_added.html.php | 29 +
modules/notification/views/item_deleted.html.php | 25 +
modules/notification/views/item_updated.html.php | 35 +
.../views/user_profile_notification.html.php | 12 +
modules/organize/controllers/organize.php | 228 +
modules/organize/css/organize_dialog.css | 17 +
modules/organize/css/organize_frame.css | 118 +
modules/organize/helpers/organize_event.php | 54 +
modules/organize/helpers/organize_installer.php | 28 +
modules/organize/module.info | 7 +
modules/organize/vendor/ext/css/ext-all.css | 6969 ++++++++++++++++++++
modules/organize/vendor/ext/css/ux-all.css | 772 +++
.../vendor/ext/images/default/box/tb-blue.gif | Bin 0 -> 851 bytes
.../vendor/ext/images/default/button/btn.gif | Bin 0 -> 4298 bytes
.../vendor/ext/images/default/dd/drop-no.gif | Bin 0 -> 949 bytes
.../vendor/ext/images/default/dd/drop-yes.gif | Bin 0 -> 1016 bytes
.../vendor/ext/images/default/form/text-bg.gif | Bin 0 -> 819 bytes
.../vendor/ext/images/default/form/trigger.gif | Bin 0 -> 1816 bytes
.../ext/images/default/grid/invalid_line.gif | Bin 0 -> 815 bytes
.../vendor/ext/images/default/grid/loading.gif | Bin 0 -> 771 bytes
.../ext/images/default/panel/tool-sprites.gif | Bin 0 -> 4392 bytes
.../ext/images/default/panel/white-top-bottom.gif | Bin 0 -> 872 bytes
.../ext/images/default/progress/progress-bg.gif | Bin 0 -> 834 bytes
.../organize/vendor/ext/images/default/qtip/bg.gif | Bin 0 -> 1091 bytes
modules/organize/vendor/ext/images/default/s.gif | Bin 0 -> 43 bytes
.../vendor/ext/images/default/shadow-c.png | Bin 0 -> 118 bytes
.../vendor/ext/images/default/shadow-lr.png | Bin 0 -> 135 bytes
.../organize/vendor/ext/images/default/shadow.png | Bin 0 -> 311 bytes
.../vendor/ext/images/default/toolbar/bg.gif | Bin 0 -> 904 bytes
.../vendor/ext/images/default/tree/arrows.gif | Bin 0 -> 617 bytes
.../vendor/ext/images/default/tree/drop-add.gif | Bin 0 -> 1001 bytes
.../ext/images/default/tree/drop-between.gif | Bin 0 -> 907 bytes
.../vendor/ext/images/default/tree/drop-over.gif | Bin 0 -> 911 bytes
.../vendor/ext/images/default/tree/folder-open.gif | Bin 0 -> 956 bytes
.../vendor/ext/images/default/tree/folder.gif | Bin 0 -> 952 bytes
.../vendor/ext/images/default/tree/loading.gif | Bin 0 -> 771 bytes
.../ext/images/default/window/left-corners.png | Bin 0 -> 200 bytes
.../ext/images/default/window/left-right.png | Bin 0 -> 152 bytes
.../ext/images/default/window/right-corners.png | Bin 0 -> 256 bytes
.../ext/images/default/window/top-bottom.png | Bin 0 -> 180 bytes
modules/organize/vendor/ext/images/fam/delete.gif | Bin 0 -> 989 bytes
.../organize/vendor/ext/js/ext-organize-bundle.js | 2202 +++++++
modules/organize/views/organize_dialog.html.php | 23 +
modules/organize/views/organize_frame.html.php | 604 ++
modules/recaptcha/controllers/admin_recaptcha.php | 61 +
modules/recaptcha/css/recaptcha.css | 7 +
modules/recaptcha/helpers/recaptcha.php | 152 +
modules/recaptcha/helpers/recaptcha_event.php | 42 +
modules/recaptcha/helpers/recaptcha_installer.php | 28 +
modules/recaptcha/helpers/recaptcha_theme.php | 28 +
modules/recaptcha/libraries/Form_Recaptcha.php | 67 +
modules/recaptcha/module.info | 7 +
modules/recaptcha/views/admin_recaptcha.html.php | 35 +
modules/recaptcha/views/form_recaptcha.html.php | 18 +
modules/rest/controllers/rest.php | 121 +
modules/rest/helpers/registry_rest.php | 30 +
modules/rest/helpers/rest.php | 191 +
modules/rest/helpers/rest_event.php | 102 +
modules/rest/helpers/rest_installer.php | 52 +
modules/rest/libraries/Rest_Exception.php | 37 +
modules/rest/models/user_access_key.php | 21 +
modules/rest/module.info | 8 +
modules/rest/views/error_rest.json.php | 6 +
modules/rest/views/reset_api_key_confirm.html.php | 7 +
modules/rest/views/user_profile_rest.html.php | 13 +
modules/rss/controllers/rss.php | 66 +
modules/rss/helpers/rss.php | 36 +
modules/rss/helpers/rss_block.php | 49 +
modules/rss/module.info | 7 +
modules/rss/views/feed.mrss.php | 79 +
modules/rss/views/rss_block.html.php | 13 +
modules/search/controllers/search.php | 123 +
modules/search/helpers/search.php | 163 +
modules/search/helpers/search_event.php | 39 +
modules/search/helpers/search_installer.php | 50 +
modules/search/helpers/search_task.php | 84 +
modules/search/helpers/search_theme.php | 29 +
modules/search/models/search_record.php | 24 +
modules/search/module.info | 7 +
modules/search/views/search.html.php | 65 +
modules/search/views/search_link.html.php | 22 +
.../server_add/controllers/admin_server_add.php | 97 +
modules/server_add/controllers/server_add.php | 315 +
modules/server_add/css/server_add.css | 38 +
modules/server_add/helpers/server_add.php | 49 +
modules/server_add/helpers/server_add_event.php | 42 +
.../server_add/helpers/server_add_installer.php | 73 +
modules/server_add/helpers/server_add_theme.php | 27 +
modules/server_add/js/server_add.js | 125 +
modules/server_add/models/server_add_entry.php | 21 +
modules/server_add/module.info | 7 +
modules/server_add/views/admin_server_add.html.php | 40 +
modules/server_add/views/server_add_tree.html.php | 37 +
.../views/server_add_tree_dialog.html.php | 52 +
modules/slideshow/helpers/slideshow_event.php | 80 +
modules/slideshow/helpers/slideshow_installer.php | 43 +
modules/slideshow/helpers/slideshow_theme.php | 26 +
modules/slideshow/module.info | 7 +
modules/tag/controllers/admin_tags.php | 119 +
modules/tag/controllers/tag.php | 96 +
modules/tag/controllers/tag_name.php | 33 +
modules/tag/controllers/tags.php | 65 +
modules/tag/css/tag.css | 102 +
modules/tag/helpers/item_tags_rest.php | 66 +
modules/tag/helpers/tag.php | 181 +
modules/tag/helpers/tag_block.php | 45 +
modules/tag/helpers/tag_event.php | 165 +
modules/tag/helpers/tag_installer.php | 59 +
modules/tag/helpers/tag_item_rest.php | 51 +
modules/tag/helpers/tag_items_rest.php | 64 +
modules/tag/helpers/tag_rest.php | 88 +
modules/tag/helpers/tag_rss.php | 48 +
modules/tag/helpers/tag_task.php | 97 +
modules/tag/helpers/tag_theme.php | 31 +
modules/tag/helpers/tags_rest.php | 77 +
modules/tag/models/tag.php | 169 +
modules/tag/module.info | 7 +
modules/tag/views/admin_tags.html.php | 59 +
modules/tag/views/tag_block.html.php | 30 +
modules/tag/views/tag_cloud.html.php | 9 +
modules/thumbnav/changelog.log | 20 +
modules/thumbnav/controllers/admin_thumbnav.php | 65 +
modules/thumbnav/css/thumbnav.css | 11 +
modules/thumbnav/helpers/thumbnav_block.php | 89 +
modules/thumbnav/helpers/thumbnav_event.php | 20 +
modules/thumbnav/helpers/thumbnav_theme.php | 8 +
modules/thumbnav/module.info | 7 +
modules/thumbnav/views/admin_include.html.php | 95 +
modules/thumbnav/views/admin_thumbnav.html.php | 10 +
modules/thumbnav/views/thumbnav_block.html.php | 5 +
modules/user/config/identity.php | 37 +
modules/user/controllers/admin_users.php | 442 ++
modules/user/controllers/password.php | 141 +
modules/user/controllers/users.php | 239 +
modules/user/css/user.css | 120 +
modules/user/helpers/group.php | 82 +
modules/user/helpers/user.php | 176 +
modules/user/helpers/user_event.php | 30 +
modules/user/helpers/user_installer.php | 142 +
modules/user/helpers/user_theme.php | 30 +
modules/user/images/progressImg1.png | Bin 0 -> 390 bytes
modules/user/js/password_strength.js | 39 +
modules/user/lib/PasswordHash.php | 248 +
.../libraries/drivers/IdentityProvider/Gallery.php | 164 +
modules/user/models/group.php | 89 +
modules/user/models/user.php | 185 +
modules/user/module.info | 8 +
modules/user/views/admin_users.html.php | 142 +
.../user/views/admin_users_delete_user.html.php | 7 +
modules/user/views/admin_users_group.html.php | 40 +
modules/user/views/reset_password.html.php | 18 +
modules/watermark/controllers/admin_watermarks.php | 158 +
modules/watermark/helpers/watermark.php | 82 +
modules/watermark/helpers/watermark_event.php | 29 +
modules/watermark/helpers/watermark_installer.php | 42 +
modules/watermark/module.info | 7 +
modules/watermark/views/admin_watermarks.html.php | 39 +
php.ini | 19 +
robots.txt | 14 +
serveradd/Raphael_2013-10-18_optimiert.mpg | Bin 0 -> 31750148 bytes
system/KohanaLicense.html | 30 +
system/config/cache.php | 37 +
system/config/cookie.php | 55 +
system/config/credit_cards.php | 70 +
system/config/database.php | 53 +
system/config/encryption.php | 39 +
system/config/http.php | 30 +
system/config/image.php | 22 +
system/config/inflector.php | 70 +
system/config/locale.php | 26 +
system/config/log.php | 35 +
system/config/mimes.php | 228 +
system/config/profiler.php | 16 +
system/config/routes.php | 58 +
system/config/session.php | 56 +
system/config/sql_types.php | 99 +
system/config/upload.php | 24 +
system/config/user_agents.php | 120 +
system/config/view.php | 25 +
system/controllers/template.php | 54 +
system/core/Benchmark.php | 126 +
system/core/Event.php | 231 +
system/core/Kohana.php | 1118 ++++
system/core/Kohana_Config.php | 329 +
system/core/Kohana_Exception.php | 622 ++
system/helpers/arr.php | 273 +
system/helpers/cookie.php | 149 +
system/helpers/date.php | 395 ++
system/helpers/db.php | 47 +
system/helpers/download.php | 135 +
system/helpers/expires.php | 129 +
system/helpers/feed.php | 120 +
system/helpers/file.php | 184 +
system/helpers/form.php | 466 ++
system/helpers/format.php | 112 +
system/helpers/html.php | 364 +
system/helpers/inflector.php | 252 +
system/helpers/num.php | 24 +
system/helpers/remote.php | 64 +
system/helpers/request.php | 618 ++
system/helpers/security.php | 35 +
system/helpers/text.php | 596 ++
system/helpers/upload.php | 157 +
system/helpers/url.php | 264 +
system/helpers/utf8.php | 744 +++
system/helpers/valid.php | 453 ++
system/libraries/Cache.php | 248 +
system/libraries/Cache_Exception.php | 11 +
system/libraries/Controller.php | 44 +
system/libraries/Database.php | 648 ++
system/libraries/Database_Builder.php | 1241 ++++
system/libraries/Database_Cache_Result.php | 81 +
system/libraries/Database_Exception.php | 15 +
system/libraries/Database_Expression.php | 23 +
system/libraries/Database_Mysql.php | 226 +
system/libraries/Database_Mysql_Result.php | 174 +
system/libraries/Database_Mysqli.php | 90 +
system/libraries/Database_Mysqli_Result.php | 175 +
system/libraries/Database_Query.php | 95 +
system/libraries/Database_Result.php | 170 +
system/libraries/Encrypt.php | 176 +
system/libraries/I18n.php | 100 +
system/libraries/Image.php | 501 ++
system/libraries/Input.php | 507 ++
system/libraries/Kohana_404_Exception.php | 56 +
system/libraries/Kohana_Log.php | 90 +
system/libraries/Kohana_PHP_Exception.php | 99 +
system/libraries/Kohana_User_Exception.php | 30 +
system/libraries/Model.php | 62 +
system/libraries/ORM.php | 1528 +++++
system/libraries/ORM_Iterator.php | 266 +
system/libraries/ORM_Validation_Exception.php | 24 +
system/libraries/Profiler.php | 306 +
system/libraries/Profiler_Table.php | 67 +
system/libraries/Router.php | 315 +
system/libraries/Session.php | 500 ++
system/libraries/URI.php | 279 +
system/libraries/Validation.php | 815 +++
system/libraries/View.php | 329 +
system/libraries/drivers/Cache.php | 42 +
system/libraries/drivers/Cache/File.php | 255 +
system/libraries/drivers/Cache/Memcache.php | 132 +
system/libraries/drivers/Cache/Xcache.php | 161 +
system/libraries/drivers/Config.php | 257 +
system/libraries/drivers/Config/Array.php | 83 +
system/libraries/drivers/Image.php | 158 +
system/libraries/drivers/Image/GD.php | 440 ++
system/libraries/drivers/Image/GraphicsMagick.php | 225 +
system/libraries/drivers/Image/ImageMagick.php | 233 +
system/libraries/drivers/Log.php | 22 +
system/libraries/drivers/Log/Database.php | 40 +
system/libraries/drivers/Log/File.php | 44 +
system/libraries/drivers/Log/Syslog.php | 34 +
system/libraries/drivers/Session.php | 70 +
system/libraries/drivers/Session/Cache.php | 108 +
system/libraries/drivers/Session/Cookie.php | 83 +
system/libraries/drivers/Session/Database.php | 178 +
system/messages/kohana/core.php | 37 +
system/messages/validation/default.php | 25 +
system/views/kohana/error.php | 252 +
system/views/kohana/error_disabled.php | 19 +
system/views/kohana/template.php | 36 +
system/views/profiler/profiler.php | 37 +
system/views/profiler/table.css | 53 +
system/views/profiler/table.php | 24 +
themes/admin_wind/css/fix-ie.css | 18 +
themes/admin_wind/css/screen-rtl.css | 400 ++
themes/admin_wind/css/screen.css | 1058 +++
.../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes
.../images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 182 bytes
.../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 124 bytes
.../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 123 bytes
.../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes
.../images/ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 4033 bytes
.../images/ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 104 bytes
.../images/ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 88 bytes
.../themeroller/images/ui-icons_217bc0_256x240.png | Bin 0 -> 7638 bytes
.../themeroller/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 7626 bytes
.../themeroller/images/ui-icons_469bdd_256x240.png | Bin 0 -> 5399 bytes
.../themeroller/images/ui-icons_6da8d5_256x240.png | Bin 0 -> 8447 bytes
.../themeroller/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4379 bytes
.../themeroller/images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4379 bytes
.../themeroller/images/ui-icons_f9bd01_256x240.png | Bin 0 -> 4379 bytes
themes/admin_wind/css/themeroller/ui.base.css | 7 +
themes/admin_wind/css/themeroller/ui.core.css | 37 +
.../admin_wind/css/themeroller/ui.datepicker.css | 62 +
themes/admin_wind/css/themeroller/ui.dialog.css | 13 +
.../admin_wind/css/themeroller/ui.progressbar.css | 4 +
themes/admin_wind/css/themeroller/ui.resizable.css | 13 +
themes/admin_wind/css/themeroller/ui.tabs.css | 9 +
themes/admin_wind/css/themeroller/ui.theme.css | 243 +
themes/admin_wind/images/avatar.jpg | Bin 0 -> 1172 bytes
themes/admin_wind/images/ico-denied-inactive.png | Bin 0 -> 604 bytes
themes/admin_wind/images/ico-denied-passive.png | Bin 0 -> 916 bytes
themes/admin_wind/images/ico-denied.png | Bin 0 -> 715 bytes
themes/admin_wind/images/ico-error.png | Bin 0 -> 701 bytes
themes/admin_wind/images/ico-info.png | Bin 0 -> 778 bytes
themes/admin_wind/images/ico-lock.png | Bin 0 -> 749 bytes
themes/admin_wind/images/ico-separator-rtl.gif | Bin 0 -> 106 bytes
themes/admin_wind/images/ico-separator.gif | Bin 0 -> 106 bytes
themes/admin_wind/images/ico-success-inactive.png | Bin 0 -> 476 bytes
themes/admin_wind/images/ico-success-passive.png | Bin 0 -> 617 bytes
themes/admin_wind/images/ico-success.png | Bin 0 -> 537 bytes
themes/admin_wind/images/ico-warning.png | Bin 0 -> 666 bytes
themes/admin_wind/images/loading-large.gif | Bin 0 -> 8238 bytes
themes/admin_wind/images/loading-small.gif | Bin 0 -> 673 bytes
themes/admin_wind/js/ui.init.js | 62 +
themes/admin_wind/theme.info | 10 +
themes/admin_wind/thumbnail.png | Bin 0 -> 28330 bytes
themes/admin_wind/views/admin.html.php | 104 +
themes/admin_wind/views/block.html.php | 18 +
themes/admin_wind/views/paginator.html.php | 88 +
.../admin/controllers/admin_theme_options.php | 860 +++
.../admin/views/admin_theme_options.html.php | 38 +
themes/greydragon/changelog.txt | 641 ++
themes/greydragon/controllers/greydragon.php | 14 +
themes/greydragon/css/base.css | 322 +
.../css/colorpacks/blackhawk/css/colors.css | 169 +
.../colorpacks/blackhawk/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../css/colorpacks/blackhawk/images/colorpack.png | Bin 0 -> 307 bytes
.../css/colorpacks/blackhawk/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/blackhawk/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/blackhawk/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/blackhawk/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/blackhawk/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/blackhawk/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/blackhawk/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/blackhawk/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/blackhawk/images/ui-icons.png | Bin 0 -> 13169 bytes
.../blackhawk/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../colorpacks/blackhawk/images/view-calendar.png | Bin 0 -> 429 bytes
.../blackhawk/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/blackhawk/images/view-comments.png | Bin 0 -> 492 bytes
.../blackhawk/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../colorpacks/blackhawk/images/view-fullsize.png | Bin 0 -> 407 bytes
.../colorpacks/blackhawk/images/view-info-b.png | Bin 0 -> 493 bytes
.../colorpacks/blackhawk/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/blackhawk/images/view-info.png | Bin 0 -> 938 bytes
.../blackhawk/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/carbon/css/colors.css | 188 +
.../css/colorpacks/carbon/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../css/colorpacks/carbon/images/colorpack.png | Bin 0 -> 286 bytes
.../css/colorpacks/carbon/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/carbon/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/carbon/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/carbon/images/ico-info.png | Bin 0 -> 778 bytes
.../css/colorpacks/carbon/images/ico-warning.png | Bin 0 -> 666 bytes
.../css/colorpacks/carbon/images/loading-large.gif | Bin 0 -> 8238 bytes
.../css/colorpacks/carbon/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/carbon/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/carbon/images/section.png | Bin 0 -> 192 bytes
.../css/colorpacks/carbon/images/ui-icons.png | Bin 0 -> 13162 bytes
.../colorpacks/carbon/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../css/colorpacks/carbon/images/view-calendar.png | Bin 0 -> 429 bytes
.../colorpacks/carbon/images/view-comments-b.png | Bin 0 -> 600 bytes
.../css/colorpacks/carbon/images/view-comments.png | Bin 0 -> 492 bytes
.../colorpacks/carbon/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../css/colorpacks/carbon/images/view-fullsize.png | Bin 0 -> 407 bytes
.../css/colorpacks/carbon/images/view-info-b.png | Bin 0 -> 493 bytes
.../css/colorpacks/carbon/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/carbon/images/view-info.png | Bin 0 -> 938 bytes
.../colorpacks/carbon/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/greydragon/css/colors.css | 173 +
.../colorpacks/greydragon/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../greydragon/images/background-bottom.gif | Bin 0 -> 1040 bytes
.../greydragon/images/background-top.gif | Bin 0 -> 862 bytes
.../colorpacks/greydragon/images/background.gif | Bin 0 -> 1098 bytes
.../css/colorpacks/greydragon/images/colorpack.png | Bin 0 -> 414 bytes
.../css/colorpacks/greydragon/images/footer.png | Bin 0 -> 376 bytes
.../css/colorpacks/greydragon/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/greydragon/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/greydragon/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/greydragon/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/greydragon/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/greydragon/images/image-thumb.gif | Bin 0 -> 830 bytes
.../colorpacks/greydragon/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/greydragon/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/greydragon/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/greydragon/images/section.png | Bin 0 -> 192 bytes
.../css/colorpacks/greydragon/images/ui-icons.png | Bin 0 -> 13160 bytes
.../greydragon/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../colorpacks/greydragon/images/view-calendar.png | Bin 0 -> 429 bytes
.../greydragon/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/greydragon/images/view-comments.png | Bin 0 -> 492 bytes
.../greydragon/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../colorpacks/greydragon/images/view-fullsize.png | Bin 0 -> 407 bytes
.../colorpacks/greydragon/images/view-info-b.png | Bin 0 -> 493 bytes
.../colorpacks/greydragon/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/greydragon/images/view-info.png | Bin 0 -> 938 bytes
.../greydragon/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/roundrobin/css/colors.css | 192 +
.../colorpacks/roundrobin/images/ajax-loading.gif | Bin 0 -> 2545 bytes
.../css/colorpacks/roundrobin/images/bg-body.jpg | Bin 0 -> 13916 bytes
.../css/colorpacks/roundrobin/images/bg-header.jpg | Bin 0 -> 13609 bytes
.../css/colorpacks/roundrobin/images/colorpack.png | Bin 0 -> 475 bytes
.../css/colorpacks/roundrobin/images/gallery.png | Bin 0 -> 553 bytes
.../css/colorpacks/roundrobin/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/roundrobin/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/roundrobin/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/roundrobin/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/roundrobin/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/roundrobin/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/roundrobin/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/roundrobin/images/search.png | Bin 0 -> 550 bytes
.../css/colorpacks/roundrobin/images/ui-icons.png | Bin 0 -> 14168 bytes
.../roundrobin/images/view-calendar-b.png | Bin 0 -> 891 bytes
.../colorpacks/roundrobin/images/view-calendar.png | Bin 0 -> 260 bytes
.../roundrobin/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/roundrobin/images/view-comments.png | Bin 0 -> 298 bytes
.../roundrobin/images/view-fullsize-b.png | Bin 0 -> 670 bytes
.../colorpacks/roundrobin/images/view-fullsize.png | Bin 0 -> 275 bytes
.../colorpacks/roundrobin/images/view-info-b.png | Bin 0 -> 698 bytes
.../colorpacks/roundrobin/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/roundrobin/images/view-info.png | Bin 0 -> 286 bytes
.../roundrobin/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/slateblue/css/colors.css | 176 +
.../colorpacks/slateblue/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../css/colorpacks/slateblue/images/background.jpg | Bin 0 -> 907 bytes
.../css/colorpacks/slateblue/images/colorpack.png | Bin 0 -> 414 bytes
.../css/colorpacks/slateblue/images/footer.png | Bin 0 -> 376 bytes
.../css/colorpacks/slateblue/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/slateblue/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/slateblue/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/slateblue/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/slateblue/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/slateblue/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/slateblue/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/slateblue/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/slateblue/images/section.png | Bin 0 -> 192 bytes
.../css/colorpacks/slateblue/images/ui-icons.png | Bin 0 -> 13160 bytes
.../slateblue/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../colorpacks/slateblue/images/view-calendar.png | Bin 0 -> 429 bytes
.../slateblue/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/slateblue/images/view-comments.png | Bin 0 -> 492 bytes
.../slateblue/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../colorpacks/slateblue/images/view-fullsize.png | Bin 0 -> 407 bytes
.../colorpacks/slateblue/images/view-info-b.png | Bin 0 -> 493 bytes
.../colorpacks/slateblue/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/slateblue/images/view-info.png | Bin 0 -> 938 bytes
.../slateblue/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/whitehawk/css/colors.css | 172 +
.../colorpacks/whitehawk/images/ajax-loading.gif | Bin 0 -> 2545 bytes
.../css/colorpacks/whitehawk/images/colorpack.png | Bin 0 -> 417 bytes
.../css/colorpacks/whitehawk/images/gallery.png | Bin 0 -> 1383 bytes
.../css/colorpacks/whitehawk/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/whitehawk/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/whitehawk/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/whitehawk/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/whitehawk/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/whitehawk/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/whitehawk/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/whitehawk/images/search.png | Bin 0 -> 571 bytes
.../css/colorpacks/whitehawk/images/ui-icons.png | Bin 0 -> 9914 bytes
.../whitehawk/images/view-calendar-b.png | Bin 0 -> 891 bytes
.../colorpacks/whitehawk/images/view-calendar.png | Bin 0 -> 260 bytes
.../whitehawk/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/whitehawk/images/view-comments.png | Bin 0 -> 298 bytes
.../whitehawk/images/view-fullsize-b.png | Bin 0 -> 670 bytes
.../colorpacks/whitehawk/images/view-fullsize.png | Bin 0 -> 275 bytes
.../colorpacks/whitehawk/images/view-info-b.png | Bin 0 -> 698 bytes
.../colorpacks/whitehawk/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/whitehawk/images/view-info.png | Bin 0 -> 286 bytes
.../whitehawk/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../greydragon/css/colorpacks/wind/css/colors.css | 175 +
.../css/colorpacks/wind/images/ajax-loading.gif | Bin 0 -> 2545 bytes
.../css/colorpacks/wind/images/colorpack.png | Bin 0 -> 397 bytes
.../css/colorpacks/wind/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/wind/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/wind/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/wind/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/wind/images/ico-view-fullsize.png | Bin 0 -> 1207 bytes
.../wind/images/ico-view-slideshow-rtl.png | Bin 0 -> 1013 bytes
.../colorpacks/wind/images/ico-view-slideshow.png | Bin 0 -> 854 bytes
.../css/colorpacks/wind/images/ico-warning.png | Bin 0 -> 666 bytes
.../css/colorpacks/wind/images/loading-large.gif | Bin 0 -> 8238 bytes
.../css/colorpacks/wind/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/wind/images/section.png | Bin 0 -> 314 bytes
.../css/colorpacks/wind/images/ui-icons.png | Bin 0 -> 10682 bytes
.../css/colorpacks/wind/images/view-calendar.png | Bin 0 -> 637 bytes
.../css/colorpacks/wind/images/view-comments-b.png | Bin 0 -> 892 bytes
.../css/colorpacks/wind/images/view-comments.png | Bin 0 -> 347 bytes
.../css/colorpacks/wind/images/view-fullsize.png | Bin 0 -> 365 bytes
.../css/colorpacks/wind/images/view-info-b.png | Bin 0 -> 698 bytes
.../css/colorpacks/wind/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/wind/images/view-info.png | Bin 0 -> 383 bytes
.../colorpacks/wind/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
themes/greydragon/css/custom.css | 61 +
themes/greydragon/css/forms.css | 120 +
.../css/framepacks/android/css/frame.css | 32 +
.../css/framepacks/android/images/thumb-dgt-e.png | Bin 0 -> 1482 bytes
.../framepacks/android/images/thumb-dgt-eext.png | Bin 0 -> 1939 bytes
.../framepacks/android/images/thumb-dgt-ext.png | Bin 0 -> 1791 bytes
.../css/framepacks/android/images/thumb-dgt.png | Bin 0 -> 1447 bytes
.../css/framepacks/android/images/thumb-flm-e.png | Bin 0 -> 1443 bytes
.../framepacks/android/images/thumb-flm-eext.png | Bin 0 -> 1796 bytes
.../framepacks/android/images/thumb-flm-ext.png | Bin 0 -> 1737 bytes
.../css/framepacks/android/images/thumb-flm.png | Bin 0 -> 1413 bytes
.../css/framepacks/android/images/thumb-sqr-e.png | Bin 0 -> 1579 bytes
.../framepacks/android/images/thumb-sqr-eext.png | Bin 0 -> 1916 bytes
.../framepacks/android/images/thumb-sqr-ext.png | Bin 0 -> 1900 bytes
.../css/framepacks/android/images/thumb-sqr.png | Bin 0 -> 1544 bytes
.../css/framepacks/android/images/thumb-wd-e.png | Bin 0 -> 1428 bytes
.../framepacks/android/images/thumb-wd-eext.png | Bin 0 -> 1720 bytes
.../css/framepacks/android/images/thumb-wd-ext.png | Bin 0 -> 1659 bytes
.../css/framepacks/android/images/thumb-wd.png | Bin 0 -> 1379 bytes
.../greydragon/css/framepacks/book/css/frame.css | 64 +
.../css/framepacks/book/images/a-thumb-dgt-e.png | Bin 0 -> 1130 bytes
.../framepacks/book/images/a-thumb-dgt-eext.png | Bin 0 -> 1579 bytes
.../css/framepacks/book/images/a-thumb-dgt-ext.png | Bin 0 -> 1513 bytes
.../css/framepacks/book/images/a-thumb-dgt.png | Bin 0 -> 1062 bytes
.../css/framepacks/book/images/a-thumb-flm-e.png | Bin 0 -> 1105 bytes
.../framepacks/book/images/a-thumb-flm-eext.png | Bin 0 -> 1478 bytes
.../css/framepacks/book/images/a-thumb-flm-ext.png | Bin 0 -> 1300 bytes
.../css/framepacks/book/images/a-thumb-flm.png | Bin 0 -> 1030 bytes
.../css/framepacks/book/images/a-thumb-sqr-e.png | Bin 0 -> 1283 bytes
.../framepacks/book/images/a-thumb-sqr-eext.png | Bin 0 -> 1863 bytes
.../css/framepacks/book/images/a-thumb-sqr-ext.png | Bin 0 -> 1733 bytes
.../css/framepacks/book/images/a-thumb-sqr.png | Bin 0 -> 1225 bytes
.../css/framepacks/book/images/a-thumb-wd-e.png | Bin 0 -> 1073 bytes
.../css/framepacks/book/images/a-thumb-wd-eext.png | Bin 0 -> 1371 bytes
.../css/framepacks/book/images/a-thumb-wd-ext.png | Bin 0 -> 1265 bytes
.../css/framepacks/book/images/a-thumb-wd.png | Bin 0 -> 991 bytes
.../css/framepacks/book/images/thumb-dgt-e.png | Bin 0 -> 619 bytes
.../css/framepacks/book/images/thumb-dgt-eext.png | Bin 0 -> 802 bytes
.../css/framepacks/book/images/thumb-dgt-ext.png | Bin 0 -> 773 bytes
.../css/framepacks/book/images/thumb-dgt.png | Bin 0 -> 575 bytes
.../css/framepacks/book/images/thumb-flm-e.png | Bin 0 -> 613 bytes
.../css/framepacks/book/images/thumb-flm-eext.png | Bin 0 -> 783 bytes
.../css/framepacks/book/images/thumb-flm-ext.png | Bin 0 -> 625 bytes
.../css/framepacks/book/images/thumb-flm.png | Bin 0 -> 587 bytes
.../css/framepacks/book/images/thumb-sqr-e.png | Bin 0 -> 676 bytes
.../css/framepacks/book/images/thumb-sqr-eext.png | Bin 0 -> 902 bytes
.../css/framepacks/book/images/thumb-sqr-ext.png | Bin 0 -> 864 bytes
.../css/framepacks/book/images/thumb-sqr.png | Bin 0 -> 648 bytes
.../css/framepacks/book/images/thumb-wd-e.png | Bin 0 -> 600 bytes
.../css/framepacks/book/images/thumb-wd-eext.png | Bin 0 -> 727 bytes
.../css/framepacks/book/images/thumb-wd-ext.png | Bin 0 -> 695 bytes
.../css/framepacks/book/images/thumb-wd.png | Bin 0 -> 575 bytes
.../css/framepacks/darkglass/css/frame.css | 32 +
.../framepacks/darkglass/images/thumb-dgt-e.png | Bin 0 -> 1876 bytes
.../framepacks/darkglass/images/thumb-dgt-eext.png | Bin 0 -> 2132 bytes
.../framepacks/darkglass/images/thumb-dgt-ext.png | Bin 0 -> 2097 bytes
.../css/framepacks/darkglass/images/thumb-dgt.png | Bin 0 -> 1873 bytes
.../framepacks/darkglass/images/thumb-flm-e.png | Bin 0 -> 1814 bytes
.../framepacks/darkglass/images/thumb-flm-eext.png | Bin 0 -> 2092 bytes
.../framepacks/darkglass/images/thumb-flm-ext.png | Bin 0 -> 2048 bytes
.../css/framepacks/darkglass/images/thumb-flm.png | Bin 0 -> 1811 bytes
.../framepacks/darkglass/images/thumb-sqr-e.png | Bin 0 -> 1896 bytes
.../framepacks/darkglass/images/thumb-sqr-eext.png | Bin 0 -> 2220 bytes
.../framepacks/darkglass/images/thumb-sqr-ext.png | Bin 0 -> 2187 bytes
.../css/framepacks/darkglass/images/thumb-sqr.png | Bin 0 -> 3675 bytes
.../css/framepacks/darkglass/images/thumb-wd-e.png | Bin 0 -> 1787 bytes
.../framepacks/darkglass/images/thumb-wd-eext.png | Bin 0 -> 2051 bytes
.../framepacks/darkglass/images/thumb-wd-ext.png | Bin 0 -> 2006 bytes
.../css/framepacks/darkglass/images/thumb-wd.png | Bin 0 -> 1767 bytes
.../css/framepacks/greydragon/css/frame.css | 43 +
.../greydragon/css/framepacks/iphone/css/frame.css | 31 +
.../css/framepacks/iphone/images/thumb-dgt-e.png | Bin 0 -> 2923 bytes
.../framepacks/iphone/images/thumb-dgt-eext.png | Bin 0 -> 3544 bytes
.../css/framepacks/iphone/images/thumb-dgt-ext.png | Bin 0 -> 3449 bytes
.../css/framepacks/iphone/images/thumb-dgt.png | Bin 0 -> 2813 bytes
.../css/framepacks/iphone/images/thumb-flm-e.png | Bin 0 -> 2734 bytes
.../framepacks/iphone/images/thumb-flm-eext.png | Bin 0 -> 3414 bytes
.../css/framepacks/iphone/images/thumb-flm-ext.png | Bin 0 -> 3272 bytes
.../css/framepacks/iphone/images/thumb-flm.png | Bin 0 -> 2612 bytes
.../css/framepacks/iphone/images/thumb-sqr-e.png | Bin 0 -> 2848 bytes
.../framepacks/iphone/images/thumb-sqr-eext.png | Bin 0 -> 3930 bytes
.../css/framepacks/iphone/images/thumb-sqr-ext.png | Bin 0 -> 3850 bytes
.../css/framepacks/iphone/images/thumb-sqr.png | Bin 0 -> 2759 bytes
.../css/framepacks/iphone/images/thumb-wd-e.png | Bin 0 -> 2769 bytes
.../css/framepacks/iphone/images/thumb-wd-eext.png | Bin 0 -> 3108 bytes
.../css/framepacks/iphone/images/thumb-wd-ext.png | Bin 0 -> 3012 bytes
.../css/framepacks/iphone/images/thumb-wd.png | Bin 0 -> 2676 bytes
.../greydragon/css/framepacks/iphoto/css/frame.css | 31 +
.../css/framepacks/iphoto/images/thumb-dgt-e.png | Bin 0 -> 1093 bytes
.../framepacks/iphoto/images/thumb-dgt-eext.png | Bin 0 -> 1294 bytes
.../css/framepacks/iphoto/images/thumb-dgt-ext.png | Bin 0 -> 1251 bytes
.../css/framepacks/iphoto/images/thumb-dgt.png | Bin 0 -> 1065 bytes
.../css/framepacks/iphoto/images/thumb-flm-e.png | Bin 0 -> 1071 bytes
.../framepacks/iphoto/images/thumb-flm-eext.png | Bin 0 -> 1258 bytes
.../css/framepacks/iphoto/images/thumb-flm-ext.png | Bin 0 -> 1218 bytes
.../css/framepacks/iphoto/images/thumb-flm.png | Bin 0 -> 1045 bytes
.../css/framepacks/iphoto/images/thumb-sqr-e.png | Bin 0 -> 1141 bytes
.../framepacks/iphoto/images/thumb-sqr-eext.png | Bin 0 -> 1382 bytes
.../css/framepacks/iphoto/images/thumb-sqr-ext.png | Bin 0 -> 1342 bytes
.../css/framepacks/iphoto/images/thumb-sqr.png | Bin 0 -> 1110 bytes
.../css/framepacks/iphoto/images/thumb-wd-e.png | Bin 0 -> 1056 bytes
.../css/framepacks/iphoto/images/thumb-wd-eext.png | Bin 0 -> 1209 bytes
.../css/framepacks/iphoto/images/thumb-wd-ext.png | Bin 0 -> 1168 bytes
.../css/framepacks/iphoto/images/thumb-wd.png | Bin 0 -> 1015 bytes
.../css/framepacks/iphoto/views/frame.html.php | 5 +
.../greydragon/css/framepacks/panel/css/frame.css | 37 +
.../css/framepacks/roundcorners/css/frame.css | 44 +
.../greydragon/css/framepacks/simple/css/frame.css | 39 +
.../greydragon/css/framepacks/wall/css/frame.css | 48 +
themes/greydragon/css/ipad.css | 20 +
themes/greydragon/css/layout.css | 77 +
themes/greydragon/css/menus.css | 58 +
themes/greydragon/css/modules.css | 165 +
themes/greydragon/css/normalize.css | 431 ++
themes/greydragon/css/rtl.css | 47 +
themes/greydragon/css/screen.css | 17 +
themes/greydragon/helpers/exif_event.php | 45 +
themes/greydragon/helpers/greydragon_event.php | 92 +
themes/greydragon/helpers/greydragon_installer.php | 30 +
themes/greydragon/images/apple-touch-icon.png | Bin 0 -> 9420 bytes
themes/greydragon/images/arrows_left.png | Bin 0 -> 1895 bytes
themes/greydragon/images/arrows_right.png | Bin 0 -> 1826 bytes
themes/greydragon/images/avatar.jpg | Bin 0 -> 1442 bytes
themes/greydragon/images/blue-grad.png | Bin 0 -> 337 bytes
themes/greydragon/images/button-grad-active-vs.png | Bin 0 -> 152 bytes
themes/greydragon/images/button-grad-vs.png | Bin 0 -> 155 bytes
themes/greydragon/images/close.png | Bin 0 -> 564 bytes
themes/greydragon/images/donate.png | Bin 0 -> 399 bytes
themes/greydragon/images/gallery.png | Bin 0 -> 627 bytes
themes/greydragon/images/ico-allowed.png | Bin 0 -> 715 bytes
themes/greydragon/images/ico-denied-inactive.png | Bin 0 -> 604 bytes
themes/greydragon/images/ico-denied-passive.png | Bin 0 -> 916 bytes
themes/greydragon/images/ico-denied.png | Bin 0 -> 715 bytes
themes/greydragon/images/ico-error.png | Bin 0 -> 701 bytes
themes/greydragon/images/ico-help.png | Bin 0 -> 786 bytes
themes/greydragon/images/ico-info.png | Bin 0 -> 778 bytes
themes/greydragon/images/ico-lock.png | Bin 0 -> 749 bytes
themes/greydragon/images/ico-success-inactive.png | Bin 0 -> 261 bytes
themes/greydragon/images/ico-success-passive.png | Bin 0 -> 561 bytes
themes/greydragon/images/ico-success.png | Bin 0 -> 537 bytes
themes/greydragon/images/ico-warning.png | Bin 0 -> 666 bytes
themes/greydragon/images/missing-img.png | Bin 0 -> 33136 bytes
themes/greydragon/js/gallery.ajax.custom.js | 14 +
themes/greydragon/js/gallery.dialog.custom.js | 232 +
themes/greydragon/js/jquery-ui.min.js | 7 +
themes/greydragon/js/jquery.cycle.js | 1543 +++++
themes/greydragon/js/jquery.form.custom.js | 1076 +++
themes/greydragon/js/jquery.json.min.js | 31 +
themes/greydragon/js/jquery.min.js | 4 +
themes/greydragon/js/ui.support.js | 80 +
themes/greydragon/libraries/MY_Theme_View.php | 925 +++
themes/greydragon/theme.info | 10 +
themes/greydragon/thumbnail.png | Bin 0 -> 25791 bytes
themes/greydragon/views/album.html.php | 68 +
themes/greydragon/views/block.html.php | 29 +
themes/greydragon/views/calpage.html.php | 257 +
themes/greydragon/views/dynamic.html.php | 38 +
themes/greydragon/views/exif_sidebar.html.php | 18 +
themes/greydragon/views/info_block.html.php | 29 +
themes/greydragon/views/login_ajax.html.php | 10 +
themes/greydragon/views/movie.html.php | 38 +
themes/greydragon/views/no_sidebar.html.php | 19 +
themes/greydragon/views/page.html.php | 267 +
themes/greydragon/views/paginator.html.php | 216 +
themes/greydragon/views/photo.html.php | 129 +
themes/greydragon/views/rootpage.html.php | 59 +
themes/greydragon/views/rootpage.html.php_fix | 46 +
themes/greydragon/views/rss_block.html.php | 30 +
themes/greydragon/views/search.html.php | 35 +
themes/greydragon/views/sidebar.html.php | 27 +
themes/greydragon/views/user_profile.html.php | 44 +
.../admin/controllers/admin_theme_options.php | 866 +++
.../admin/views/admin_theme_options.html.php | 38 +
themes/greydragon_old/changelog.txt | 616 ++
themes/greydragon_old/controllers/greydragon.php | 14 +
themes/greydragon_old/css/base.css | 321 +
.../css/colorpacks/blackhawk/css/colors.css | 170 +
.../colorpacks/blackhawk/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../css/colorpacks/blackhawk/images/colorpack.png | Bin 0 -> 307 bytes
.../css/colorpacks/blackhawk/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/blackhawk/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/blackhawk/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/blackhawk/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/blackhawk/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/blackhawk/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/blackhawk/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/blackhawk/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/blackhawk/images/ui-icons.png | Bin 0 -> 13169 bytes
.../blackhawk/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../colorpacks/blackhawk/images/view-calendar.png | Bin 0 -> 429 bytes
.../blackhawk/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/blackhawk/images/view-comments.png | Bin 0 -> 492 bytes
.../blackhawk/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../colorpacks/blackhawk/images/view-fullsize.png | Bin 0 -> 407 bytes
.../colorpacks/blackhawk/images/view-info-b.png | Bin 0 -> 493 bytes
.../colorpacks/blackhawk/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/blackhawk/images/view-info.png | Bin 0 -> 938 bytes
.../blackhawk/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/carbon/css/colors.css | 188 +
.../css/colorpacks/carbon/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../css/colorpacks/carbon/images/colorpack.png | Bin 0 -> 307 bytes
.../css/colorpacks/carbon/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/carbon/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/carbon/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/carbon/images/ico-info.png | Bin 0 -> 778 bytes
.../css/colorpacks/carbon/images/ico-warning.png | Bin 0 -> 666 bytes
.../css/colorpacks/carbon/images/loading-large.gif | Bin 0 -> 8238 bytes
.../css/colorpacks/carbon/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/carbon/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/carbon/images/section.png | Bin 0 -> 192 bytes
.../css/colorpacks/carbon/images/ui-icons.png | Bin 0 -> 13162 bytes
.../colorpacks/carbon/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../css/colorpacks/carbon/images/view-calendar.png | Bin 0 -> 429 bytes
.../colorpacks/carbon/images/view-comments-b.png | Bin 0 -> 600 bytes
.../css/colorpacks/carbon/images/view-comments.png | Bin 0 -> 492 bytes
.../colorpacks/carbon/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../css/colorpacks/carbon/images/view-fullsize.png | Bin 0 -> 407 bytes
.../css/colorpacks/carbon/images/view-info-b.png | Bin 0 -> 493 bytes
.../css/colorpacks/carbon/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/carbon/images/view-info.png | Bin 0 -> 938 bytes
.../colorpacks/carbon/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/greydragon/css/colors.css | 174 +
.../colorpacks/greydragon/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../greydragon/images/background-bottom.gif | Bin 0 -> 1040 bytes
.../greydragon/images/background-top.gif | Bin 0 -> 862 bytes
.../colorpacks/greydragon/images/background.gif | Bin 0 -> 1098 bytes
.../css/colorpacks/greydragon/images/colorpack.png | Bin 0 -> 414 bytes
.../css/colorpacks/greydragon/images/footer.png | Bin 0 -> 376 bytes
.../css/colorpacks/greydragon/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/greydragon/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/greydragon/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/greydragon/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/greydragon/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/greydragon/images/image-thumb.gif | Bin 0 -> 830 bytes
.../colorpacks/greydragon/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/greydragon/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/greydragon/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/greydragon/images/section.png | Bin 0 -> 192 bytes
.../css/colorpacks/greydragon/images/ui-icons.png | Bin 0 -> 13160 bytes
.../greydragon/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../colorpacks/greydragon/images/view-calendar.png | Bin 0 -> 429 bytes
.../greydragon/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/greydragon/images/view-comments.png | Bin 0 -> 492 bytes
.../greydragon/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../colorpacks/greydragon/images/view-fullsize.png | Bin 0 -> 407 bytes
.../colorpacks/greydragon/images/view-info-b.png | Bin 0 -> 493 bytes
.../colorpacks/greydragon/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/greydragon/images/view-info.png | Bin 0 -> 938 bytes
.../greydragon/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/roundrobin/css/colors.css | 193 +
.../colorpacks/roundrobin/images/ajax-loading.gif | Bin 0 -> 2545 bytes
.../css/colorpacks/roundrobin/images/bg-body.jpg | Bin 0 -> 13916 bytes
.../css/colorpacks/roundrobin/images/bg-header.jpg | Bin 0 -> 13609 bytes
.../css/colorpacks/roundrobin/images/colorpack.png | Bin 0 -> 475 bytes
.../css/colorpacks/roundrobin/images/gallery.png | Bin 0 -> 553 bytes
.../css/colorpacks/roundrobin/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/roundrobin/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/roundrobin/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/roundrobin/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/roundrobin/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/roundrobin/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/roundrobin/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/roundrobin/images/search.png | Bin 0 -> 550 bytes
.../css/colorpacks/roundrobin/images/ui-icons.png | Bin 0 -> 14168 bytes
.../roundrobin/images/view-calendar-b.png | Bin 0 -> 891 bytes
.../colorpacks/roundrobin/images/view-calendar.png | Bin 0 -> 260 bytes
.../roundrobin/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/roundrobin/images/view-comments.png | Bin 0 -> 298 bytes
.../roundrobin/images/view-fullsize-b.png | Bin 0 -> 670 bytes
.../colorpacks/roundrobin/images/view-fullsize.png | Bin 0 -> 275 bytes
.../colorpacks/roundrobin/images/view-info-b.png | Bin 0 -> 698 bytes
.../colorpacks/roundrobin/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/roundrobin/images/view-info.png | Bin 0 -> 286 bytes
.../roundrobin/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/slateblue/css/colors.css | 177 +
.../colorpacks/slateblue/images/ajax-loading.gif | Bin 0 -> 4782 bytes
.../css/colorpacks/slateblue/images/background.jpg | Bin 0 -> 907 bytes
.../css/colorpacks/slateblue/images/colorpack.png | Bin 0 -> 414 bytes
.../css/colorpacks/slateblue/images/footer.png | Bin 0 -> 376 bytes
.../css/colorpacks/slateblue/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/slateblue/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/slateblue/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/slateblue/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/slateblue/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/slateblue/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/slateblue/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/slateblue/images/search.png | Bin 0 -> 969 bytes
.../css/colorpacks/slateblue/images/section.png | Bin 0 -> 192 bytes
.../css/colorpacks/slateblue/images/ui-icons.png | Bin 0 -> 13160 bytes
.../slateblue/images/view-calendar-b.png | Bin 0 -> 653 bytes
.../colorpacks/slateblue/images/view-calendar.png | Bin 0 -> 429 bytes
.../slateblue/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/slateblue/images/view-comments.png | Bin 0 -> 492 bytes
.../slateblue/images/view-fullsize-b.png | Bin 0 -> 699 bytes
.../colorpacks/slateblue/images/view-fullsize.png | Bin 0 -> 407 bytes
.../colorpacks/slateblue/images/view-info-b.png | Bin 0 -> 493 bytes
.../colorpacks/slateblue/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/slateblue/images/view-info.png | Bin 0 -> 938 bytes
.../slateblue/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/whitehawk/css/colors.css | 174 +
.../colorpacks/whitehawk/images/ajax-loading.gif | Bin 0 -> 2545 bytes
.../css/colorpacks/whitehawk/images/colorpack.png | Bin 0 -> 417 bytes
.../css/colorpacks/whitehawk/images/gallery.png | Bin 0 -> 1383 bytes
.../css/colorpacks/whitehawk/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/whitehawk/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/whitehawk/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/whitehawk/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/whitehawk/images/ico-warning.png | Bin 0 -> 666 bytes
.../colorpacks/whitehawk/images/loading-large.gif | Bin 0 -> 8238 bytes
.../colorpacks/whitehawk/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/whitehawk/images/search.png | Bin 0 -> 571 bytes
.../css/colorpacks/whitehawk/images/ui-icons.png | Bin 0 -> 9914 bytes
.../whitehawk/images/view-calendar-b.png | Bin 0 -> 891 bytes
.../colorpacks/whitehawk/images/view-calendar.png | Bin 0 -> 260 bytes
.../whitehawk/images/view-comments-b.png | Bin 0 -> 600 bytes
.../colorpacks/whitehawk/images/view-comments.png | Bin 0 -> 298 bytes
.../whitehawk/images/view-fullsize-b.png | Bin 0 -> 670 bytes
.../colorpacks/whitehawk/images/view-fullsize.png | Bin 0 -> 275 bytes
.../colorpacks/whitehawk/images/view-info-b.png | Bin 0 -> 698 bytes
.../colorpacks/whitehawk/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/whitehawk/images/view-info.png | Bin 0 -> 286 bytes
.../whitehawk/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
.../css/colorpacks/wind/css/colors.css | 176 +
.../css/colorpacks/wind/images/ajax-loading.gif | Bin 0 -> 2545 bytes
.../css/colorpacks/wind/images/colorpack.png | Bin 0 -> 397 bytes
.../css/colorpacks/wind/images/ico-album.png | Bin 0 -> 351 bytes
.../css/colorpacks/wind/images/ico-error.png | Bin 0 -> 701 bytes
.../css/colorpacks/wind/images/ico-help.png | Bin 0 -> 786 bytes
.../css/colorpacks/wind/images/ico-info.png | Bin 0 -> 778 bytes
.../colorpacks/wind/images/ico-view-fullsize.png | Bin 0 -> 1207 bytes
.../wind/images/ico-view-slideshow-rtl.png | Bin 0 -> 1013 bytes
.../colorpacks/wind/images/ico-view-slideshow.png | Bin 0 -> 854 bytes
.../css/colorpacks/wind/images/ico-warning.png | Bin 0 -> 666 bytes
.../css/colorpacks/wind/images/loading-large.gif | Bin 0 -> 8238 bytes
.../css/colorpacks/wind/images/loading-small.gif | Bin 0 -> 673 bytes
.../css/colorpacks/wind/images/section.png | Bin 0 -> 314 bytes
.../css/colorpacks/wind/images/ui-icons.png | Bin 0 -> 10682 bytes
.../css/colorpacks/wind/images/view-calendar.png | Bin 0 -> 637 bytes
.../css/colorpacks/wind/images/view-comments-b.png | Bin 0 -> 892 bytes
.../css/colorpacks/wind/images/view-comments.png | Bin 0 -> 347 bytes
.../css/colorpacks/wind/images/view-fullsize.png | Bin 0 -> 365 bytes
.../css/colorpacks/wind/images/view-info-b.png | Bin 0 -> 698 bytes
.../css/colorpacks/wind/images/view-info-o.png | Bin 0 -> 259 bytes
.../css/colorpacks/wind/images/view-info.png | Bin 0 -> 383 bytes
.../colorpacks/wind/images/view-slideshow-b.png | Bin 0 -> 1179 bytes
themes/greydragon_old/css/custom.css | 2 +
themes/greydragon_old/css/forms.css | 113 +
.../css/framepacks/android/css/frame.css | 32 +
.../css/framepacks/android/images/thumb-dgt-e.png | Bin 0 -> 1482 bytes
.../framepacks/android/images/thumb-dgt-eext.png | Bin 0 -> 1939 bytes
.../framepacks/android/images/thumb-dgt-ext.png | Bin 0 -> 1791 bytes
.../css/framepacks/android/images/thumb-dgt.png | Bin 0 -> 1447 bytes
.../css/framepacks/android/images/thumb-flm-e.png | Bin 0 -> 1443 bytes
.../framepacks/android/images/thumb-flm-eext.png | Bin 0 -> 1796 bytes
.../framepacks/android/images/thumb-flm-ext.png | Bin 0 -> 1737 bytes
.../css/framepacks/android/images/thumb-flm.png | Bin 0 -> 1413 bytes
.../css/framepacks/android/images/thumb-sqr-e.png | Bin 0 -> 1579 bytes
.../framepacks/android/images/thumb-sqr-eext.png | Bin 0 -> 1916 bytes
.../framepacks/android/images/thumb-sqr-ext.png | Bin 0 -> 1900 bytes
.../css/framepacks/android/images/thumb-sqr.png | Bin 0 -> 1544 bytes
.../css/framepacks/android/images/thumb-wd-e.png | Bin 0 -> 1428 bytes
.../framepacks/android/images/thumb-wd-eext.png | Bin 0 -> 1720 bytes
.../css/framepacks/android/images/thumb-wd-ext.png | Bin 0 -> 1659 bytes
.../css/framepacks/android/images/thumb-wd.png | Bin 0 -> 1379 bytes
.../css/framepacks/book/css/frame.css | 59 +
.../css/framepacks/book/images/a-thumb-dgt-e.png | Bin 0 -> 1130 bytes
.../framepacks/book/images/a-thumb-dgt-eext.png | Bin 0 -> 1579 bytes
.../css/framepacks/book/images/a-thumb-dgt-ext.png | Bin 0 -> 1513 bytes
.../css/framepacks/book/images/a-thumb-dgt.png | Bin 0 -> 1062 bytes
.../css/framepacks/book/images/a-thumb-flm-e.png | Bin 0 -> 1105 bytes
.../framepacks/book/images/a-thumb-flm-eext.png | Bin 0 -> 1478 bytes
.../css/framepacks/book/images/a-thumb-flm-ext.png | Bin 0 -> 1300 bytes
.../css/framepacks/book/images/a-thumb-flm.png | Bin 0 -> 1030 bytes
.../css/framepacks/book/images/a-thumb-sqr-e.png | Bin 0 -> 1283 bytes
.../framepacks/book/images/a-thumb-sqr-eext.png | Bin 0 -> 1863 bytes
.../css/framepacks/book/images/a-thumb-sqr-ext.png | Bin 0 -> 1733 bytes
.../css/framepacks/book/images/a-thumb-sqr.png | Bin 0 -> 1225 bytes
.../css/framepacks/book/images/a-thumb-wd-e.png | Bin 0 -> 1073 bytes
.../css/framepacks/book/images/a-thumb-wd-eext.png | Bin 0 -> 1371 bytes
.../css/framepacks/book/images/a-thumb-wd-ext.png | Bin 0 -> 1265 bytes
.../css/framepacks/book/images/a-thumb-wd.png | Bin 0 -> 991 bytes
.../css/framepacks/book/images/thumb-dgt-e.png | Bin 0 -> 619 bytes
.../css/framepacks/book/images/thumb-dgt-eext.png | Bin 0 -> 802 bytes
.../css/framepacks/book/images/thumb-dgt-ext.png | Bin 0 -> 773 bytes
.../css/framepacks/book/images/thumb-dgt.png | Bin 0 -> 575 bytes
.../css/framepacks/book/images/thumb-flm-e.png | Bin 0 -> 613 bytes
.../css/framepacks/book/images/thumb-flm-eext.png | Bin 0 -> 783 bytes
.../css/framepacks/book/images/thumb-flm-ext.png | Bin 0 -> 625 bytes
.../css/framepacks/book/images/thumb-flm.png | Bin 0 -> 587 bytes
.../css/framepacks/book/images/thumb-sqr-e.png | Bin 0 -> 676 bytes
.../css/framepacks/book/images/thumb-sqr-eext.png | Bin 0 -> 902 bytes
.../css/framepacks/book/images/thumb-sqr-ext.png | Bin 0 -> 864 bytes
.../css/framepacks/book/images/thumb-sqr.png | Bin 0 -> 648 bytes
.../css/framepacks/book/images/thumb-wd-e.png | Bin 0 -> 600 bytes
.../css/framepacks/book/images/thumb-wd-eext.png | Bin 0 -> 727 bytes
.../css/framepacks/book/images/thumb-wd-ext.png | Bin 0 -> 695 bytes
.../css/framepacks/book/images/thumb-wd.png | Bin 0 -> 575 bytes
.../css/framepacks/darkglass/css/frame.css | 32 +
.../framepacks/darkglass/images/thumb-dgt-e.png | Bin 0 -> 1876 bytes
.../framepacks/darkglass/images/thumb-dgt-eext.png | Bin 0 -> 2132 bytes
.../framepacks/darkglass/images/thumb-dgt-ext.png | Bin 0 -> 2097 bytes
.../css/framepacks/darkglass/images/thumb-dgt.png | Bin 0 -> 1873 bytes
.../framepacks/darkglass/images/thumb-flm-e.png | Bin 0 -> 1814 bytes
.../framepacks/darkglass/images/thumb-flm-eext.png | Bin 0 -> 2092 bytes
.../framepacks/darkglass/images/thumb-flm-ext.png | Bin 0 -> 2048 bytes
.../css/framepacks/darkglass/images/thumb-flm.png | Bin 0 -> 1811 bytes
.../framepacks/darkglass/images/thumb-sqr-e.png | Bin 0 -> 1896 bytes
.../framepacks/darkglass/images/thumb-sqr-eext.png | Bin 0 -> 2220 bytes
.../framepacks/darkglass/images/thumb-sqr-ext.png | Bin 0 -> 2187 bytes
.../css/framepacks/darkglass/images/thumb-sqr.png | Bin 0 -> 3675 bytes
.../css/framepacks/darkglass/images/thumb-wd-e.png | Bin 0 -> 1787 bytes
.../framepacks/darkglass/images/thumb-wd-eext.png | Bin 0 -> 2051 bytes
.../framepacks/darkglass/images/thumb-wd-ext.png | Bin 0 -> 2006 bytes
.../css/framepacks/darkglass/images/thumb-wd.png | Bin 0 -> 1767 bytes
.../css/framepacks/greydragon/css/frame.css | 40 +
.../css/framepacks/iphone/css/frame.css | 31 +
.../css/framepacks/iphone/images/thumb-dgt-e.png | Bin 0 -> 2923 bytes
.../framepacks/iphone/images/thumb-dgt-eext.png | Bin 0 -> 3544 bytes
.../css/framepacks/iphone/images/thumb-dgt-ext.png | Bin 0 -> 3449 bytes
.../css/framepacks/iphone/images/thumb-dgt.png | Bin 0 -> 2813 bytes
.../css/framepacks/iphone/images/thumb-flm-e.png | Bin 0 -> 2734 bytes
.../framepacks/iphone/images/thumb-flm-eext.png | Bin 0 -> 3414 bytes
.../css/framepacks/iphone/images/thumb-flm-ext.png | Bin 0 -> 3272 bytes
.../css/framepacks/iphone/images/thumb-flm.png | Bin 0 -> 2612 bytes
.../css/framepacks/iphone/images/thumb-sqr-e.png | Bin 0 -> 2848 bytes
.../framepacks/iphone/images/thumb-sqr-eext.png | Bin 0 -> 3930 bytes
.../css/framepacks/iphone/images/thumb-sqr-ext.png | Bin 0 -> 3850 bytes
.../css/framepacks/iphone/images/thumb-sqr.png | Bin 0 -> 2759 bytes
.../css/framepacks/iphone/images/thumb-wd-e.png | Bin 0 -> 2769 bytes
.../css/framepacks/iphone/images/thumb-wd-eext.png | Bin 0 -> 3108 bytes
.../css/framepacks/iphone/images/thumb-wd-ext.png | Bin 0 -> 3012 bytes
.../css/framepacks/iphone/images/thumb-wd.png | Bin 0 -> 2676 bytes
.../css/framepacks/iphoto/css/frame.css | 31 +
.../css/framepacks/iphoto/images/thumb-dgt-e.png | Bin 0 -> 1093 bytes
.../framepacks/iphoto/images/thumb-dgt-eext.png | Bin 0 -> 1294 bytes
.../css/framepacks/iphoto/images/thumb-dgt-ext.png | Bin 0 -> 1251 bytes
.../css/framepacks/iphoto/images/thumb-dgt.png | Bin 0 -> 1065 bytes
.../css/framepacks/iphoto/images/thumb-flm-e.png | Bin 0 -> 1071 bytes
.../framepacks/iphoto/images/thumb-flm-eext.png | Bin 0 -> 1258 bytes
.../css/framepacks/iphoto/images/thumb-flm-ext.png | Bin 0 -> 1218 bytes
.../css/framepacks/iphoto/images/thumb-flm.png | Bin 0 -> 1045 bytes
.../css/framepacks/iphoto/images/thumb-sqr-e.png | Bin 0 -> 1141 bytes
.../framepacks/iphoto/images/thumb-sqr-eext.png | Bin 0 -> 1382 bytes
.../css/framepacks/iphoto/images/thumb-sqr-ext.png | Bin 0 -> 1342 bytes
.../css/framepacks/iphoto/images/thumb-sqr.png | Bin 0 -> 1110 bytes
.../css/framepacks/iphoto/images/thumb-wd-e.png | Bin 0 -> 1056 bytes
.../css/framepacks/iphoto/images/thumb-wd-eext.png | Bin 0 -> 1209 bytes
.../css/framepacks/iphoto/images/thumb-wd-ext.png | Bin 0 -> 1168 bytes
.../css/framepacks/iphoto/images/thumb-wd.png | Bin 0 -> 1015 bytes
.../css/framepacks/iphoto/views/frame.html.php | 5 +
.../css/framepacks/panel/css/frame.css | 35 +
.../css/framepacks/roundcorners/css/frame.css | 42 +
.../css/framepacks/simple/css/frame.css | 33 +
.../css/framepacks/wall/css/frame.css | 46 +
themes/greydragon_old/css/gd_common.css | 59 +
themes/greydragon_old/css/ipad.css | 20 +
themes/greydragon_old/css/layout.css | 67 +
themes/greydragon_old/css/menus.css | 58 +
themes/greydragon_old/css/modules.css | 164 +
themes/greydragon_old/css/normalize.css | 431 ++
themes/greydragon_old/css/rtl.css | 47 +
themes/greydragon_old/css/screen.css | 17 +
themes/greydragon_old/helpers/exif_event.php | 45 +
themes/greydragon_old/helpers/greydragon_event.php | 92 +
.../helpers/greydragon_installer.php | 30 +
themes/greydragon_old/helpers/greydragon_theme.php | 20 +
themes/greydragon_old/images/apple-touch-icon.png | Bin 0 -> 9420 bytes
themes/greydragon_old/images/arrows_left.png | Bin 0 -> 1895 bytes
themes/greydragon_old/images/arrows_right.png | Bin 0 -> 1826 bytes
themes/greydragon_old/images/avatar.jpg | Bin 0 -> 1442 bytes
themes/greydragon_old/images/blue-grad.png | Bin 0 -> 337 bytes
.../images/button-grad-active-vs.png | Bin 0 -> 152 bytes
themes/greydragon_old/images/button-grad-vs.png | Bin 0 -> 155 bytes
themes/greydragon_old/images/close.png | Bin 0 -> 564 bytes
themes/greydragon_old/images/donate.png | Bin 0 -> 399 bytes
themes/greydragon_old/images/gallery.png | Bin 0 -> 627 bytes
themes/greydragon_old/images/ico-allowed.png | Bin 0 -> 715 bytes
.../greydragon_old/images/ico-denied-inactive.png | Bin 0 -> 604 bytes
.../greydragon_old/images/ico-denied-passive.png | Bin 0 -> 916 bytes
themes/greydragon_old/images/ico-denied.png | Bin 0 -> 715 bytes
themes/greydragon_old/images/ico-error.png | Bin 0 -> 701 bytes
themes/greydragon_old/images/ico-help.png | Bin 0 -> 786 bytes
themes/greydragon_old/images/ico-info.png | Bin 0 -> 778 bytes
themes/greydragon_old/images/ico-lock.png | Bin 0 -> 749 bytes
.../greydragon_old/images/ico-success-inactive.png | Bin 0 -> 261 bytes
.../greydragon_old/images/ico-success-passive.png | Bin 0 -> 561 bytes
themes/greydragon_old/images/ico-success.png | Bin 0 -> 537 bytes
themes/greydragon_old/images/ico-warning.png | Bin 0 -> 666 bytes
themes/greydragon_old/images/missing-img.png | Bin 0 -> 33136 bytes
themes/greydragon_old/js/jquery.cycle.js | 1544 +++++
themes/greydragon_old/js/ui.support.js | 80 +
themes/greydragon_old/libraries/MY_Theme_View.php | 902 +++
themes/greydragon_old/module.info | 9 +
themes/greydragon_old/theme.info | 11 +
themes/greydragon_old/thumbnail.png | Bin 0 -> 25791 bytes
themes/greydragon_old/views/album.html.php | 68 +
themes/greydragon_old/views/block.html.php | 29 +
themes/greydragon_old/views/calpage.html.php | 257 +
themes/greydragon_old/views/dynamic.html.php | 38 +
themes/greydragon_old/views/exif_sidebar.html.php | 18 +
.../greydragon_old/views/gd_admin_include.html.php | 180 +
themes/greydragon_old/views/info_block.html.php | 29 +
themes/greydragon_old/views/movie.html.php | 38 +
themes/greydragon_old/views/no_sidebar.html.php | 19 +
themes/greydragon_old/views/page.html.php | 259 +
themes/greydragon_old/views/paginator.html.php | 194 +
themes/greydragon_old/views/photo.html.php | 124 +
themes/greydragon_old/views/rootpage.html.php | 59 +
themes/greydragon_old/views/rootpage.html.php_fix | 46 +
themes/greydragon_old/views/rss_block.html.php | 30 +
themes/greydragon_old/views/search.html.php | 35 +
themes/greydragon_old/views/sidebar.html.php | 27 +
themes/greydragon_old/views/user_profile.html.php | 44 +
themes/wind/css/fix-ie.css | 59 +
themes/wind/css/screen-rtl.css | 333 +
themes/wind/css/screen.css | 1066 +++
.../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes
.../images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 182 bytes
.../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 124 bytes
.../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 123 bytes
.../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes
.../images/ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 4033 bytes
.../images/ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 104 bytes
.../images/ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 88 bytes
.../themeroller/images/ui-icons_217bc0_256x240.png | Bin 0 -> 7638 bytes
.../themeroller/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 7626 bytes
.../themeroller/images/ui-icons_469bdd_256x240.png | Bin 0 -> 5399 bytes
.../themeroller/images/ui-icons_6da8d5_256x240.png | Bin 0 -> 8447 bytes
.../themeroller/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4379 bytes
.../themeroller/images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4379 bytes
.../themeroller/images/ui-icons_f9bd01_256x240.png | Bin 0 -> 4379 bytes
themes/wind/css/themeroller/ui.base.css | 7 +
themes/wind/css/themeroller/ui.core.css | 37 +
themes/wind/css/themeroller/ui.datepicker.css | 62 +
themes/wind/css/themeroller/ui.dialog.css | 13 +
themes/wind/css/themeroller/ui.progressbar.css | 4 +
themes/wind/css/themeroller/ui.resizable.css | 13 +
themes/wind/css/themeroller/ui.tabs.css | 9 +
themes/wind/css/themeroller/ui.theme.css | 243 +
themes/wind/images/avatar.jpg | Bin 0 -> 1172 bytes
themes/wind/images/ico-album.png | Bin 0 -> 397 bytes
themes/wind/images/ico-denied-inactive.png | Bin 0 -> 604 bytes
themes/wind/images/ico-denied-passive.png | Bin 0 -> 916 bytes
themes/wind/images/ico-denied.png | Bin 0 -> 715 bytes
themes/wind/images/ico-error.png | Bin 0 -> 701 bytes
themes/wind/images/ico-help.png | Bin 0 -> 786 bytes
themes/wind/images/ico-info.png | Bin 0 -> 778 bytes
themes/wind/images/ico-lock.png | Bin 0 -> 749 bytes
themes/wind/images/ico-print.png | Bin 0 -> 989 bytes
themes/wind/images/ico-separator-rtl.gif | Bin 0 -> 106 bytes
themes/wind/images/ico-separator.gif | Bin 0 -> 106 bytes
themes/wind/images/ico-success-inactive.png | Bin 0 -> 476 bytes
themes/wind/images/ico-success-passive.png | Bin 0 -> 617 bytes
themes/wind/images/ico-success.png | Bin 0 -> 537 bytes
themes/wind/images/ico-view-comments.png | Bin 0 -> 768 bytes
themes/wind/images/ico-view-fullsize.png | Bin 0 -> 1046 bytes
themes/wind/images/ico-view-slideshow-rtl.png | Bin 0 -> 1137 bytes
themes/wind/images/ico-view-slideshow.png | Bin 0 -> 960 bytes
themes/wind/images/ico-warning.png | Bin 0 -> 666 bytes
themes/wind/images/loading-large.gif | Bin 0 -> 8238 bytes
themes/wind/images/loading-small.gif | Bin 0 -> 673 bytes
themes/wind/images/select-photos-backg.png | Bin 0 -> 1154 bytes
themes/wind/js/ui.init.js | 118 +
themes/wind/theme.info | 10 +
themes/wind/thumbnail.png | Bin 0 -> 26927 bytes
themes/wind/views/album.html.php | 47 +
themes/wind/views/block.html.php | 10 +
themes/wind/views/dynamic.html.php | 29 +
themes/wind/views/movie.html.php | 19 +
themes/wind/views/no_sidebar.html.php | 11 +
themes/wind/views/page.html.php | 153 +
themes/wind/views/paginator.html.php | 87 +
themes/wind/views/photo.html.php | 51 +
themes/wind/views/sidebar.html.php | 16 +
1476 files changed, 103573 insertions(+)
create mode 100644 .gitignore
create mode 100644 .htaccess
create mode 100644 LICENSE
create mode 100644 README
create mode 100644 application/Bootstrap.php
create mode 100644 application/config/config.php
create mode 100755 bin/.htaccess
create mode 100644 bin/README
create mode 100644 index.php
create mode 100644 installer/cli.php
create mode 100644 installer/database_config.php
create mode 100644 installer/index.php
create mode 100755 installer/init_var.php
create mode 100644 installer/install.css
create mode 100644 installer/install.sql
create mode 100644 installer/installer.php
create mode 100644 installer/views/already_installed.html.php
create mode 100644 installer/views/db_not_empty.html.php
create mode 100644 installer/views/environment_errors.html.php
create mode 100644 installer/views/get_db_info.html.php
create mode 100644 installer/views/install.html.php
create mode 100644 installer/views/invalid_db_info.html.php
create mode 100644 installer/views/invalid_db_version.html.php
create mode 100644 installer/views/missing_db.html.php
create mode 100644 installer/views/oops.html.php
create mode 100644 installer/views/success.html.php
create mode 100644 installer/web.php
create mode 100644 lib/flowplayer.controls.swf.php
create mode 100644 lib/flowplayer.js
create mode 100644 lib/flowplayer.pseudostreaming-byterange.swf.php
create mode 100644 lib/flowplayer.pseudostreaming.swf.php
create mode 100644 lib/flowplayer.swf.php
create mode 100644 lib/gallery.ajax.js
create mode 100644 lib/gallery.common.js
create mode 100644 lib/gallery.dialog.js
create mode 100644 lib/gallery.in_place_edit.js
create mode 100644 lib/gallery.panel.js
create mode 100644 lib/gallery.show_full_size.js
create mode 100644 lib/images/Galerie-Logo.png
create mode 100644 lib/images/apple-touch-icon.png
create mode 100644 lib/images/favicon.ico
create mode 100644 lib/images/logo.png
create mode 100644 lib/jquery-ui.js
create mode 100644 lib/jquery.MultiFile.js
create mode 100644 lib/jquery.autocomplete.css
create mode 100644 lib/jquery.autocomplete.js
create mode 100644 lib/jquery.cookie.js
create mode 100644 lib/jquery.form.js
create mode 100644 lib/jquery.jeditable.js
create mode 100644 lib/jquery.js
create mode 100644 lib/jquery.localscroll.js
create mode 100644 lib/jquery.scrollTo.js
create mode 100644 lib/json2-min.js
create mode 100644 lib/superfish/css/superfish.css
create mode 100644 lib/superfish/images/arrows-ffffff-rtl.png
create mode 100644 lib/superfish/images/arrows-ffffff.png
create mode 100644 lib/superfish/images/shadow.png
create mode 100644 lib/superfish/js/superfish.js
create mode 100644 lib/swfobject.js
create mode 100644 lib/uploadify/cancel.png
create mode 100644 lib/uploadify/jquery.uploadify.min.js
create mode 100644 lib/uploadify/uploadify.allglyphs.swf.php
create mode 100644 lib/uploadify/uploadify.css
create mode 100644 lib/uploadify/uploadify.fla
create mode 100644 lib/uploadify/uploadify.swf.php
create mode 100644 lib/yui/base-min.css
create mode 100644 lib/yui/reset-fonts-grids.css
create mode 100644 modules/akismet/controllers/admin_akismet.php
create mode 100644 modules/akismet/helpers/akismet.php
create mode 100644 modules/akismet/helpers/akismet_event.php
create mode 100644 modules/akismet/helpers/akismet_installer.php
create mode 100644 modules/akismet/module.info
create mode 100644 modules/akismet/views/admin_akismet.html.php
create mode 100644 modules/akismet/views/admin_akismet_stats.html.php
create mode 100644 modules/calendarview/controllers/calendarview.php
create mode 100644 modules/calendarview/css/calendarview_calendar.css
create mode 100644 modules/calendarview/css/calendarview_menu.css
create mode 100644 modules/calendarview/helpers/calendarview.php
create mode 100644 modules/calendarview/helpers/calendarview_block.php
create mode 100644 modules/calendarview/helpers/calendarview_event.php
create mode 100644 modules/calendarview/helpers/calendarview_installer.php
create mode 100644 modules/calendarview/helpers/calendarview_theme.php
create mode 100644 modules/calendarview/images/ico-view-calendarview.png
create mode 100644 modules/calendarview/libraries/PHPCalendar.php
create mode 100644 modules/calendarview/module.info
create mode 100644 modules/calendarview/views/calendarview_sidebar.html.php
create mode 100644 modules/calendarview/views/calendarview_year.html.php
create mode 100644 modules/calendarview/views/user_profile_calendarview.html.php
create mode 100644 modules/comment/controllers/admin_comments.php
create mode 100644 modules/comment/controllers/admin_manage_comments.php
create mode 100644 modules/comment/controllers/comments.php
create mode 100644 modules/comment/css/comment.css
create mode 100644 modules/comment/helpers/comment.php
create mode 100644 modules/comment/helpers/comment_block.php
create mode 100644 modules/comment/helpers/comment_event.php
create mode 100644 modules/comment/helpers/comment_installer.php
create mode 100644 modules/comment/helpers/comment_rest.php
create mode 100644 modules/comment/helpers/comment_rss.php
create mode 100644 modules/comment/helpers/comment_theme.php
create mode 100644 modules/comment/helpers/comments_rest.php
create mode 100644 modules/comment/helpers/item_comments_rest.php
create mode 100644 modules/comment/js/comment.js
create mode 100644 modules/comment/models/comment.php
create mode 100644 modules/comment/module.info
create mode 100644 modules/comment/views/admin_block_recent_comments.html.php
create mode 100644 modules/comment/views/admin_comments.html.php
create mode 100644 modules/comment/views/admin_manage_comments.html.php
create mode 100644 modules/comment/views/admin_manage_comments_queue.html.php
create mode 100644 modules/comment/views/comment.html.php
create mode 100644 modules/comment/views/comment.mrss.php
create mode 100644 modules/comment/views/comments.html.php
create mode 100644 modules/comment/views/user_profile_comments.html.php
create mode 100644 modules/downloadalbum/controllers/downloadalbum.php
create mode 100644 modules/downloadalbum/css/downloadalbum_menu.css
create mode 100644 modules/downloadalbum/helpers/downloadalbum_event.php
create mode 100644 modules/downloadalbum/helpers/downloadalbum_theme.php
create mode 100644 modules/downloadalbum/images/ico-view-downloadalbum.png
create mode 100644 modules/downloadalbum/module.info
create mode 100644 modules/downloadfullsize/controllers/admin_downloadfullsize.php
create mode 100644 modules/downloadfullsize/controllers/downloadfullsize.php
create mode 100644 modules/downloadfullsize/css/downloadfullsize_menu.css
create mode 100644 modules/downloadfullsize/helpers/downloadfullsize_block.php
create mode 100644 modules/downloadfullsize/helpers/downloadfullsize_event.php
create mode 100644 modules/downloadfullsize/helpers/downloadfullsize_theme.php
create mode 100644 modules/downloadfullsize/images/ico-view-downloadfullsize.png
create mode 100644 modules/downloadfullsize/module.info
create mode 100644 modules/downloadfullsize/views/admin_downloadfullsize.html.php
create mode 100644 modules/downloadfullsize/views/downloadfullsize_block.html.php
create mode 100644 modules/exif/controllers/exif.php
create mode 100644 modules/exif/helpers/exif.php
create mode 100644 modules/exif/helpers/exif_event.php
create mode 100644 modules/exif/helpers/exif_installer.php
create mode 100644 modules/exif/helpers/exif_task.php
create mode 100644 modules/exif/helpers/exif_theme.php
create mode 100644 modules/exif/lib/exif.php
create mode 100644 modules/exif/lib/makers/canon.php
create mode 100644 modules/exif/lib/makers/fujifilm.php
create mode 100644 modules/exif/lib/makers/gps.php
create mode 100644 modules/exif/lib/makers/nikon.php
create mode 100644 modules/exif/lib/makers/olympus.php
create mode 100644 modules/exif/lib/makers/panasonic.php
create mode 100644 modules/exif/lib/makers/sanyo.php
create mode 100644 modules/exif/models/exif_key.php
create mode 100644 modules/exif/models/exif_record.php
create mode 100644 modules/exif/module.info
create mode 100644 modules/exif/views/exif_dialog.html.php
create mode 100644 modules/exif/views/exif_sidebar.html.php
create mode 100644 modules/familygallery/controllers/login.php.backup
create mode 100644 modules/familygallery/helpers/familygallery_event.php
create mode 100644 modules/familygallery/module.info
create mode 100644 modules/forge/libraries/Forge.php
create mode 100644 modules/forge/libraries/Form_Checkbox.php
create mode 100644 modules/forge/libraries/Form_Checklist.php
create mode 100644 modules/forge/libraries/Form_Dateselect.php
create mode 100644 modules/forge/libraries/Form_Dropdown.php
create mode 100644 modules/forge/libraries/Form_Group.php
create mode 100644 modules/forge/libraries/Form_Hidden.php
create mode 100644 modules/forge/libraries/Form_Input.php
create mode 100644 modules/forge/libraries/Form_Password.php
create mode 100644 modules/forge/libraries/Form_Phonenumber.php
create mode 100644 modules/forge/libraries/Form_Radio.php
create mode 100644 modules/forge/libraries/Form_Submit.php
create mode 100644 modules/forge/libraries/Form_Textarea.php
create mode 100644 modules/forge/libraries/Form_Upload.php
create mode 100644 modules/g2_import/controllers/admin_g2_import.php
create mode 100644 modules/g2_import/controllers/g2.php
create mode 100755 modules/g2_import/data/broken-image.gif
create mode 100644 modules/g2_import/helpers/g2_import.php
create mode 100644 modules/g2_import/helpers/g2_import_event.php
create mode 100644 modules/g2_import/helpers/g2_import_installer.php
create mode 100644 modules/g2_import/helpers/g2_import_task.php
create mode 100644 modules/g2_import/libraries/G2_Import_Exception.php
create mode 100644 modules/g2_import/models/g2_map.php
create mode 100644 modules/g2_import/module.info
create mode 100644 modules/g2_import/views/admin_g2_import.html.php
create mode 100644 modules/gallery/config/cache.php
create mode 100644 modules/gallery/config/cookie.php
create mode 100644 modules/gallery/config/database.php
create mode 100644 modules/gallery/config/locale.php
create mode 100644 modules/gallery/config/log_file.php
create mode 100644 modules/gallery/config/routes.php
create mode 100644 modules/gallery/config/session.php
create mode 100644 modules/gallery/config/upload.php
create mode 100644 modules/gallery/config/user_agents.php
create mode 100644 modules/gallery/controllers/admin.php
create mode 100644 modules/gallery/controllers/admin_advanced_settings.php
create mode 100644 modules/gallery/controllers/admin_dashboard.php
create mode 100644 modules/gallery/controllers/admin_graphics.php
create mode 100644 modules/gallery/controllers/admin_languages.php
create mode 100644 modules/gallery/controllers/admin_maintenance.php
create mode 100644 modules/gallery/controllers/admin_modules.php
create mode 100644 modules/gallery/controllers/admin_movies.php
create mode 100644 modules/gallery/controllers/admin_sidebar.php
create mode 100644 modules/gallery/controllers/admin_theme_options.php
create mode 100644 modules/gallery/controllers/admin_themes.php
create mode 100644 modules/gallery/controllers/admin_upgrade_checker.php
create mode 100644 modules/gallery/controllers/albums.php
create mode 100644 modules/gallery/controllers/combined.php
create mode 100644 modules/gallery/controllers/file_proxy.php
create mode 100644 modules/gallery/controllers/items.php
create mode 100644 modules/gallery/controllers/l10n_client.php
create mode 100644 modules/gallery/controllers/login.php
create mode 100644 modules/gallery/controllers/logout.php
create mode 100644 modules/gallery/controllers/movies.php
create mode 100644 modules/gallery/controllers/packager.php
create mode 100644 modules/gallery/controllers/permissions.php
create mode 100644 modules/gallery/controllers/photos.php
create mode 100644 modules/gallery/controllers/quick.php
create mode 100644 modules/gallery/controllers/reauthenticate.php
create mode 100644 modules/gallery/controllers/upgrader.php
create mode 100644 modules/gallery/controllers/uploader.php
create mode 100644 modules/gallery/controllers/user_profile.php
create mode 100644 modules/gallery/controllers/welcome_message.php
create mode 100644 modules/gallery/css/debug.css
create mode 100644 modules/gallery/css/gallery.css
create mode 100644 modules/gallery/css/l10n_client.css
create mode 100644 modules/gallery/css/upgrader.css
create mode 100644 modules/gallery/helpers/MY_html.php
create mode 100644 modules/gallery/helpers/MY_num.php
create mode 100644 modules/gallery/helpers/MY_remote.php
create mode 100644 modules/gallery/helpers/MY_url.php
create mode 100644 modules/gallery/helpers/MY_valid.php
create mode 100644 modules/gallery/helpers/access.php
create mode 100644 modules/gallery/helpers/ajax.php
create mode 100644 modules/gallery/helpers/album.php
create mode 100644 modules/gallery/helpers/auth.php
create mode 100644 modules/gallery/helpers/batch.php
create mode 100644 modules/gallery/helpers/block_manager.php
create mode 100644 modules/gallery/helpers/data_rest.php
create mode 100644 modules/gallery/helpers/dir.php
create mode 100644 modules/gallery/helpers/encoding.php
create mode 100644 modules/gallery/helpers/gallery.php
create mode 100644 modules/gallery/helpers/gallery_block.php
create mode 100644 modules/gallery/helpers/gallery_error.php
create mode 100644 modules/gallery/helpers/gallery_event.php
create mode 100644 modules/gallery/helpers/gallery_graphics.php
create mode 100644 modules/gallery/helpers/gallery_installer.php
create mode 100644 modules/gallery/helpers/gallery_rss.php
create mode 100644 modules/gallery/helpers/gallery_task.php
create mode 100644 modules/gallery/helpers/gallery_theme.php
create mode 100644 modules/gallery/helpers/graphics.php
create mode 100644 modules/gallery/helpers/identity.php
create mode 100644 modules/gallery/helpers/item.php
create mode 100644 modules/gallery/helpers/item_rest.php
create mode 100644 modules/gallery/helpers/items_rest.php
create mode 100644 modules/gallery/helpers/json.php
create mode 100644 modules/gallery/helpers/l10n_client.php
create mode 100644 modules/gallery/helpers/l10n_scanner.php
create mode 100644 modules/gallery/helpers/legal_file.php
create mode 100644 modules/gallery/helpers/locales.php
create mode 100644 modules/gallery/helpers/log.php
create mode 100644 modules/gallery/helpers/message.php
create mode 100644 modules/gallery/helpers/model_cache.php
create mode 100644 modules/gallery/helpers/module.php
create mode 100644 modules/gallery/helpers/movie.php
create mode 100644 modules/gallery/helpers/photo.php
create mode 100644 modules/gallery/helpers/random.php
create mode 100644 modules/gallery/helpers/site_status.php
create mode 100644 modules/gallery/helpers/system.php
create mode 100644 modules/gallery/helpers/task.php
create mode 100644 modules/gallery/helpers/theme.php
create mode 100644 modules/gallery/helpers/tree_rest.php
create mode 100644 modules/gallery/helpers/upgrade_checker.php
create mode 100644 modules/gallery/helpers/user_profile.php
create mode 100644 modules/gallery/helpers/xml.php
create mode 100644 modules/gallery/hooks/init_gallery.php
create mode 100644 modules/gallery/images/ffmpeg.png
create mode 100644 modules/gallery/images/gallery.png
create mode 100644 modules/gallery/images/gd.png
create mode 100644 modules/gallery/images/graphicsmagick.png
create mode 100644 modules/gallery/images/imagemagick.jpg
create mode 100644 modules/gallery/images/missing_album_cover.jpg
create mode 100644 modules/gallery/images/missing_movie.jpg
create mode 100644 modules/gallery/images/missing_photo.jpg
create mode 100644 modules/gallery/js/albums_form_add.js
create mode 100644 modules/gallery/js/item_form_delete.js
create mode 100644 modules/gallery/js/l10n_client.js
create mode 100644 modules/gallery/libraries/Admin_View.php
create mode 100644 modules/gallery/libraries/Block.php
create mode 100644 modules/gallery/libraries/Breadcrumb.php
create mode 100644 modules/gallery/libraries/Form_Script.php
create mode 100644 modules/gallery/libraries/Form_Uploadify.php
create mode 100644 modules/gallery/libraries/Form_Uploadify_buttons.php
create mode 100644 modules/gallery/libraries/Gallery_I18n.php
create mode 100644 modules/gallery/libraries/Gallery_View.php
create mode 100644 modules/gallery/libraries/IdentityProvider.php
create mode 100644 modules/gallery/libraries/InPlaceEdit.php
create mode 100644 modules/gallery/libraries/MY_Database.php
create mode 100644 modules/gallery/libraries/MY_Forge.php
create mode 100644 modules/gallery/libraries/MY_Input.php
create mode 100644 modules/gallery/libraries/MY_Kohana_Exception.php
create mode 100644 modules/gallery/libraries/MY_ORM.php
create mode 100644 modules/gallery/libraries/MY_View.php
create mode 100644 modules/gallery/libraries/Menu.php
create mode 100644 modules/gallery/libraries/ORM_MPTT.php
create mode 100644 modules/gallery/libraries/SafeString.php
create mode 100644 modules/gallery/libraries/Sendmail.php
create mode 100644 modules/gallery/libraries/Task_Definition.php
create mode 100644 modules/gallery/libraries/Theme_View.php
create mode 100644 modules/gallery/libraries/drivers/Cache/Database.php
create mode 100644 modules/gallery/libraries/drivers/IdentityProvider.php
create mode 100644 modules/gallery/models/access_cache.php
create mode 100644 modules/gallery/models/access_intent.php
create mode 100644 modules/gallery/models/cache.php
create mode 100644 modules/gallery/models/failed_auth.php
create mode 100644 modules/gallery/models/graphics_rule.php
create mode 100644 modules/gallery/models/incoming_translation.php
create mode 100644 modules/gallery/models/item.php
create mode 100644 modules/gallery/models/log.php
create mode 100644 modules/gallery/models/message.php
create mode 100644 modules/gallery/models/module.php
create mode 100644 modules/gallery/models/outgoing_translation.php
create mode 100644 modules/gallery/models/permission.php
create mode 100644 modules/gallery/models/task.php
create mode 100644 modules/gallery/models/theme.php
create mode 100644 modules/gallery/models/var.php
create mode 100644 modules/gallery/module.info
create mode 100644 modules/gallery/vendor/joomla/crypt.php
create mode 100644 modules/gallery/views/admin_advanced_settings.html.php
create mode 100644 modules/gallery/views/admin_block_log_entries.html.php
create mode 100644 modules/gallery/views/admin_block_news.html.php
create mode 100644 modules/gallery/views/admin_block_photo_stream.html.php
create mode 100644 modules/gallery/views/admin_block_platform.html.php
create mode 100644 modules/gallery/views/admin_block_stats.html.php
create mode 100644 modules/gallery/views/admin_block_welcome.html.php
create mode 100644 modules/gallery/views/admin_dashboard.html.php
create mode 100644 modules/gallery/views/admin_graphics.html.php
create mode 100644 modules/gallery/views/admin_graphics_gd.html.php
create mode 100644 modules/gallery/views/admin_graphics_graphicsmagick.html.php
create mode 100644 modules/gallery/views/admin_graphics_imagemagick.html.php
create mode 100644 modules/gallery/views/admin_graphics_none.html.php
create mode 100644 modules/gallery/views/admin_languages.html.php
create mode 100644 modules/gallery/views/admin_maintenance.html.php
create mode 100644 modules/gallery/views/admin_maintenance_show_log.html.php
create mode 100644 modules/gallery/views/admin_maintenance_task.html.php
create mode 100644 modules/gallery/views/admin_modules.html.php
create mode 100644 modules/gallery/views/admin_modules_confirm.html.php
create mode 100644 modules/gallery/views/admin_movies.html.php
create mode 100644 modules/gallery/views/admin_sidebar.html.php
create mode 100644 modules/gallery/views/admin_sidebar_blocks.html.php
create mode 100644 modules/gallery/views/admin_theme_options.html.php
create mode 100644 modules/gallery/views/admin_themes.html.php
create mode 100644 modules/gallery/views/admin_themes_buttonset.html.php
create mode 100644 modules/gallery/views/admin_themes_preview.html.php
create mode 100644 modules/gallery/views/error.html.php
create mode 100644 modules/gallery/views/error_404.html.php
create mode 100644 modules/gallery/views/error_admin.html.php
create mode 100644 modules/gallery/views/error_cli.txt.php
create mode 100644 modules/gallery/views/error_user.html.php
create mode 100644 modules/gallery/views/form.html.php
create mode 100644 modules/gallery/views/form_uploadify.html.php
create mode 100644 modules/gallery/views/form_uploadify_buttons.html.php
create mode 100644 modules/gallery/views/in_place_edit.html.php
create mode 100644 modules/gallery/views/kohana/error.php
create mode 100644 modules/gallery/views/kohana_profiler.php
create mode 100644 modules/gallery/views/l10n_client.html.php
create mode 100644 modules/gallery/views/login_ajax.html.php
create mode 100644 modules/gallery/views/login_current_user.html.php
create mode 100644 modules/gallery/views/menu.html.php
create mode 100644 modules/gallery/views/menu_ajax_link.html.php
create mode 100644 modules/gallery/views/menu_dialog.html.php
create mode 100644 modules/gallery/views/menu_link.html.php
create mode 100644 modules/gallery/views/movieplayer.html.php
create mode 100644 modules/gallery/views/permissions_browse.html.php
create mode 100644 modules/gallery/views/permissions_form.html.php
create mode 100644 modules/gallery/views/quick_delete_confirm.html.php
create mode 100644 modules/gallery/views/reauthenticate.html.php
create mode 100644 modules/gallery/views/upgrade_checker_block.html.php
create mode 100644 modules/gallery/views/upgrader.html.php
create mode 100644 modules/gallery/views/user_languages_block.html.php
create mode 100644 modules/gallery/views/user_profile.html.php
create mode 100644 modules/gallery/views/user_profile_info.html.php
create mode 100644 modules/gallery/views/welcome_message.html.php
create mode 100644 modules/gallery/views/welcome_message_loader.html.php
create mode 100644 modules/greydragon/changelog.txt
create mode 100644 modules/greydragon/css/gd_common.css
create mode 100644 modules/greydragon/images/blue-grad.png
create mode 100644 modules/greydragon/module.info
create mode 100644 modules/greydragon/views/gd_admin_include.html.php
create mode 100644 modules/html5_uploader/controllers/uploader.php
create mode 100644 modules/html5_uploader/module.info
create mode 100644 modules/image_block/controllers/image_block.php
create mode 100644 modules/image_block/helpers/image_block_block.php
create mode 100644 modules/image_block/helpers/image_block_installer.php
create mode 100644 modules/image_block/module.info
create mode 100644 modules/image_block/views/image_block_block.html.php
create mode 100644 modules/info/helpers/info_block.php
create mode 100644 modules/info/helpers/info_installer.php
create mode 100644 modules/info/helpers/info_theme.php
create mode 100644 modules/info/module.info
create mode 100644 modules/info/views/info_block.html.php
create mode 100644 modules/kbd_nav/changelog.txt
create mode 100644 modules/kbd_nav/helpers/kbd_nav_theme.php
create mode 100644 modules/kbd_nav/js/kbd_nav.js
create mode 100644 modules/kbd_nav/module.info
create mode 100644 modules/kohana23_compat/config/pagination.php
create mode 100644 modules/kohana23_compat/libraries/MY_Database_Builder.php
create mode 100644 modules/kohana23_compat/libraries/Pagination.php
create mode 100644 modules/localprint/controllers/admin_localprint.php
create mode 100644 modules/localprint/css/localprint_menu.css
create mode 100644 modules/localprint/helpers/localprint_event.php
create mode 100644 modules/localprint/helpers/localprint_installer.php
create mode 100644 modules/localprint/helpers/localprint_theme.php
create mode 100644 modules/localprint/images/localprint_logo.png
create mode 100644 modules/localprint/js/localprint.js
create mode 100644 modules/localprint/module.info
create mode 100644 modules/localprint/views/admin_localprint.html.php
create mode 100644 modules/localprint/views/localprint_code.html.php
create mode 100644 modules/notification/controllers/notification.php
create mode 100644 modules/notification/helpers/notification.php
create mode 100644 modules/notification/helpers/notification_event.php
create mode 100644 modules/notification/helpers/notification_installer.php
create mode 100644 modules/notification/models/pending_notification.php
create mode 100644 modules/notification/models/subscription.php
create mode 100644 modules/notification/module.info
create mode 100644 modules/notification/views/comment_published.html.php
create mode 100644 modules/notification/views/item_added.html.php
create mode 100644 modules/notification/views/item_deleted.html.php
create mode 100644 modules/notification/views/item_updated.html.php
create mode 100644 modules/notification/views/user_profile_notification.html.php
create mode 100644 modules/organize/controllers/organize.php
create mode 100644 modules/organize/css/organize_dialog.css
create mode 100644 modules/organize/css/organize_frame.css
create mode 100644 modules/organize/helpers/organize_event.php
create mode 100644 modules/organize/helpers/organize_installer.php
create mode 100644 modules/organize/module.info
create mode 100644 modules/organize/vendor/ext/css/ext-all.css
create mode 100644 modules/organize/vendor/ext/css/ux-all.css
create mode 100644 modules/organize/vendor/ext/images/default/box/tb-blue.gif
create mode 100644 modules/organize/vendor/ext/images/default/button/btn.gif
create mode 100644 modules/organize/vendor/ext/images/default/dd/drop-no.gif
create mode 100644 modules/organize/vendor/ext/images/default/dd/drop-yes.gif
create mode 100644 modules/organize/vendor/ext/images/default/form/text-bg.gif
create mode 100644 modules/organize/vendor/ext/images/default/form/trigger.gif
create mode 100644 modules/organize/vendor/ext/images/default/grid/invalid_line.gif
create mode 100644 modules/organize/vendor/ext/images/default/grid/loading.gif
create mode 100644 modules/organize/vendor/ext/images/default/panel/tool-sprites.gif
create mode 100644 modules/organize/vendor/ext/images/default/panel/white-top-bottom.gif
create mode 100644 modules/organize/vendor/ext/images/default/progress/progress-bg.gif
create mode 100644 modules/organize/vendor/ext/images/default/qtip/bg.gif
create mode 100644 modules/organize/vendor/ext/images/default/s.gif
create mode 100644 modules/organize/vendor/ext/images/default/shadow-c.png
create mode 100644 modules/organize/vendor/ext/images/default/shadow-lr.png
create mode 100644 modules/organize/vendor/ext/images/default/shadow.png
create mode 100644 modules/organize/vendor/ext/images/default/toolbar/bg.gif
create mode 100644 modules/organize/vendor/ext/images/default/tree/arrows.gif
create mode 100644 modules/organize/vendor/ext/images/default/tree/drop-add.gif
create mode 100644 modules/organize/vendor/ext/images/default/tree/drop-between.gif
create mode 100644 modules/organize/vendor/ext/images/default/tree/drop-over.gif
create mode 100644 modules/organize/vendor/ext/images/default/tree/folder-open.gif
create mode 100644 modules/organize/vendor/ext/images/default/tree/folder.gif
create mode 100644 modules/organize/vendor/ext/images/default/tree/loading.gif
create mode 100644 modules/organize/vendor/ext/images/default/window/left-corners.png
create mode 100644 modules/organize/vendor/ext/images/default/window/left-right.png
create mode 100644 modules/organize/vendor/ext/images/default/window/right-corners.png
create mode 100644 modules/organize/vendor/ext/images/default/window/top-bottom.png
create mode 100644 modules/organize/vendor/ext/images/fam/delete.gif
create mode 100644 modules/organize/vendor/ext/js/ext-organize-bundle.js
create mode 100644 modules/organize/views/organize_dialog.html.php
create mode 100644 modules/organize/views/organize_frame.html.php
create mode 100644 modules/recaptcha/controllers/admin_recaptcha.php
create mode 100644 modules/recaptcha/css/recaptcha.css
create mode 100644 modules/recaptcha/helpers/recaptcha.php
create mode 100644 modules/recaptcha/helpers/recaptcha_event.php
create mode 100644 modules/recaptcha/helpers/recaptcha_installer.php
create mode 100644 modules/recaptcha/helpers/recaptcha_theme.php
create mode 100644 modules/recaptcha/libraries/Form_Recaptcha.php
create mode 100644 modules/recaptcha/module.info
create mode 100644 modules/recaptcha/views/admin_recaptcha.html.php
create mode 100644 modules/recaptcha/views/form_recaptcha.html.php
create mode 100644 modules/rest/controllers/rest.php
create mode 100644 modules/rest/helpers/registry_rest.php
create mode 100644 modules/rest/helpers/rest.php
create mode 100644 modules/rest/helpers/rest_event.php
create mode 100644 modules/rest/helpers/rest_installer.php
create mode 100644 modules/rest/libraries/Rest_Exception.php
create mode 100644 modules/rest/models/user_access_key.php
create mode 100644 modules/rest/module.info
create mode 100644 modules/rest/views/error_rest.json.php
create mode 100644 modules/rest/views/reset_api_key_confirm.html.php
create mode 100644 modules/rest/views/user_profile_rest.html.php
create mode 100644 modules/rss/controllers/rss.php
create mode 100644 modules/rss/helpers/rss.php
create mode 100644 modules/rss/helpers/rss_block.php
create mode 100644 modules/rss/module.info
create mode 100644 modules/rss/views/feed.mrss.php
create mode 100644 modules/rss/views/rss_block.html.php
create mode 100644 modules/search/controllers/search.php
create mode 100644 modules/search/helpers/search.php
create mode 100644 modules/search/helpers/search_event.php
create mode 100644 modules/search/helpers/search_installer.php
create mode 100644 modules/search/helpers/search_task.php
create mode 100644 modules/search/helpers/search_theme.php
create mode 100644 modules/search/models/search_record.php
create mode 100644 modules/search/module.info
create mode 100644 modules/search/views/search.html.php
create mode 100644 modules/search/views/search_link.html.php
create mode 100644 modules/server_add/controllers/admin_server_add.php
create mode 100644 modules/server_add/controllers/server_add.php
create mode 100644 modules/server_add/css/server_add.css
create mode 100644 modules/server_add/helpers/server_add.php
create mode 100644 modules/server_add/helpers/server_add_event.php
create mode 100644 modules/server_add/helpers/server_add_installer.php
create mode 100644 modules/server_add/helpers/server_add_theme.php
create mode 100644 modules/server_add/js/server_add.js
create mode 100644 modules/server_add/models/server_add_entry.php
create mode 100644 modules/server_add/module.info
create mode 100644 modules/server_add/views/admin_server_add.html.php
create mode 100644 modules/server_add/views/server_add_tree.html.php
create mode 100644 modules/server_add/views/server_add_tree_dialog.html.php
create mode 100644 modules/slideshow/helpers/slideshow_event.php
create mode 100644 modules/slideshow/helpers/slideshow_installer.php
create mode 100644 modules/slideshow/helpers/slideshow_theme.php
create mode 100644 modules/slideshow/module.info
create mode 100644 modules/tag/controllers/admin_tags.php
create mode 100644 modules/tag/controllers/tag.php
create mode 100644 modules/tag/controllers/tag_name.php
create mode 100644 modules/tag/controllers/tags.php
create mode 100644 modules/tag/css/tag.css
create mode 100644 modules/tag/helpers/item_tags_rest.php
create mode 100644 modules/tag/helpers/tag.php
create mode 100644 modules/tag/helpers/tag_block.php
create mode 100644 modules/tag/helpers/tag_event.php
create mode 100644 modules/tag/helpers/tag_installer.php
create mode 100644 modules/tag/helpers/tag_item_rest.php
create mode 100644 modules/tag/helpers/tag_items_rest.php
create mode 100644 modules/tag/helpers/tag_rest.php
create mode 100644 modules/tag/helpers/tag_rss.php
create mode 100644 modules/tag/helpers/tag_task.php
create mode 100644 modules/tag/helpers/tag_theme.php
create mode 100644 modules/tag/helpers/tags_rest.php
create mode 100644 modules/tag/models/tag.php
create mode 100644 modules/tag/module.info
create mode 100644 modules/tag/views/admin_tags.html.php
create mode 100644 modules/tag/views/tag_block.html.php
create mode 100644 modules/tag/views/tag_cloud.html.php
create mode 100644 modules/thumbnav/changelog.log
create mode 100644 modules/thumbnav/controllers/admin_thumbnav.php
create mode 100644 modules/thumbnav/css/thumbnav.css
create mode 100644 modules/thumbnav/helpers/thumbnav_block.php
create mode 100644 modules/thumbnav/helpers/thumbnav_event.php
create mode 100644 modules/thumbnav/helpers/thumbnav_theme.php
create mode 100644 modules/thumbnav/module.info
create mode 100644 modules/thumbnav/views/admin_include.html.php
create mode 100644 modules/thumbnav/views/admin_thumbnav.html.php
create mode 100644 modules/thumbnav/views/thumbnav_block.html.php
create mode 100644 modules/user/config/identity.php
create mode 100644 modules/user/controllers/admin_users.php
create mode 100644 modules/user/controllers/password.php
create mode 100644 modules/user/controllers/users.php
create mode 100644 modules/user/css/user.css
create mode 100644 modules/user/helpers/group.php
create mode 100644 modules/user/helpers/user.php
create mode 100644 modules/user/helpers/user_event.php
create mode 100644 modules/user/helpers/user_installer.php
create mode 100644 modules/user/helpers/user_theme.php
create mode 100644 modules/user/images/progressImg1.png
create mode 100644 modules/user/js/password_strength.js
create mode 100644 modules/user/lib/PasswordHash.php
create mode 100644 modules/user/libraries/drivers/IdentityProvider/Gallery.php
create mode 100644 modules/user/models/group.php
create mode 100644 modules/user/models/user.php
create mode 100644 modules/user/module.info
create mode 100644 modules/user/views/admin_users.html.php
create mode 100644 modules/user/views/admin_users_delete_user.html.php
create mode 100644 modules/user/views/admin_users_group.html.php
create mode 100644 modules/user/views/reset_password.html.php
create mode 100644 modules/watermark/controllers/admin_watermarks.php
create mode 100644 modules/watermark/helpers/watermark.php
create mode 100644 modules/watermark/helpers/watermark_event.php
create mode 100644 modules/watermark/helpers/watermark_installer.php
create mode 100644 modules/watermark/module.info
create mode 100644 modules/watermark/views/admin_watermarks.html.php
create mode 100644 php.ini
create mode 100644 robots.txt
create mode 100644 serveradd/Raphael_2013-10-18_optimiert.mpg
create mode 100644 system/KohanaLicense.html
create mode 100644 system/config/cache.php
create mode 100644 system/config/cookie.php
create mode 100644 system/config/credit_cards.php
create mode 100644 system/config/database.php
create mode 100644 system/config/encryption.php
create mode 100644 system/config/http.php
create mode 100644 system/config/image.php
create mode 100644 system/config/inflector.php
create mode 100644 system/config/locale.php
create mode 100644 system/config/log.php
create mode 100644 system/config/mimes.php
create mode 100644 system/config/profiler.php
create mode 100644 system/config/routes.php
create mode 100644 system/config/session.php
create mode 100644 system/config/sql_types.php
create mode 100644 system/config/upload.php
create mode 100644 system/config/user_agents.php
create mode 100644 system/config/view.php
create mode 100644 system/controllers/template.php
create mode 100644 system/core/Benchmark.php
create mode 100644 system/core/Event.php
create mode 100644 system/core/Kohana.php
create mode 100644 system/core/Kohana_Config.php
create mode 100644 system/core/Kohana_Exception.php
create mode 100644 system/helpers/arr.php
create mode 100644 system/helpers/cookie.php
create mode 100644 system/helpers/date.php
create mode 100644 system/helpers/db.php
create mode 100644 system/helpers/download.php
create mode 100644 system/helpers/expires.php
create mode 100644 system/helpers/feed.php
create mode 100644 system/helpers/file.php
create mode 100644 system/helpers/form.php
create mode 100644 system/helpers/format.php
create mode 100644 system/helpers/html.php
create mode 100644 system/helpers/inflector.php
create mode 100644 system/helpers/num.php
create mode 100644 system/helpers/remote.php
create mode 100644 system/helpers/request.php
create mode 100644 system/helpers/security.php
create mode 100644 system/helpers/text.php
create mode 100644 system/helpers/upload.php
create mode 100644 system/helpers/url.php
create mode 100644 system/helpers/utf8.php
create mode 100644 system/helpers/valid.php
create mode 100644 system/libraries/Cache.php
create mode 100644 system/libraries/Cache_Exception.php
create mode 100644 system/libraries/Controller.php
create mode 100644 system/libraries/Database.php
create mode 100644 system/libraries/Database_Builder.php
create mode 100644 system/libraries/Database_Cache_Result.php
create mode 100644 system/libraries/Database_Exception.php
create mode 100644 system/libraries/Database_Expression.php
create mode 100644 system/libraries/Database_Mysql.php
create mode 100644 system/libraries/Database_Mysql_Result.php
create mode 100644 system/libraries/Database_Mysqli.php
create mode 100644 system/libraries/Database_Mysqli_Result.php
create mode 100644 system/libraries/Database_Query.php
create mode 100644 system/libraries/Database_Result.php
create mode 100644 system/libraries/Encrypt.php
create mode 100644 system/libraries/I18n.php
create mode 100644 system/libraries/Image.php
create mode 100644 system/libraries/Input.php
create mode 100644 system/libraries/Kohana_404_Exception.php
create mode 100644 system/libraries/Kohana_Log.php
create mode 100644 system/libraries/Kohana_PHP_Exception.php
create mode 100644 system/libraries/Kohana_User_Exception.php
create mode 100644 system/libraries/Model.php
create mode 100644 system/libraries/ORM.php
create mode 100644 system/libraries/ORM_Iterator.php
create mode 100644 system/libraries/ORM_Validation_Exception.php
create mode 100644 system/libraries/Profiler.php
create mode 100644 system/libraries/Profiler_Table.php
create mode 100644 system/libraries/Router.php
create mode 100644 system/libraries/Session.php
create mode 100644 system/libraries/URI.php
create mode 100644 system/libraries/Validation.php
create mode 100644 system/libraries/View.php
create mode 100644 system/libraries/drivers/Cache.php
create mode 100644 system/libraries/drivers/Cache/File.php
create mode 100644 system/libraries/drivers/Cache/Memcache.php
create mode 100644 system/libraries/drivers/Cache/Xcache.php
create mode 100644 system/libraries/drivers/Config.php
create mode 100644 system/libraries/drivers/Config/Array.php
create mode 100644 system/libraries/drivers/Image.php
create mode 100644 system/libraries/drivers/Image/GD.php
create mode 100644 system/libraries/drivers/Image/GraphicsMagick.php
create mode 100644 system/libraries/drivers/Image/ImageMagick.php
create mode 100644 system/libraries/drivers/Log.php
create mode 100644 system/libraries/drivers/Log/Database.php
create mode 100644 system/libraries/drivers/Log/File.php
create mode 100644 system/libraries/drivers/Log/Syslog.php
create mode 100644 system/libraries/drivers/Session.php
create mode 100644 system/libraries/drivers/Session/Cache.php
create mode 100644 system/libraries/drivers/Session/Cookie.php
create mode 100644 system/libraries/drivers/Session/Database.php
create mode 100644 system/messages/kohana/core.php
create mode 100644 system/messages/validation/default.php
create mode 100644 system/views/kohana/error.php
create mode 100644 system/views/kohana/error_disabled.php
create mode 100644 system/views/kohana/template.php
create mode 100644 system/views/profiler/profiler.php
create mode 100644 system/views/profiler/table.css
create mode 100644 system/views/profiler/table.php
create mode 100644 themes/admin_wind/css/fix-ie.css
create mode 100644 themes/admin_wind/css/screen-rtl.css
create mode 100644 themes/admin_wind/css/screen.css
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_flat_0_aaaaaa_40x100.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_flat_55_fbec88_40x100.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_glass_75_d0e5f5_1x400.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_glass_85_dfeffc_1x400.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_glass_95_fef1ec_1x400.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-icons_217bc0_256x240.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-icons_2e83ff_256x240.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-icons_469bdd_256x240.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-icons_6da8d5_256x240.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-icons_cd0a0a_256x240.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-icons_d8e7f3_256x240.png
create mode 100644 themes/admin_wind/css/themeroller/images/ui-icons_f9bd01_256x240.png
create mode 100644 themes/admin_wind/css/themeroller/ui.base.css
create mode 100644 themes/admin_wind/css/themeroller/ui.core.css
create mode 100644 themes/admin_wind/css/themeroller/ui.datepicker.css
create mode 100644 themes/admin_wind/css/themeroller/ui.dialog.css
create mode 100644 themes/admin_wind/css/themeroller/ui.progressbar.css
create mode 100644 themes/admin_wind/css/themeroller/ui.resizable.css
create mode 100644 themes/admin_wind/css/themeroller/ui.tabs.css
create mode 100644 themes/admin_wind/css/themeroller/ui.theme.css
create mode 100644 themes/admin_wind/images/avatar.jpg
create mode 100644 themes/admin_wind/images/ico-denied-inactive.png
create mode 100644 themes/admin_wind/images/ico-denied-passive.png
create mode 100644 themes/admin_wind/images/ico-denied.png
create mode 100644 themes/admin_wind/images/ico-error.png
create mode 100644 themes/admin_wind/images/ico-info.png
create mode 100644 themes/admin_wind/images/ico-lock.png
create mode 100644 themes/admin_wind/images/ico-separator-rtl.gif
create mode 100644 themes/admin_wind/images/ico-separator.gif
create mode 100644 themes/admin_wind/images/ico-success-inactive.png
create mode 100644 themes/admin_wind/images/ico-success-passive.png
create mode 100644 themes/admin_wind/images/ico-success.png
create mode 100644 themes/admin_wind/images/ico-warning.png
create mode 100644 themes/admin_wind/images/loading-large.gif
create mode 100644 themes/admin_wind/images/loading-small.gif
create mode 100644 themes/admin_wind/js/ui.init.js
create mode 100644 themes/admin_wind/theme.info
create mode 100644 themes/admin_wind/thumbnail.png
create mode 100644 themes/admin_wind/views/admin.html.php
create mode 100644 themes/admin_wind/views/block.html.php
create mode 100644 themes/admin_wind/views/paginator.html.php
create mode 100644 themes/greydragon/admin/controllers/admin_theme_options.php
create mode 100644 themes/greydragon/admin/views/admin_theme_options.html.php
create mode 100644 themes/greydragon/changelog.txt
create mode 100644 themes/greydragon/controllers/greydragon.php
create mode 100644 themes/greydragon/css/base.css
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/css/colors.css
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/ajax-loading.gif
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/colorpack.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/ico-album.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/ico-error.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/ico-help.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/ico-info.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/ico-warning.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/loading-large.gif
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/loading-small.gif
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/search.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/ui-icons.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-calendar-b.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-calendar.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-comments-b.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-comments.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-fullsize-b.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-info-b.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-info-o.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-info.png
create mode 100644 themes/greydragon/css/colorpacks/blackhawk/images/view-slideshow-b.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/css/colors.css
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/ajax-loading.gif
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/colorpack.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/ico-album.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/ico-error.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/ico-help.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/ico-info.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/ico-warning.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/loading-large.gif
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/loading-small.gif
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/search.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/section.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/ui-icons.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-calendar-b.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-calendar.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-comments-b.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-comments.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-fullsize-b.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-info-b.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-info-o.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-info.png
create mode 100644 themes/greydragon/css/colorpacks/carbon/images/view-slideshow-b.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/css/colors.css
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/ajax-loading.gif
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/background-bottom.gif
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/background-top.gif
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/background.gif
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/colorpack.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/footer.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/ico-album.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/ico-error.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/ico-help.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/ico-info.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/ico-warning.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/image-thumb.gif
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/loading-large.gif
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/loading-small.gif
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/search.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/section.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/ui-icons.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-calendar-b.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-calendar.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-comments-b.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-comments.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-fullsize-b.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-info-b.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-info-o.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-info.png
create mode 100644 themes/greydragon/css/colorpacks/greydragon/images/view-slideshow-b.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/css/colors.css
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/ajax-loading.gif
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/bg-body.jpg
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/bg-header.jpg
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/colorpack.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/gallery.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/ico-album.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/ico-error.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/ico-help.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/ico-info.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/ico-warning.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/loading-large.gif
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/loading-small.gif
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/search.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/ui-icons.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-calendar-b.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-calendar.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-comments-b.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-comments.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-fullsize-b.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-info-b.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-info-o.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-info.png
create mode 100644 themes/greydragon/css/colorpacks/roundrobin/images/view-slideshow-b.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/css/colors.css
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/ajax-loading.gif
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/background.jpg
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/colorpack.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/footer.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/ico-album.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/ico-error.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/ico-help.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/ico-info.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/ico-warning.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/loading-large.gif
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/loading-small.gif
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/search.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/section.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/ui-icons.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-calendar-b.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-calendar.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-comments-b.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-comments.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-fullsize-b.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-info-b.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-info-o.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-info.png
create mode 100644 themes/greydragon/css/colorpacks/slateblue/images/view-slideshow-b.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/css/colors.css
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/ajax-loading.gif
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/colorpack.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/gallery.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/ico-album.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/ico-error.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/ico-help.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/ico-info.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/ico-warning.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/loading-large.gif
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/loading-small.gif
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/search.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/ui-icons.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-calendar-b.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-calendar.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-comments-b.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-comments.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-fullsize-b.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-info-b.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-info-o.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-info.png
create mode 100644 themes/greydragon/css/colorpacks/whitehawk/images/view-slideshow-b.png
create mode 100644 themes/greydragon/css/colorpacks/wind/css/colors.css
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ajax-loading.gif
create mode 100644 themes/greydragon/css/colorpacks/wind/images/colorpack.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-album.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-error.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-help.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-info.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-view-slideshow-rtl.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-view-slideshow.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ico-warning.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/loading-large.gif
create mode 100644 themes/greydragon/css/colorpacks/wind/images/loading-small.gif
create mode 100644 themes/greydragon/css/colorpacks/wind/images/section.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/ui-icons.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-calendar.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-comments-b.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-comments.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-fullsize.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-info-b.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-info-o.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-info.png
create mode 100644 themes/greydragon/css/colorpacks/wind/images/view-slideshow-b.png
create mode 100644 themes/greydragon/css/custom.css
create mode 100644 themes/greydragon/css/forms.css
create mode 100644 themes/greydragon/css/framepacks/android/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-dgt-e.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-dgt.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-flm-e.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-flm-eext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-flm-ext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-flm.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-sqr-e.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-sqr.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-wd-e.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-wd-eext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-wd-ext.png
create mode 100644 themes/greydragon/css/framepacks/android/images/thumb-wd.png
create mode 100644 themes/greydragon/css/framepacks/book/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-dgt-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-dgt-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-dgt-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-dgt.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-flm-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-flm-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-flm-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-flm.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-sqr-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-sqr-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-sqr-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-sqr.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-wd-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-wd-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-wd-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/a-thumb-wd.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-dgt-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-dgt.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-flm-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-flm-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-flm-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-flm.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-sqr-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-sqr.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-wd-e.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-wd-eext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-wd-ext.png
create mode 100644 themes/greydragon/css/framepacks/book/images/thumb-wd.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-dgt-e.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-dgt.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-flm-e.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-flm-eext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-flm-ext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-flm.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-sqr-e.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-sqr.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-wd-e.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-wd-eext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-wd-ext.png
create mode 100644 themes/greydragon/css/framepacks/darkglass/images/thumb-wd.png
create mode 100644 themes/greydragon/css/framepacks/greydragon/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/iphone/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-dgt-e.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-dgt.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-flm-e.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-flm-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-flm-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-flm.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-sqr-e.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-sqr.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-wd-e.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-wd-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-wd-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphone/images/thumb-wd.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-dgt-e.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-dgt.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-flm-e.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-flm-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-flm-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-flm.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-sqr-e.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-sqr.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-wd-e.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-wd-eext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-wd-ext.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/images/thumb-wd.png
create mode 100644 themes/greydragon/css/framepacks/iphoto/views/frame.html.php
create mode 100644 themes/greydragon/css/framepacks/panel/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/roundcorners/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/simple/css/frame.css
create mode 100644 themes/greydragon/css/framepacks/wall/css/frame.css
create mode 100644 themes/greydragon/css/ipad.css
create mode 100644 themes/greydragon/css/layout.css
create mode 100644 themes/greydragon/css/menus.css
create mode 100644 themes/greydragon/css/modules.css
create mode 100644 themes/greydragon/css/normalize.css
create mode 100644 themes/greydragon/css/rtl.css
create mode 100644 themes/greydragon/css/screen.css
create mode 100644 themes/greydragon/helpers/exif_event.php
create mode 100644 themes/greydragon/helpers/greydragon_event.php
create mode 100644 themes/greydragon/helpers/greydragon_installer.php
create mode 100644 themes/greydragon/images/apple-touch-icon.png
create mode 100644 themes/greydragon/images/arrows_left.png
create mode 100644 themes/greydragon/images/arrows_right.png
create mode 100644 themes/greydragon/images/avatar.jpg
create mode 100644 themes/greydragon/images/blue-grad.png
create mode 100644 themes/greydragon/images/button-grad-active-vs.png
create mode 100644 themes/greydragon/images/button-grad-vs.png
create mode 100644 themes/greydragon/images/close.png
create mode 100644 themes/greydragon/images/donate.png
create mode 100644 themes/greydragon/images/gallery.png
create mode 100644 themes/greydragon/images/ico-allowed.png
create mode 100644 themes/greydragon/images/ico-denied-inactive.png
create mode 100644 themes/greydragon/images/ico-denied-passive.png
create mode 100644 themes/greydragon/images/ico-denied.png
create mode 100644 themes/greydragon/images/ico-error.png
create mode 100644 themes/greydragon/images/ico-help.png
create mode 100644 themes/greydragon/images/ico-info.png
create mode 100644 themes/greydragon/images/ico-lock.png
create mode 100644 themes/greydragon/images/ico-success-inactive.png
create mode 100644 themes/greydragon/images/ico-success-passive.png
create mode 100644 themes/greydragon/images/ico-success.png
create mode 100644 themes/greydragon/images/ico-warning.png
create mode 100644 themes/greydragon/images/missing-img.png
create mode 100644 themes/greydragon/js/gallery.ajax.custom.js
create mode 100644 themes/greydragon/js/gallery.dialog.custom.js
create mode 100644 themes/greydragon/js/jquery-ui.min.js
create mode 100644 themes/greydragon/js/jquery.cycle.js
create mode 100644 themes/greydragon/js/jquery.form.custom.js
create mode 100644 themes/greydragon/js/jquery.json.min.js
create mode 100644 themes/greydragon/js/jquery.min.js
create mode 100644 themes/greydragon/js/ui.support.js
create mode 100644 themes/greydragon/libraries/MY_Theme_View.php
create mode 100644 themes/greydragon/theme.info
create mode 100644 themes/greydragon/thumbnail.png
create mode 100644 themes/greydragon/views/album.html.php
create mode 100644 themes/greydragon/views/block.html.php
create mode 100644 themes/greydragon/views/calpage.html.php
create mode 100644 themes/greydragon/views/dynamic.html.php
create mode 100644 themes/greydragon/views/exif_sidebar.html.php
create mode 100644 themes/greydragon/views/info_block.html.php
create mode 100644 themes/greydragon/views/login_ajax.html.php
create mode 100644 themes/greydragon/views/movie.html.php
create mode 100644 themes/greydragon/views/no_sidebar.html.php
create mode 100644 themes/greydragon/views/page.html.php
create mode 100644 themes/greydragon/views/paginator.html.php
create mode 100644 themes/greydragon/views/photo.html.php
create mode 100644 themes/greydragon/views/rootpage.html.php
create mode 100644 themes/greydragon/views/rootpage.html.php_fix
create mode 100644 themes/greydragon/views/rss_block.html.php
create mode 100644 themes/greydragon/views/search.html.php
create mode 100644 themes/greydragon/views/sidebar.html.php
create mode 100644 themes/greydragon/views/user_profile.html.php
create mode 100644 themes/greydragon_old/admin/controllers/admin_theme_options.php
create mode 100644 themes/greydragon_old/admin/views/admin_theme_options.html.php
create mode 100644 themes/greydragon_old/changelog.txt
create mode 100644 themes/greydragon_old/controllers/greydragon.php
create mode 100644 themes/greydragon_old/css/base.css
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/css/colors.css
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/ajax-loading.gif
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/colorpack.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/ico-album.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/ico-error.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/ico-help.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/ico-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/ico-warning.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/loading-large.gif
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/loading-small.gif
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/search.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/ui-icons.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-calendar-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-calendar.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-comments-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-comments.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-fullsize-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-info-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-info-o.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/blackhawk/images/view-slideshow-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/css/colors.css
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/ajax-loading.gif
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/colorpack.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/ico-album.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/ico-error.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/ico-help.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/ico-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/ico-warning.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/loading-large.gif
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/loading-small.gif
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/search.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/section.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/ui-icons.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-calendar-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-calendar.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-comments-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-comments.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-fullsize-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-info-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-info-o.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/carbon/images/view-slideshow-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/css/colors.css
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/ajax-loading.gif
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/background-bottom.gif
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/background-top.gif
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/background.gif
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/colorpack.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/footer.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/ico-album.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/ico-error.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/ico-help.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/ico-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/ico-warning.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/image-thumb.gif
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/loading-large.gif
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/loading-small.gif
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/search.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/section.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/ui-icons.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-calendar-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-calendar.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-comments-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-comments.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-fullsize-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-info-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-info-o.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/greydragon/images/view-slideshow-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/css/colors.css
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/ajax-loading.gif
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/bg-body.jpg
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/bg-header.jpg
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/colorpack.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/gallery.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/ico-album.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/ico-error.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/ico-help.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/ico-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/ico-warning.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/loading-large.gif
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/loading-small.gif
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/search.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/ui-icons.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-calendar-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-calendar.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-comments-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-comments.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-fullsize-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-info-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-info-o.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/roundrobin/images/view-slideshow-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/css/colors.css
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/ajax-loading.gif
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/background.jpg
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/colorpack.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/footer.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/ico-album.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/ico-error.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/ico-help.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/ico-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/ico-warning.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/loading-large.gif
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/loading-small.gif
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/search.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/section.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/ui-icons.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-calendar-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-calendar.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-comments-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-comments.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-fullsize-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-info-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-info-o.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/slateblue/images/view-slideshow-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/css/colors.css
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/ajax-loading.gif
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/colorpack.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/gallery.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/ico-album.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/ico-error.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/ico-help.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/ico-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/ico-warning.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/loading-large.gif
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/loading-small.gif
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/search.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/ui-icons.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-calendar-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-calendar.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-comments-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-comments.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-fullsize-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-info-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-info-o.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/whitehawk/images/view-slideshow-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/css/colors.css
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ajax-loading.gif
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/colorpack.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-album.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-error.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-help.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-view-slideshow-rtl.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-view-slideshow.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ico-warning.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/loading-large.gif
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/loading-small.gif
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/section.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/ui-icons.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-calendar.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-comments-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-comments.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-fullsize.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-info-b.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-info-o.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-info.png
create mode 100644 themes/greydragon_old/css/colorpacks/wind/images/view-slideshow-b.png
create mode 100644 themes/greydragon_old/css/custom.css
create mode 100644 themes/greydragon_old/css/forms.css
create mode 100644 themes/greydragon_old/css/framepacks/android/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-dgt-e.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-dgt.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-flm-e.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-flm-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-flm-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-flm.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-sqr-e.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-sqr.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-wd-e.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-wd-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-wd-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/android/images/thumb-wd.png
create mode 100644 themes/greydragon_old/css/framepacks/book/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-dgt-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-dgt-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-dgt-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-dgt.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-flm-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-flm-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-flm-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-flm.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-sqr-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-sqr-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-sqr-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-sqr.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-wd-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-wd-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-wd-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/a-thumb-wd.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-dgt-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-dgt.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-flm-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-flm-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-flm-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-flm.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-sqr-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-sqr.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-wd-e.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-wd-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-wd-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/book/images/thumb-wd.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-dgt-e.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-dgt.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-flm-e.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-flm-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-flm-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-flm.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-sqr-e.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-sqr.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-wd-e.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-wd-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-wd-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/darkglass/images/thumb-wd.png
create mode 100644 themes/greydragon_old/css/framepacks/greydragon/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/iphone/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-dgt-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-dgt.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-flm-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-flm-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-flm-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-flm.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-sqr-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-sqr.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-wd-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-wd-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-wd-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphone/images/thumb-wd.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-dgt-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-dgt-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-dgt-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-dgt.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-flm-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-flm-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-flm-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-flm.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-sqr-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-sqr-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-sqr-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-sqr.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-wd-e.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-wd-eext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-wd-ext.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/images/thumb-wd.png
create mode 100644 themes/greydragon_old/css/framepacks/iphoto/views/frame.html.php
create mode 100644 themes/greydragon_old/css/framepacks/panel/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/roundcorners/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/simple/css/frame.css
create mode 100644 themes/greydragon_old/css/framepacks/wall/css/frame.css
create mode 100644 themes/greydragon_old/css/gd_common.css
create mode 100644 themes/greydragon_old/css/ipad.css
create mode 100644 themes/greydragon_old/css/layout.css
create mode 100644 themes/greydragon_old/css/menus.css
create mode 100644 themes/greydragon_old/css/modules.css
create mode 100644 themes/greydragon_old/css/normalize.css
create mode 100644 themes/greydragon_old/css/rtl.css
create mode 100644 themes/greydragon_old/css/screen.css
create mode 100644 themes/greydragon_old/helpers/exif_event.php
create mode 100644 themes/greydragon_old/helpers/greydragon_event.php
create mode 100644 themes/greydragon_old/helpers/greydragon_installer.php
create mode 100644 themes/greydragon_old/helpers/greydragon_theme.php
create mode 100644 themes/greydragon_old/images/apple-touch-icon.png
create mode 100644 themes/greydragon_old/images/arrows_left.png
create mode 100644 themes/greydragon_old/images/arrows_right.png
create mode 100644 themes/greydragon_old/images/avatar.jpg
create mode 100644 themes/greydragon_old/images/blue-grad.png
create mode 100644 themes/greydragon_old/images/button-grad-active-vs.png
create mode 100644 themes/greydragon_old/images/button-grad-vs.png
create mode 100644 themes/greydragon_old/images/close.png
create mode 100644 themes/greydragon_old/images/donate.png
create mode 100644 themes/greydragon_old/images/gallery.png
create mode 100644 themes/greydragon_old/images/ico-allowed.png
create mode 100644 themes/greydragon_old/images/ico-denied-inactive.png
create mode 100644 themes/greydragon_old/images/ico-denied-passive.png
create mode 100644 themes/greydragon_old/images/ico-denied.png
create mode 100644 themes/greydragon_old/images/ico-error.png
create mode 100644 themes/greydragon_old/images/ico-help.png
create mode 100644 themes/greydragon_old/images/ico-info.png
create mode 100644 themes/greydragon_old/images/ico-lock.png
create mode 100644 themes/greydragon_old/images/ico-success-inactive.png
create mode 100644 themes/greydragon_old/images/ico-success-passive.png
create mode 100644 themes/greydragon_old/images/ico-success.png
create mode 100644 themes/greydragon_old/images/ico-warning.png
create mode 100644 themes/greydragon_old/images/missing-img.png
create mode 100644 themes/greydragon_old/js/jquery.cycle.js
create mode 100644 themes/greydragon_old/js/ui.support.js
create mode 100644 themes/greydragon_old/libraries/MY_Theme_View.php
create mode 100644 themes/greydragon_old/module.info
create mode 100644 themes/greydragon_old/theme.info
create mode 100644 themes/greydragon_old/thumbnail.png
create mode 100644 themes/greydragon_old/views/album.html.php
create mode 100644 themes/greydragon_old/views/block.html.php
create mode 100644 themes/greydragon_old/views/calpage.html.php
create mode 100644 themes/greydragon_old/views/dynamic.html.php
create mode 100644 themes/greydragon_old/views/exif_sidebar.html.php
create mode 100644 themes/greydragon_old/views/gd_admin_include.html.php
create mode 100644 themes/greydragon_old/views/info_block.html.php
create mode 100644 themes/greydragon_old/views/movie.html.php
create mode 100644 themes/greydragon_old/views/no_sidebar.html.php
create mode 100644 themes/greydragon_old/views/page.html.php
create mode 100644 themes/greydragon_old/views/paginator.html.php
create mode 100644 themes/greydragon_old/views/photo.html.php
create mode 100644 themes/greydragon_old/views/rootpage.html.php
create mode 100644 themes/greydragon_old/views/rootpage.html.php_fix
create mode 100644 themes/greydragon_old/views/rss_block.html.php
create mode 100644 themes/greydragon_old/views/search.html.php
create mode 100644 themes/greydragon_old/views/sidebar.html.php
create mode 100644 themes/greydragon_old/views/user_profile.html.php
create mode 100644 themes/wind/css/fix-ie.css
create mode 100644 themes/wind/css/screen-rtl.css
create mode 100644 themes/wind/css/screen.css
create mode 100644 themes/wind/css/themeroller/images/ui-bg_flat_0_aaaaaa_40x100.png
create mode 100644 themes/wind/css/themeroller/images/ui-bg_flat_55_fbec88_40x100.png
create mode 100644 themes/wind/css/themeroller/images/ui-bg_glass_75_d0e5f5_1x400.png
create mode 100644 themes/wind/css/themeroller/images/ui-bg_glass_85_dfeffc_1x400.png
create mode 100644 themes/wind/css/themeroller/images/ui-bg_glass_95_fef1ec_1x400.png
create mode 100644 themes/wind/css/themeroller/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
create mode 100644 themes/wind/css/themeroller/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
create mode 100644 themes/wind/css/themeroller/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
create mode 100644 themes/wind/css/themeroller/images/ui-icons_217bc0_256x240.png
create mode 100644 themes/wind/css/themeroller/images/ui-icons_2e83ff_256x240.png
create mode 100644 themes/wind/css/themeroller/images/ui-icons_469bdd_256x240.png
create mode 100644 themes/wind/css/themeroller/images/ui-icons_6da8d5_256x240.png
create mode 100644 themes/wind/css/themeroller/images/ui-icons_cd0a0a_256x240.png
create mode 100644 themes/wind/css/themeroller/images/ui-icons_d8e7f3_256x240.png
create mode 100644 themes/wind/css/themeroller/images/ui-icons_f9bd01_256x240.png
create mode 100644 themes/wind/css/themeroller/ui.base.css
create mode 100644 themes/wind/css/themeroller/ui.core.css
create mode 100644 themes/wind/css/themeroller/ui.datepicker.css
create mode 100644 themes/wind/css/themeroller/ui.dialog.css
create mode 100644 themes/wind/css/themeroller/ui.progressbar.css
create mode 100644 themes/wind/css/themeroller/ui.resizable.css
create mode 100644 themes/wind/css/themeroller/ui.tabs.css
create mode 100644 themes/wind/css/themeroller/ui.theme.css
create mode 100644 themes/wind/images/avatar.jpg
create mode 100644 themes/wind/images/ico-album.png
create mode 100644 themes/wind/images/ico-denied-inactive.png
create mode 100644 themes/wind/images/ico-denied-passive.png
create mode 100644 themes/wind/images/ico-denied.png
create mode 100644 themes/wind/images/ico-error.png
create mode 100644 themes/wind/images/ico-help.png
create mode 100644 themes/wind/images/ico-info.png
create mode 100644 themes/wind/images/ico-lock.png
create mode 100644 themes/wind/images/ico-print.png
create mode 100644 themes/wind/images/ico-separator-rtl.gif
create mode 100644 themes/wind/images/ico-separator.gif
create mode 100644 themes/wind/images/ico-success-inactive.png
create mode 100644 themes/wind/images/ico-success-passive.png
create mode 100644 themes/wind/images/ico-success.png
create mode 100644 themes/wind/images/ico-view-comments.png
create mode 100644 themes/wind/images/ico-view-fullsize.png
create mode 100644 themes/wind/images/ico-view-slideshow-rtl.png
create mode 100644 themes/wind/images/ico-view-slideshow.png
create mode 100644 themes/wind/images/ico-warning.png
create mode 100644 themes/wind/images/loading-large.gif
create mode 100644 themes/wind/images/loading-small.gif
create mode 100644 themes/wind/images/select-photos-backg.png
create mode 100644 themes/wind/js/ui.init.js
create mode 100644 themes/wind/theme.info
create mode 100755 themes/wind/thumbnail.png
create mode 100644 themes/wind/views/album.html.php
create mode 100644 themes/wind/views/block.html.php
create mode 100644 themes/wind/views/dynamic.html.php
create mode 100644 themes/wind/views/movie.html.php
create mode 100644 themes/wind/views/no_sidebar.html.php
create mode 100644 themes/wind/views/page.html.php
create mode 100644 themes/wind/views/paginator.html.php
create mode 100644 themes/wind/views/photo.html.php
create mode 100644 themes/wind/views/sidebar.html.php
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..186857b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+var
diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..1df3359
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,82 @@
+# Set some reasonable defaults for PHP. Most of these cannot be set
+# inside the script itself. For hosts that don't have .htaccess
+# support but do support per-dir php.ini files, these settings are
+# mirrored in php.ini
+#
+
+ php_flag short_open_tag On
+ php_flag magic_quotes_gpc Off
+ php_flag magic_quotes_sybase Off
+ php_flag magic_quotes_runtime Off
+ php_flag register_globals Off
+ php_flag session.auto_start Off
+ php_flag suhosin.session.encrypt Off
+ php_value upload_max_filesize 100M
+ php_value post_max_size 100M
+
+
+# Try to disable the parts of mod_security that interfere with the Flash uploader
+#
+
+ SecFilterEngine Off
+ SecFilterScanPOST Off
+
+
+# Increase security by uncommenting this block. It keeps browsers
+# from seeing support files that they shouldn't have access to. We
+# comment this out because Apache2 requires some minor configuration
+# in order for you to use it. You must specify "AllowOverride Limit"
+# in your Apache2 config file before you uncomment this block or
+# you'll get an "Internal Server Error".
+#
+#
+# Order deny,allow
+# Deny from all
+#
+#
+# Order allow,deny
+# Allow from all
+#
+
+
+# Improve performance by uncommenting this block. It tells the
+# browser that your images don't change very often so it won't keep
+# asking for them. If you get an error after uncommenting this, make
+# sure you specify "AuthConfig Indexes" in your Apache config file.
+#
+#
+# ExpiresActive On
+# # Cache all files for a month after access (A).
+# ExpiresDefault A2678400
+# # Do not cache dynamically generated pages.
+# ExpiresByType text/html A1
+#
+
+# You can use the mod_rewrite Apache module to get rid of the
+# "index.php" from your Gallery 3 urls. Uncomment the block below
+# inside the ... lines and then edit the
+# RewriteBase line to match your Gallery 3 URL.
+#
+# Here are some RewriteBase values:
+# Gallery 3 URL RewriteBase line
+# ============= ====================
+# http://example.com/gallery3 RewriteBase /gallery3
+# http://example.com/~bob/photos RewriteBase /~bob/photos
+# http://gallery3.example.com/ RewriteBase /
+#
+# Then just use your Gallery 3 without the index.php in the url.
+#
+# NOTE: future upgrades of Gallery 3 will overwrite this file! If you
+# want these changes to be persistent, talk to your system admin about
+# putting this block into your Apache config files.
+#
+#
+# Options +FollowSymLinks
+# RewriteEngine On
+# RewriteBase /
+# RewriteCond %{REQUEST_FILENAME} !-f
+# RewriteCond %{REQUEST_FILENAME} !-d
+# RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]
+# RewriteRule ^$ index.php?kohana_uri=$1 [QSA,PT,L]
+# RewriteRule ^index.php/(.*) $1 [QSA,R,L]
+#
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3912109
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/README b/README
new file mode 100644
index 0000000..d9dc88a
--- /dev/null
+++ b/README
@@ -0,0 +1,85 @@
+Gallery 3.0.9 (Chartres)
+===========================
+
+About
+-----
+
+Gallery 3 is a web based software product that lets you manage your
+photos on your own website. You must have your own website with PHP
+and database support in order to install and use it. With Gallery you
+can easily create and share albums of photos via an intuitive
+interface.
+
+Intended Audience
+-----------------
+
+This version is intended for anybody who has a website. We stand
+ready to support the product and help you to make the most of it. We
+welcome theme and module developers to play with this release and
+start turning out slick new designs for our happy users. If you have
+questions or problems, you can get help in the Gallery forums:
+
+ http://galleryproject.org/forum/96
+
+Security
+--------
+
+We've contracted a professional security audit, received their results
+and resolved all the issues they found.
+
+Did you find a security flaw? Please email security@galleryproject.org
+with the details and we'll fix it ASAP!
+
+Supported Configuration
+-----------------------
+
+ - Platform: Linux / Unix.
+ - Web server: Apache 2.2 and newer.
+ - PHP 5.2.3 and newer (PHP's safe_mode must be disabled and simplexml,
+ filter, and json must be installed).
+ - Database: MySQL 5 and newer.
+
+For complete system requirements, please refer to:
+
+ http://codex.galleryproject.org/Gallery3:Requirements
+
+Installing and Upgrading Instructions
+-------------------------------------
+
+For comprehensive instructions, The online User Guide is your best resource:
+
+ http://codex.galleryproject.org/Gallery3:User_guide
+
+There are also simple instructions below. NOTE: You can upgrade from
+beta 1 and beyond, but not from alpha releases.
+
+ INSTALLATION VIA THE WEB
+
+Point your web browser at gallery3/installer/ and follow the
+instructions.
+
+ INSTALLATION FROM THE COMMAND LINE
+
+php installer/index.php [-h host] [-u user] [-p pass] [-d dbname]
+
+ Command line parameters:
+
+ -h Database host (default: localhost)
+ -u Database user (default: root)
+ -p Database user password (default: )
+ -d Database name (default: gallery3)
+ -x Table prefix (default: )
+
+Bugs?
+-----
+
+Go to http://apps.sourceforge.net/trac/gallery/ click the "login" link
+and log in with your SourceForge username and password, then click the
+"new ticket" button.
+
+Questions, Problems
+-------------------
+
+ - Check out the Gallery 3 FAQ: http://codex.galleryproject.org/Gallery3:FAQ
+ - Post to the Gallery 3 forums: http://galleryproject.org/forum/96
+ - Email gallery-devel@lists.sourceforge.net
diff --git a/application/Bootstrap.php b/application/Bootstrap.php
new file mode 100644
index 0000000..93353b4
--- /dev/null
+++ b/application/Bootstrap.php
@@ -0,0 +1,67 @@
+
+RewriteEngine off
+
+Order allow,deny
+Deny from all
diff --git a/bin/README b/bin/README
new file mode 100644
index 0000000..ec09639
--- /dev/null
+++ b/bin/README
@@ -0,0 +1,5 @@
+This directory contains utility software that Gallery uses to perform
+image manipulation and other useful functions. It should not be
+accessible from a web browser, and by default it's empty. Gallery
+will instruct you when it's appropriate to download software and
+install it here.
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..e6636cf
--- /dev/null
+++ b/index.php
@@ -0,0 +1,116 @@
+getMessage());
+ }
+}
+
+function oops($message) {
+ print "Oops! Something went wrong during the installation:\n\n";
+
+ print "==> " . $message;
+ print "\n";
+ print "For help you can try:\n";
+ print " * The Gallery 3 FAQ - http://codex.galleryproject.org/Gallery3:FAQ\n";
+ print " * The Gallery Forums - http://galleryproject.org/forum\n";
+ print "\n\n** INSTALLATION FAILED **\n";
+ exit(1);
+}
+
+function parse_cli_params() {
+ $config = array("host" => "localhost",
+ "user" => "root",
+ "password" => "",
+ "dbname" => "gallery3",
+ "prefix" => "",
+ "g3_password" => "",
+ "type" => function_exists("mysqli_set_charset") ? "mysqli" : "mysql");
+
+ $argv = $_SERVER["argv"];
+ for ($i = 1; $i < count($argv); $i++) {
+ switch (strtolower($argv[$i])) {
+ case "-d":
+ $config["dbname"] = $argv[++$i];
+ break;
+ case "-h":
+ list ($config["host"], $config["port"]) = explode(":", $argv[++$i]);
+ break;
+ case "-u":
+ $config["user"] = $argv[++$i];
+ break;
+ case "-p":
+ $config["password"] = $argv[++$i];
+ break;
+ case "-x":
+ $config["prefix"] = $argv[++$i];
+ break;
+ case "-g3p":
+ $config["g3_password"] = $argv[++$i];
+ break;
+ }
+ }
+
+ return $config;
+}
diff --git a/installer/database_config.php b/installer/database_config.php
new file mode 100644
index 0000000..fb7dd11
--- /dev/null
+++ b/installer/database_config.php
@@ -0,0 +1,46 @@
+
+ defined("SYSPATH") or die("No direct script access.");
+
+/**
+ * @package Database
+ *
+ * Database connection settings, defined as arrays, or "groups". If no group
+ * name is used when loading the database library, the group named "default"
+ * will be used.
+ *
+ * Each group can be connected to independently, and multiple groups can be
+ * connected at once.
+ *
+ * Group Options:
+ * benchmark - Enable or disable database benchmarking
+ * persistent - Enable or disable a persistent connection
+ * connection - Array of connection specific parameters; alternatively,
+ * you can use a DSN though it is not as fast and certain
+ * characters could create problems (like an '@' character
+ * in a password):
+ * 'connection' => 'mysql://dbuser:secret@localhost/kohana'
+ * character_set - Database character set
+ * table_prefix - Database table prefix
+ * object - Enable or disable object results
+ * cache - Enable or disable query caching
+ * escape - Enable automatic query builder escaping
+ */
+$config['default'] = array(
+ 'benchmark' => false,
+ 'persistent' => false,
+ 'connection' => array(
+ 'type' => '',
+ 'user' => '',
+ 'pass' => '',
+ 'host' => '',
+ 'port' => '' false,
+ 'socket' => false,
+ 'database' => '',
+ 'params' => null,
+ ),
+ 'character_set' => 'utf8',
+ 'table_prefix' => '',
+ 'object' => true,
+ 'cache' => false,
+ 'escape' => true
+);
\ No newline at end of file
diff --git a/installer/index.php b/installer/index.php
new file mode 100644
index 0000000..651edc9
--- /dev/null
+++ b/installer/index.php
@@ -0,0 +1,40 @@
+
+%gallery_version');
+INSERT INTO {vars} VALUES (NULL,'gallery','simultaneous_upload_limit','5');
+INSERT INTO {vars} VALUES (NULL,'gallery','admin_area_timeout','5400');
+INSERT INTO {vars} VALUES (NULL,'gallery','maintenance_mode','0');
+INSERT INTO {vars} VALUES (NULL,'gallery','visible_title_length','15');
+INSERT INTO {vars} VALUES (NULL,'gallery','favicon_url','lib/images/favicon.ico');
+INSERT INTO {vars} VALUES (NULL,'gallery','apple_touch_icon_url','lib/images/apple-touch-icon.png');
+INSERT INTO {vars} VALUES (NULL,'gallery','email_from','unknown@unknown.com');
+INSERT INTO {vars} VALUES (NULL,'gallery','email_reply_to','unknown@unknown.com');
+INSERT INTO {vars} VALUES (NULL,'gallery','email_line_length','70');
+INSERT INTO {vars} VALUES (NULL,'gallery','email_header_separator','s:1:\"\n\";');
+INSERT INTO {vars} VALUES (NULL,'gallery','show_user_profiles_to','registered_users');
+INSERT INTO {vars} VALUES (NULL,'gallery','extra_binary_paths','/usr/local/bin:/opt/local/bin:/opt/bin');
+INSERT INTO {vars} VALUES (NULL,'gallery','timezone',NULL);
+INSERT INTO {vars} VALUES (NULL,'gallery','lock_timeout','1');
+INSERT INTO {vars} VALUES (NULL,'gallery','movie_extract_frame_time','3');
+INSERT INTO {vars} VALUES (NULL,'gallery','movie_allow_uploads','autodetect');
+INSERT INTO {vars} VALUES (NULL,'gallery','blocks_site_sidebar','a:4:{i:10;a:2:{i:0;s:7:\"gallery\";i:1;s:8:\"language\";}i:11;a:2:{i:0;s:4:\"info\";i:1;s:8:\"metadata\";}i:12;a:2:{i:0;s:3:\"rss\";i:1;s:9:\"rss_feeds\";}i:13;a:2:{i:0;s:3:\"tag\";i:1;s:3:\"tag\";}}');
+INSERT INTO {vars} VALUES (NULL,'gallery','identity_provider','user');
+INSERT INTO {vars} VALUES (NULL,'user','minimum_password_length','5');
+INSERT INTO {vars} VALUES (NULL,'comment','spam_caught','0');
+INSERT INTO {vars} VALUES (NULL,'comment','access_permissions','everybody');
+INSERT INTO {vars} VALUES (NULL,'comment','rss_visible','all');
+INSERT INTO {vars} VALUES (NULL,'info','show_title','1');
+INSERT INTO {vars} VALUES (NULL,'info','show_description','1');
+INSERT INTO {vars} VALUES (NULL,'info','show_owner','1');
+INSERT INTO {vars} VALUES (NULL,'info','show_name','1');
+INSERT INTO {vars} VALUES (NULL,'info','show_captured','1');
+INSERT INTO {vars} VALUES (NULL,'slideshow','max_scale','0');
+INSERT INTO {vars} VALUES (NULL,'tag','tag_cloud_size','30');
diff --git a/installer/installer.php b/installer/installer.php
new file mode 100644
index 0000000..434d8e5
--- /dev/null
+++ b/installer/installer.php
@@ -0,0 +1,270 @@
+connect_error because of bugs before PHP 5.2.9
+ $error = mysqli_connect_error();
+ return empty($error);
+ }
+ function mysql_query($query) {
+ return installer::$mysqli->query($query);
+ }
+ function mysql_num_rows($result) {
+ return $result->num_rows;
+ }
+ function mysql_error() {
+ return installer::$mysqli->error;
+ }
+ function mysql_select_db($db) {
+ return installer::$mysqli->select_db($db);
+ }
+ }
+
+ $host = empty($config["port"]) ? $config['host'] : "{$config['host']}:{$config['port']}";
+ return @mysql_connect($host, $config["user"], $config["password"]);
+ }
+
+ static function select_db($config) {
+ if (mysql_select_db($config["dbname"])) {
+ return true;
+ }
+
+ return mysql_query("CREATE DATABASE `{$config['dbname']}`") &&
+ mysql_select_db($config["dbname"]);
+ }
+
+ static function verify_mysql_version($config) {
+ return version_compare(installer::mysql_version($config), "5.0.0", ">=");
+ }
+
+ static function mysql_version($config) {
+ $result = mysql_query("SHOW VARIABLES WHERE variable_name = \"version\"");
+ $row = mysql_fetch_object($result);
+ return $row->Value;
+ }
+
+ static function db_empty($config) {
+ $query = "SHOW TABLES LIKE '{$config['prefix']}items'";
+ $results = mysql_query($query);
+ if ($results === false) {
+ $msg = mysql_error();
+ return $msg;
+ }
+ return mysql_num_rows($results) === 0;
+ }
+
+ static function create_admin($config) {
+ $salt = "";
+ for ($i = 0; $i < 4; $i++) {
+ $char = mt_rand(48, 109);
+ $char += ($char > 90) ? 13 : ($char > 57) ? 7 : 0;
+ $salt .= chr($char);
+ }
+ if (!$password = $config["g3_password"]) {
+ $password = substr(md5(time() . mt_rand()), 0, 6);
+ }
+ // Escape backslash in preparation for our UPDATE statement.
+ $hashed_password = str_replace("\\", "\\\\", $salt . md5($salt . $password));
+ $sql = self::prepend_prefix($config["prefix"],
+ "UPDATE {users} SET `password` = '$hashed_password' WHERE `id` = 2");
+ if (mysql_query($sql)) {
+ } else {
+ throw new Exception(mysql_error());
+ }
+
+ return array("admin", $password);
+ }
+
+ static function create_admin_session($config) {
+ $session_id = md5(time() . mt_rand());
+ $user_agent = $_SERVER["HTTP_USER_AGENT"];
+ $user_agent_len = strlen($user_agent);
+ $now = time();
+ $data = "session_id|s:32:\"$session_id\"";
+ $data .= ";user_agent|s:{$user_agent_len}:\"$user_agent\"";
+ $data .= ";user|i:2";
+ $data .= ";after_install|i:1";
+ $data .= ";last_activity|i:$now";
+ $data = base64_encode($data);
+ $sql = "INSERT INTO {sessions}(`session_id`, `last_activity`, `data`) " .
+ "VALUES('$session_id', $now, '$data')";
+ $sql = self::prepend_prefix($config["prefix"], $sql);
+ if (mysql_query($sql)) {
+ setcookie("g3sid", $session_id, 0, "/", "", false, false);
+ } else {
+ throw new Exception(mysql_error());
+ }
+ }
+
+ static function create_private_key($config) {
+ $key = md5(uniqid(mt_rand(), true)) . md5(uniqid(mt_rand(), true));
+ $sql = self::prepend_prefix($config["prefix"],
+ "INSERT INTO {vars} VALUES(NULL, 'gallery', 'private_key', '$key')");
+ if (mysql_query($sql)) {
+ } else {
+ throw new Exception(mysql_error());
+ }
+ }
+
+ static function prepend_prefix($prefix, $sql) {
+ return preg_replace("#{([a-zA-Z0-9_]+)}#", "`{$prefix}$1`", $sql);
+ }
+
+ static function check_environment() {
+ if (!function_exists("mysql_query") && !function_exists("mysqli_set_charset")) {
+ $errors[] = "Gallery 3 requires a MySQL database, but PHP doesn't have either the MySQL or the MySQLi extension.";
+ }
+
+ if (!preg_match("/^.$/u", "ñ")) {
+ $errors[] = "PHP is missing Perl-Compatible Regular Expression with UTF-8 support.";
+ } else if (!preg_match("/^\pL$/u", "ñ")) {
+ $errors[] = "PHP is missing Perl-Compatible Regular Expression with Unicode support.";
+ }
+
+ if (!(function_exists("spl_autoload_register"))) {
+ $errors[] = "PHP is missing Standard PHP Library (SPL) support";
+ }
+
+ if (!(class_exists("ReflectionClass"))) {
+ $errors[] = "PHP is missing reflection support";
+ }
+
+ if (!(function_exists("filter_list"))) {
+ $errors[] = "PHP is missing the filter extension ";
+ }
+
+ if (!(extension_loaded("iconv"))) {
+ $errors[] = "PHP is missing the iconv extension ";
+ }
+
+ if (!(extension_loaded("xml"))) {
+ $errors[] = "PHP is missing the XML Parser extension ";
+ }
+
+ if (!(extension_loaded("simplexml"))) {
+ $errors[] = "PHP is missing the SimpleXML extension ";
+ }
+
+ if (!extension_loaded("mbstring")) {
+ $errors[] = "PHP is missing the mbstring extension ";
+ } else if (ini_get("mbstring.func_overload") & MB_OVERLOAD_STRING) {
+ $errors[] = "The mbstring extension is overloading PHP's native string functions. Please disable it.";
+ }
+
+ if (!function_exists("json_encode")) {
+ $errors[] = "PHP is missing the JavaScript Object Notation (JSON) extension . Please install it.";
+ }
+
+ if (!ini_get("short_open_tag")) {
+ $errors[] = "Gallery requires short_open_tag to be on. Please enable it in your php.ini.";
+ }
+
+ if (!function_exists("ctype_alpha")) {
+ $errors[] = "Gallery requires the PHP Ctype extension. Please install it.";
+ }
+
+ if (self::ini_get_bool("safe_mode")) {
+ $errors[] = "Gallery cannot function when PHP is in Safe Mode . Please disable safe mode.";
+ }
+
+ return @$errors;
+ }
+
+ /**
+ * Convert any possible boolean ini value to true/false.
+ * On = on = 1 = true
+ * Off = off = 0 = false
+ */
+ static function ini_get_bool($varname) {
+ $value = ini_get($varname);
+
+ if (!strcasecmp("on", $value) || $value == 1 || $value === true) {
+ return true;
+ }
+
+ if (!strcasecmp("off", $value) || $value == 0 || $value === false) {
+ return false;
+ }
+
+ return false;
+ }
+
+}
diff --git a/installer/views/already_installed.html.php b/installer/views/already_installed.html.php
new file mode 100644
index 0000000..f6ac1bf
--- /dev/null
+++ b/installer/views/already_installed.html.php
@@ -0,0 +1,5 @@
+
+
+ Your Gallery 3 install is complete.
+
+
diff --git a/installer/views/db_not_empty.html.php b/installer/views/db_not_empty.html.php
new file mode 100644
index 0000000..bc45458
--- /dev/null
+++ b/installer/views/db_not_empty.html.php
@@ -0,0 +1,8 @@
+
+ Uh oh!
+
+ The database you provided already has Gallery 3 tables in it.
+ Continuing with the install would overwrite your existing install.
+ Please either use a different database, delete the old tables,
+ or choose a different table prefix.
+
diff --git a/installer/views/environment_errors.html.php b/installer/views/environment_errors.html.php
new file mode 100644
index 0000000..318be61
--- /dev/null
+++ b/installer/views/environment_errors.html.php
@@ -0,0 +1,20 @@
+
+ Whoa there!
+
+
+ There are some problems with your web hosting environment
+ that need to be fixed before you can successfully install
+ Gallery 3.
+
+
+
+
+
+ Check again
+
diff --git a/installer/views/get_db_info.html.php b/installer/views/get_db_info.html.php
new file mode 100644
index 0000000..c9f57e1
--- /dev/null
+++ b/installer/views/get_db_info.html.php
@@ -0,0 +1,89 @@
+
+ Let's get going!
+
+ Installing Gallery is easy. We just need a place to put your photos
+ and info about your MySQL database.
+
+
+
+
+ Photo Storage
+
+
+ We're having trouble creating a place for your photos. Can you
+ help? We need you to create a directory called var in
+ your gallery3 directory. This sample code works for most users.
+ Run it in the gallery3 directory:
+
+ mkdir var
+ chmod 777 var
+
+ Check again
+
+
+
+ We've found a place to store your photos:
+ = htmlspecialchars(VARPATH, ENT_QUOTES, 'UTF-8', true) ?>
+
+
+
+
+
+
+
diff --git a/installer/views/install.html.php b/installer/views/install.html.php
new file mode 100644
index 0000000..7a30561
--- /dev/null
+++ b/installer/views/install.html.php
@@ -0,0 +1,24 @@
+
+
+
+ Gallery 3 Installer
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/installer/views/invalid_db_info.html.php b/installer/views/invalid_db_info.html.php
new file mode 100644
index 0000000..242a28a
--- /dev/null
+++ b/installer/views/invalid_db_info.html.php
@@ -0,0 +1,6 @@
+
+ Uh oh!
+
+ We were unable to connect to your MySQL server with the username and
+ password that you provided. Please go back and try again!
+
diff --git a/installer/views/invalid_db_version.html.php b/installer/views/invalid_db_version.html.php
new file mode 100644
index 0000000..5b021ba
--- /dev/null
+++ b/installer/views/invalid_db_version.html.php
@@ -0,0 +1,5 @@
+
+ Uh oh!
+
+ Gallery requires at least MySQL version 5.0.0. You're using version = installer::mysql_version($config) ?>
+
diff --git a/installer/views/missing_db.html.php b/installer/views/missing_db.html.php
new file mode 100644
index 0000000..fa42fde
--- /dev/null
+++ b/installer/views/missing_db.html.php
@@ -0,0 +1,13 @@
+
+ Can't find that database!
+
+ We were able to connect to your MySQL server, yay! But the database
+ name you gave us doesn't exist and we don't have permissions to
+ create it for you. Please create the database manually, then go
+ back and try again.
+
+
+
+ If you're having trouble creating the database, please contact your
+ web host or system administrator for assistance.
+
diff --git a/installer/views/oops.html.php b/installer/views/oops.html.php
new file mode 100644
index 0000000..9c6b165
--- /dev/null
+++ b/installer/views/oops.html.php
@@ -0,0 +1,10 @@
+
+ Oops!
+
+ Something unexpected happened and we can't finish your install.
+ We'll try to provide some details about the specific problem below.
+
+
+
+
+
diff --git a/installer/views/success.html.php b/installer/views/success.html.php
new file mode 100644
index 0000000..e9ee981
--- /dev/null
+++ b/installer/views/success.html.php
@@ -0,0 +1,23 @@
+
+ Success!
+
+ Your Gallery 3 install is complete!
+
+
+
+ Before you start using it...
+
+ We've created an account for you to use:
+
+ username:
+
+ password:
+
+
+ Save this information in a safe place, or change your admin password
+ right away!
+
+
+
+
+
diff --git a/installer/web.php b/installer/web.php
new file mode 100644
index 0000000..5fa8541
--- /dev/null
+++ b/installer/web.php
@@ -0,0 +1,94 @@
+ $errors));
+ } else {
+ $content = render("get_db_info.html.php");
+ }
+ break;
+
+ case "save_db_info":
+ $config = array("host" => $_POST["dbhost"],
+ "user" => $_POST["dbuser"],
+ "password" => $_POST["dbpass"],
+ "dbname" => $_POST["dbname"],
+ "prefix" => $_POST["prefix"],
+ "type" => function_exists("mysqli_set_charset") ? "mysqli" : "mysql");
+ list ($config["host"], $config["port"]) = explode(":", $config["host"] . ":");
+ foreach ($config as $k => $v) {
+ if ($k == "password") {
+ $config[$k] = str_replace(array("'", "\\"), array("\\'", "\\\\"), $v);
+ } else {
+ $config[$k] = strtr($v, "'`\\", "___");
+ }
+ }
+
+ if (!installer::connect($config)) {
+ $content = render("invalid_db_info.html.php");
+ } else if (!installer::verify_mysql_version($config)) {
+ $content = render("invalid_db_version.html.php");
+ } else if (!installer::select_db($config)) {
+ $content = render("missing_db.html.php");
+ } else if (is_string($count = installer::db_empty($config)) || !$count) {
+ if (is_string($count)) {
+ $content = oops($count);
+ } else {
+ $content = render("db_not_empty.html.php");
+ }
+ } else if (!installer::unpack_var()) {
+ $content = oops("Unable to create files inside the var directory");
+ } else if (!installer::unpack_sql($config)) {
+ $content = oops("Failed to create tables in your database:" . mysql_error());
+ } else if (!installer::create_database_config($config)) {
+ $content = oops("Couldn't create var/database.php");
+ } else {
+ try {
+ list ($user, $password) = installer::create_admin($config);
+ installer::create_admin_session($config);
+ $content = render("success.html.php", array("user" => $user, "password" => $password));
+
+ installer::create_private_key($config);
+ } catch (Exception $e) {
+ $content = oops($e->getMessage());
+ }
+ }
+ break;
+ }
+}
+
+include("views/install.html.php");
+
+function render($view, $args=array()) {
+ ob_start();
+ extract($args);
+ include(DOCROOT . "installer/views/" . $view);
+ return ob_get_clean();
+}
+
+function oops($error) {
+ return render("oops.html.php", array("error" => $error));
+}
diff --git a/lib/flowplayer.controls.swf.php b/lib/flowplayer.controls.swf.php
new file mode 100644
index 0000000..0ef7a46
--- /dev/null
+++ b/lib/flowplayer.controls.swf.php
@@ -0,0 +1,31 @@
+1){var params=arguments[1],conf=(arguments.length==3)?arguments[2]:{};if(typeof params=='string'){params={src:params};}
+params=extend({bgcolor:"#000000",version:[10,1],expressInstall:"http://releases.flowplayer.org/swf/expressinstall.swf",cachebusting:false},params);if(typeof arg=='string'){if(arg.indexOf(".")!=-1){var instances=[];each(select(arg),function(){instances.push(new Player(this,clone(params),clone(conf)));});return new Iterator(instances);}else{var node=el(arg);return new Player(node!==null?node:clone(arg),clone(params),clone(conf));}}else if(arg){return new Player(arg,clone(params),clone(conf));}}
+return null;};extend(window.$f,{fireEvent:function(){var a=[].slice.call(arguments);var p=$f(a[0]);return p?p._fireEvent(a.slice(1)):null;},addPlugin:function(name,fn){Player.prototype[name]=fn;return $f;},each:each,extend:extend});if(typeof jQuery=='function'){jQuery.fn.flowplayer=function(params,conf){if(!arguments.length||typeof arguments[0]=='number'){var arr=[];this.each(function(){var p=$f(this);if(p){arr.push(p);}});return arguments.length?arr[arguments[0]]:new Iterator(arr);}
+return this.each(function(){$f(this,clone(params),conf?clone(conf):{});});};}}();!function(){var IE=document.all,URL='http://get.adobe.com/flashplayer',JQUERY=typeof jQuery=='function',RE=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,GLOBAL_OPTS={width:'100%',height:'100%',id:"_"+(""+Math.random()).slice(9),allowfullscreen:true,allowscriptaccess:'always',quality:'high',version:[3,0],onFail:null,expressInstall:null,w3c:false,cachebusting:false};if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};});}
+function extend(to,from){if(from){for(var key in from){if(from.hasOwnProperty(key)){to[key]=from[key];}}}
+return to;}
+function map(arr,func){var newArr=[];for(var i in arr){if(arr.hasOwnProperty(i)){newArr[i]=func(arr[i]);}}
+return newArr;}
+window.flashembed=function(root,opts,conf){if(typeof root=='string'){root=document.getElementById(root.replace("#",""));}
+if(!root){return;}
+if(typeof opts=='string'){opts={src:opts};}
+return new Flash(root,extend(extend({},GLOBAL_OPTS),opts),conf);};var f=extend(window.flashembed,{conf:GLOBAL_OPTS,getVersion:function(){var fo,ver;try{ver=navigator.plugins["Shockwave Flash"].description.slice(16);}catch(e){try{fo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");ver=fo&&fo.GetVariable("$version");}catch(err){try{fo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");ver=fo&&fo.GetVariable("$version");}catch(err2){}}}
+ver=RE.exec(ver);return ver?[1*ver[1],1*ver[(ver[1]*1>9?2:3)]*1]:[0,0];},asString:function(obj){if(obj===null||obj===undefined){return null;}
+var type=typeof obj;if(type=='object'&&obj.push){type='array';}
+switch(type){case'string':return string2JsonString(obj);case'array':return'['+map(obj,function(el){return f.asString(el);}).join(',')+']';case'function':return'"function()"';case'object':var str=[];for(var prop in obj){if(obj.hasOwnProperty(prop)){str.push('"'+prop+'":'+f.asString(obj[prop]));}}
+return'{'+str.join(',')+'}';}
+return String(obj).replace(/\s/g," ").replace(/\'/g,"\"");},getHTML:function(opts,conf){opts=extend({},opts);var html='';if(opts.w3c||IE){html+=' ';}
+opts.width=opts.height=opts.id=opts.w3c=opts.src=null;opts.onFail=opts.version=opts.expressInstall=null;for(var key in opts){if(opts[key]){html+=' ';}}
+var vars="";if(conf){for(var k in conf){if(conf[k]){var val=conf[k];vars+=encodeURIComponent(k)+'='
++encodeURIComponent(/function|object/.test(typeof val)?f.asString(val):val)
++'&';}}
+vars=vars.slice(0,-1);html+=' ';}
+html+=" ";return html;},isSupported:function(ver){return VERSION[0]>ver[0]||VERSION[0]==ver[0]&&VERSION[1]>=ver[1];}});var VERSION=f.getVersion();function Flash(root,opts,conf){if(f.isSupported(opts.version)){root.innerHTML=f.getHTML(opts,conf);}else if(opts.expressInstall&&f.isSupported([6,65])){root.innerHTML=f.getHTML(extend(opts,{src:opts.expressInstall}),{MMredirectURL:encodeURIComponent(location.href),MMplayerType:'PlugIn',MMdoctitle:document.title});}else{if(!root.innerHTML.replace(/\s/g,'')){root.innerHTML="Flash version "+opts.version+" or greater is required "+""+
+(VERSION[0]>0?"Your version is "+VERSION:"You have no flash plugin installed")+" "+
+(root.tagName=='A'?"Click here to download latest version
":"Download latest version from here
");if(root.tagName=='A'||root.tagName=="DIV"){root.onclick=function(){location.href=URL;};}}
+if(opts.onFail){var ret=opts.onFail.call(this);if(typeof ret=='string'){root.innerHTML=ret;}}}
+if(IE){window[opts.id]=document.getElementById(opts.id);}
+extend(this,{getRoot:function(){return root;},getOptions:function(){return opts;},getConf:function(){return conf;},getApi:function(){return root.firstChild;}});}
+var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function string2JsonString(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}
+if(JQUERY){jQuery.tools=jQuery.tools||{version:'@VERSION'};jQuery.tools.flashembed={conf:GLOBAL_OPTS};jQuery.fn.flashembed=function(opts,conf){return this.each(function(){$(this).data("flashembed",flashembed(this,opts,conf));});};}}();$f.addPlugin("ipad",function(options){var STATE_UNLOADED=-1;var STATE_LOADED=0;var STATE_UNSTARTED=1;var STATE_BUFFERING=2;var STATE_PLAYING=3;var STATE_PAUSED=4;var STATE_ENDED=5;var self=this;var currentVolume=1;var onStartFired=false;var stopping=false;var playAfterSeek=false;var activeIndex=0;var activePlaylist=[];var lastSecondTimer;var endTime=null;var startTime=0;var clipDefaults={accelerated:false,autoBuffering:false,autoPlay:true,baseUrl:null,bufferLength:3,connectionProvider:null,cuepointMultiplier:1000,cuepoints:[],controls:{},duration:0,extension:'',fadeInSpeed:1000,fadeOutSpeed:1000,image:false,linkUrl:null,linkWindow:'_self',live:false,metaData:{},originalUrl:null,position:0,playlist:[],provider:'http',scaling:'scale',seekableOnBegin:false,start:0,url:null,urlResolvers:[]};var currentState=STATE_UNLOADED;var previousState=STATE_UNLOADED;var isiDevice=/iPad|iPhone|iPod/i.test(navigator.userAgent);var video=null;function extend(to,from,includeFuncs){if(from){for(key in from){if(key){if(from[key]&&typeof from[key]=="function"&&!includeFuncs)
+continue;if(from[key]&&typeof from[key]=="object"&&from[key].length===undefined){var cp={};extend(cp,from[key]);to[key]=cp;}else{to[key]=from[key];}}}}
+return to;}
+var opts={simulateiDevice:false,controlsSizeRatio:1.5,controls:true,debug:false,validExtensions:'mov|m4v|mp4|avi|mp3|m4a|aac|m3u8|m3u|pls',posterExtensions:'png|jpg'};extend(opts,options);var validExtensions=opts.validExtensions?new RegExp('^\.('+opts.validExtensions+')$','i'):null;var posterExtensions=new RegExp('^\.('+opts.posterExtensions+')$','i');function log(){if(opts.debug){if(isiDevice){var str=[].splice.call(arguments,0).join(', ');console.log.apply(console,[str]);}else{console.log.apply(console,arguments);}}}
+function stateDescription(state){switch(state){case-1:return"UNLOADED";case 0:return"LOADED";case 1:return"UNSTARTED";case 2:return"BUFFERING";case 3:return"PLAYING";case 4:return"PAUSED";case 5:return"ENDED";}
+return"UNKOWN";}
+function actionAllowed(eventName){var ret=$f.fireEvent(self.id(),"onBefore"+eventName,activeIndex);return ret!==false;}
+function stopEvent(e){e.stopPropagation();e.preventDefault();return false;}
+function setState(state,force){if(currentState==STATE_UNLOADED&&!force)
+return;previousState=currentState;currentState=state;stopPlayTimeTracker();if(state==STATE_PLAYING)
+startPlayTimeTracker();log(stateDescription(state));}
+function resetState(){video.fp_stop();onStartFired=false;stopping=false;playAfterSeek=false;setState(STATE_UNSTARTED);setState(STATE_UNSTARTED);}
+var _playTimeTracker=null;function startPlayTimeTracker(){if(_playTimeTracker)
+return;console.log("starting tracker");_playTimeTracker=setInterval(onTimeTracked,100);onTimeTracked();}
+function stopPlayTimeTracker(){clearInterval(_playTimeTracker);_playTimeTracker=null;}
+function onTimeTracked(){var currentTime=Math.floor(video.fp_getTime()*10)*100;var duration=Math.floor(video.duration*10)*100;var fireTime=(new Date()).time;function fireCuePointsIfNeeded(time,cues){time=time>=0?time:duration-Math.abs(time);for(var i=0;ifireTime){cues[i].lastTimeFired=-1;}else if(cues[i].lastTimeFired+500>fireTime){continue;}else{if(time==currentTime||(currentTime-500time)){cues[i].lastTimeFired=fireTime;$f.fireEvent(self.id(),'onCuepoint',activeIndex,cues[i].fnId,cues[i].parameters);}}}}
+$f.each(self.getCommonClip().cuepoints,fireCuePointsIfNeeded);$f.each(activePlaylist[activeIndex].cuepoints,fireCuePointsIfNeeded);}
+function replay(){resetState();playAfterSeek=true;video.fp_seek(0);}
+function scaleVideo(clip){}
+function addAPI(){console.log(video);function fixClip(clip){var extendedClip={};extend(extendedClip,clipDefaults);extend(extendedClip,self.getCommonClip());extend(extendedClip,clip);if(extendedClip.ipadUrl)
+url=decodeURIComponent(extendedClip.ipadUrl);else if(extendedClip.url)
+url=extendedClip.url;if(url&&url.indexOf('://')==-1&&extendedClip.ipadBaseUrl)
+url=extendedClip.ipadBaseUrl+'/'+url;else if(url&&url.indexOf('://')==-1&&extendedClip.baseUrl)
+url=extendedClip.baseUrl+'/'+url;extendedClip.originalUrl=extendedClip.url;extendedClip.completeUrl=url;extendedClip.extension=extendedClip.completeUrl.substr(extendedClip.completeUrl.lastIndexOf('.'));var queryIndex=extendedClip.extension.indexOf('?');if(queryIndex>-1)
+extendedClip.extension=extendedClip.extension.substr(0,queryIndex);extendedClip.type='video';delete extendedClip.index;log("fixed clip",extendedClip);return extendedClip;}
+video.fp_play=function(clip,inStream,forcePlay,poster){var url=null;var autoBuffering=true;var autoPlay=true;log("Calling play() "+clip,clip);if(inStream){log("ERROR: inStream clips not yet supported");return;}
+if(clip!==undefined){if(typeof clip=="number"){if(activeIndex>=activePlaylist.length)
+return;activeIndex=clip;clip=activePlaylist[activeIndex];}else{if(typeof clip=="string"){clip={url:clip};}
+video.fp_setPlaylist(clip.length!==undefined?clip:[clip]);}
+if(activeIndex==0&&activePlaylist.length>1&&posterExtensions.test(activePlaylist[activeIndex].extension)){var poster=activePlaylist[activeIndex].url;console.log("Poster image available with url "+poster);++activeIndex;console.log("Not last clip in the playlist, moving to next one");video.fp_play(activeIndex,false,true,poster);return;}
+if(validExtensions&&!validExtensions.test(activePlaylist[activeIndex].extension)){return;}
+clip=activePlaylist[activeIndex];url=clip.completeUrl;if(clip.autoBuffering!==undefined&&clip.autoBuffering===false)
+autoBuffering=false;if(clip.autoPlay===undefined||clip.autoPlay===true||forcePlay===true){autoBuffering=true;autoPlay=true;}else{autoPlay=false;}}else{log("clip was not given, simply calling video.play, if not already buffering");if(currentState!=STATE_BUFFERING){video.play();}
+return;}
+log("about to play "+url,autoBuffering,autoPlay);resetState();if(url){log("Changing SRC attribute"+url);video.setAttribute('src',url);}
+if(autoBuffering){if(!actionAllowed('Begin'))
+return false;if(poster){autoPlay=clip.autoPlay;video.setAttribute('poster',poster);video.setAttribute('preload',"none");}
+$f.fireEvent(self.id(),'onBegin',activeIndex);log("calling video.load()");video.load();}
+if(autoPlay){log("calling video.play()");video.play();}}
+video.fp_pause=function(){log("pause called");if(!actionAllowed('Pause'))
+return false;video.pause();};video.fp_resume=function(){log("resume called");if(!actionAllowed('Resume'))
+return false;video.play();};video.fp_stop=function(){log("stop called");if(!actionAllowed('Stop'))
+return false;stopping=true;video.pause();try{video.currentTime=0;}catch(ignored){}};video.fp_seek=function(position){log("seek called "+position);if(!actionAllowed('Seek'))
+return false;var seconds=0;var position=position+"";if(position.charAt(position.length-1)=='%'){var percentage=parseInt(position.substr(0,position.length-1))/100;var duration=video.duration;seconds=duration*percentage;}else{seconds=position;}
+try{video.currentTime=seconds;}catch(e){log("Wrong seek time");}};video.fp_getTime=function(){return video.currentTime;};video.fp_mute=function(){log("mute called");if(!actionAllowed('Mute'))
+return false;currentVolume=video.volume;video.volume=0;};video.fp_unmute=function(){if(!actionAllowed('Unmute'))
+return false;video.volume=currentVolume;};video.fp_getVolume=function(){return video.volume*100;};video.fp_setVolume=function(volume){if(!actionAllowed('Volume'))
+return false;video.volume=volume/100;};video.fp_toggle=function(){log('toggle called');if(self.getState()==STATE_ENDED){replay();return;}
+if(video.paused)
+video.fp_play();else
+video.fp_pause();};video.fp_isPaused=function(){return video.paused;};video.fp_isPlaying=function(){return!video.paused;};video.fp_getPlugin=function(name){if(name=='canvas'||name=='controls'){var config=self.getConfig();return config['plugins']&&config['plugins'][name]?config['plugins'][name]:null;}
+log("ERROR: no support for "+name+" plugin on iDevices");return null;};video.fp_close=function(){setState(STATE_UNLOADED);video.parentNode.removeChild(video);video=null;};video.fp_getStatus=function(){var bufferStart=0;var bufferEnd=0;try{bufferStart=video.buffered.start();bufferEnd=video.buffered.end();}catch(ignored){}
+return{bufferStart:bufferStart,bufferEnd:bufferEnd,state:currentState,time:video.fp_getTime(),muted:video.muted,volume:video.fp_getVolume()};};video.fp_getState=function(){return currentState;};video.fp_startBuffering=function(){if(currentState==STATE_UNSTARTED)
+video.load();};video.fp_setPlaylist=function(playlist){log("Setting playlist");activeIndex=0;for(var i=0;i0){clipDuration=activePlaylist[activeIndex].duration;endTime=clipDuration+startTime;}else{clipDuration=video.duration;endTime=null;}
+video.fp_updateClip({duration:clipDuration,metaData:{duration:video.duration}},activeIndex);activePlaylist[activeIndex].duration=video.duration;activePlaylist[activeIndex].metaData={duration:video.duration};$f.fireEvent(self.id(),'onMetaData',activeIndex,activePlaylist[activeIndex]);};video.addEventListener('loadedmetadata',onMetaData,false);video.addEventListener('durationchange',onMetaData,false);var onTimeUpdate=function(e){if(endTime&&video.currentTime>endTime){video.fp_seek(startTime);resetState();return stopEvent(e);}};video.addEventListener("timeupdate",onTimeUpdate,false);var onStart=function(e){if(currentState==STATE_PAUSED){if(!actionAllowed('Resume')){log("Resume disallowed, pausing");video.fp_pause();return stopEvent(e);}
+$f.fireEvent(self.id(),'onResume',activeIndex);}
+setState(STATE_PLAYING);if(!onStartFired){onStartFired=true;$f.fireEvent(self.id(),'onStart',activeIndex);}};video.addEventListener('playing',onStart,false);var onPlay=function(e){startLastSecondTimer();}
+video.addEventListener('play',onPlay,false);var onFinish=function(e){if(!actionAllowed('Finish')){if(activePlaylist.length==1){log("Active playlist only has one clip, onBeforeFinish returned false. Replaying");replay();}else if(activeIndex!=(activePlaylist.length-1)){log("Not the last clip in the playlist, but onBeforeFinish returned false. Returning to the beginning of current clip");video.fp_seek(0);}else{log("Last clip in playlist, but onBeforeFinish returned false, start again from the beginning");video.fp_play(0);}
+return stopEvent(e);}
+setState(STATE_ENDED);$f.fireEvent(self.id(),'onFinish',activeIndex);if(activePlaylist.length>1&&activeIndex<(activePlaylist.length-1)){log("Not last clip in the playlist, moving to next one");video.fp_play(++activeIndex,false,true);}};video.addEventListener('ended',onFinish,false);var onError=function(e){setState(STATE_LOADED,true);$f.fireEvent(self.id(),'onError',activeIndex,201);if(opts.onFail&&opts.onFail instanceof Function)
+opts.onFail.apply(self,[]);};video.addEventListener('error',onError,false);var onPause=function(e){log("got pause event from player"+self.id());if(stopping)
+return;if(currentState==STATE_BUFFERING&&previousState==STATE_UNSTARTED){log("forcing play");setTimeout(function(){video.play();},0);return;}
+if(!actionAllowed('Pause')){video.fp_resume();return stopEvent(e);}
+stopLastSecondTimer();setState(STATE_PAUSED);$f.fireEvent(self.id(),'onPause',activeIndex);}
+video.addEventListener('pause',onPause,false);var onSeek=function(e){$f.fireEvent(self.id(),'onBeforeSeek',activeIndex);};video.addEventListener('seeking',onSeek,false);var onSeekDone=function(e){if(stopping){stopping=false;$f.fireEvent(self.id(),'onStop',activeIndex);}
+else
+$f.fireEvent(self.id(),'onSeek',activeIndex);log("seek done, currentState",stateDescription(currentState));if(playAfterSeek){playAfterSeek=false;video.fp_play();}else if(currentState!=STATE_PLAYING)
+video.fp_pause();};video.addEventListener('seeked',onSeekDone,false);var onVolumeChange=function(e){$f.fireEvent(self.id(),'onVolume',video.fp_getVolume());};video.addEventListener('volumechange',onVolumeChange,false);}
+function startLastSecondTimer(){lastSecondTimer=setInterval(function(){if(video.fp_getTime()>=video.duration-1){$f.fireEvent(self.id(),'onLastSecond',activeIndex);stopLastSecondTimer();}},100);}
+function stopLastSecondTimer(){clearInterval(lastSecondTimer);}
+function onPlayerLoaded(){video.fp_play(0);}
+function installControlbar(){}
+if(isiDevice||opts.simulateiDevice){if(!window.flashembed.__replaced){var realFlashembed=window.flashembed;window.flashembed=function(root,opts,conf){if(typeof root=='string'){root=document.getElementById(root.replace("#",""));}
+if(!root){return;}
+var style=window.getComputedStyle(root,null);var width=parseInt(style.width);var height=parseInt(style.height);while(root.firstChild)
+root.removeChild(root.firstChild);var container=document.createElement('div');var api=document.createElement('video');container.appendChild(api);root.appendChild(container);container.style.height=height+'px';container.style.width=width+'px';container.style.display='block';container.style.position='relative';container.style.background='-webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.7)))';container.style.cursor='default';container.style.webkitUserDrag='none';api.style.height='100%';api.style.width='100%';api.style.display='block';api.id=opts.id;api.name=opts.id;api.style.cursor='pointer';api.style.webkitUserDrag='none';api.type="video/mp4";api.playerConfig=conf.config;$f.fireEvent(conf.config.playerId,'onLoad','player');};flashembed.getVersion=realFlashembed.getVersion;flashembed.asString=realFlashembed.asString;flashembed.isSupported=function(){return true;}
+flashembed.__replaced=true;}
+var __fireEvent=self._fireEvent;self._fireEvent=function(a){if(a[0]=='onLoad'&&a[1]=='player'){video=self.getParent().querySelector('video');if(opts.controls)
+video.controls="controls";addAPI();addListeners();setState(STATE_LOADED,true);video.fp_setPlaylist(video.playerConfig.playlist);onPlayerLoaded();__fireEvent.apply(self,[a]);}
+var shouldFireEvent=currentState!=STATE_UNLOADED;if(currentState==STATE_UNLOADED&&typeof a=='string')
+shouldFireEvent=true;if(shouldFireEvent)
+return __fireEvent.apply(self,[a]);}
+self._swfHeight=function(){return parseInt(video.style.height);}
+self.hasiPadSupport=function(){return true;}}
+return self;});
\ No newline at end of file
diff --git a/lib/flowplayer.pseudostreaming-byterange.swf.php b/lib/flowplayer.pseudostreaming-byterange.swf.php
new file mode 100644
index 0000000..8fc591a
--- /dev/null
+++ b/lib/flowplayer.pseudostreaming-byterange.swf.php
@@ -0,0 +1,31 @@
+ tallest_height) {
+ tallest_height = $(this).height();
+ }
+ });
+ return $(this).height(tallest_height);
+ };
+
+ // Vertically align a block element's content
+ $.fn.gallery_valign = function(container) {
+ return this.each(function(i){
+ if (container == null) {
+ container = 'div';
+ }
+ var el = $(this).find(".g-valign");
+ if (!el.length) {
+ $(this).html("<" + container + " class=\"g-valign\">" + $(this).html() +
+ "" + container + ">");
+ el = $(this).children(container + ".g-valign");
+ }
+ var elh = $(el).height();
+ var ph = $(this).height();
+ var nh = (ph - elh) / 2;
+ if (nh < 1) { var nh = 0; }
+ $(el).css('margin-top', nh);
+ });
+ };
+
+ // Get the viewport size
+ $.gallery_get_viewport_size = function() {
+ return {
+ width : function() {
+ return $(window).width();
+ },
+ height : function() {
+ return $(window).height();
+ }
+ };
+ };
+
+ /**
+ * Toggle the processing indicator, both large and small
+ * @param elementID Target ID, including #, to apply .g-loading-size
+ */
+ $.fn.gallery_show_loading = function() {
+ return this.each(function(i){
+ var size;
+ switch ($(this).attr("id")) {
+ case "#g-dialog":
+ case "#g-panel":
+ size = "large";
+ break;
+ default:
+ size = "small";
+ break;
+ }
+ $(this).toggleClass("g-loading-" + size);
+ });
+ };
+
+ /**
+ * Reduce the width of an image if it's wider than its parent container
+ * @param elementID The image container's ID
+ */
+ $.fn.gallery_fit_photo = function() {
+ return this.each(function(i) {
+ var container_width = $(this).width();
+ var photo = $(this).gallery_get_photo();
+ var photo_width = photo.width();
+ if (container_width < photo_width) {
+ var proportion = container_width / photo_width;
+ photo.width(container_width);
+ photo.height(proportion * photo.height());
+ }
+ });
+ };
+
+ /**
+ * Get a thumbnail or resize photo within a container
+ * @param elementID The image container's ID
+ * @return object
+ */
+ $.fn.gallery_get_photo = function() {
+ var photo = $(this).find("img,object").filter(function() {
+ return this.id.match(/g-(photo|movie)-id-\d+/);
+ });
+ return photo;
+ };
+
+ /**
+ * Get the sum of an element's height, margin-top, and margin-bottom
+ * @param elementID the element's ID
+ * @return int
+ */
+ $.fn.gallery_height = function() {
+ var ht = $(this).height();
+ var mt = parseInt($(this).css("margin-top"));
+ var mb = parseInt($(this).css("margin-bottom"));
+ return ht + parseInt(mt) + parseInt(mb);
+ };
+
+ // Add hover state to buttons
+ $.fn.gallery_hover_init = function() {
+ $(".ui-state-default").hover(
+ function(){
+ $(this).addClass("ui-state-hover");
+ },
+ function(){
+ $(this).removeClass("ui-state-hover");
+ }
+ );
+ };
+
+ // Ajax handler for replacing an image, used in Ajax thumbnail rotation
+ $.gallery_replace_image = function(data, img_selector) {
+ $(img_selector).attr({src: data.src, width: data.width, height: data.height});
+ $(img_selector).trigger("gallery.change");
+ };
+
+ // Initialize context menus
+ $.fn.gallery_context_menu = function() {
+ if ($(".g-context-menu li").length) {
+ var hover_target = $(this).find(".g-context-menu");
+ if (hover_target.attr("context_menu_initialized")) {
+ return;
+ }
+ var list = $(hover_target).find("ul");
+ hover_target.find("*").removeAttr('title');
+ list.hide();
+ hover_target.hover(
+ function() {
+ list.stop(false, true).slideDown("fast");
+ $(this).find(".g-dialog-link").gallery_dialog();
+ $(this).find(".g-ajax-link").gallery_ajax();
+ },
+ function() {
+ list.stop(true, true).slideUp("slow");
+ }
+ );
+ hover_target.attr("context_menu_initialized", 1);
+ }
+ };
+
+ // Size a container to fit within the browser window
+ $.gallery_auto_fit_window = function(imageWidth, imageHeight) {
+ var size = $.gallery_get_viewport_size();
+ var width = size.width() - 6,
+ height = size.height() - 6;
+
+ var ratio = width / imageWidth;
+ imageWidth *= ratio;
+ imageHeight *= ratio;
+
+ /* after scaling the width, check that the height fits */
+ if (imageHeight > height) {
+ ratio = height / imageHeight;
+ imageWidth *= ratio;
+ imageHeight *= ratio;
+ }
+
+ // handle the case where the calculation is almost zero (2.14e-14)
+ return {
+ top: Math.round((height - imageHeight) / 2),
+ left: Math.round((width - imageWidth) / 2),
+ width: Math.round(imageWidth),
+ height: Math.round(imageHeight)
+ };
+ };
+
+ // Initialize a short form. Short forms may contain only one text input.
+ $.fn.gallery_short_form = function() {
+ return this.each(function(i){
+ var label = $(this).find("label:first");
+ var input = $(this).find("input[type=text]:first");
+ var button = $(this).find("input[type=submit]");
+
+ $(".g-short-form").addClass("ui-helper-clearfix");
+
+ // Place button's on the left for RTL languages
+ if ($(".rtl").length) {
+ $(".g-short-form input[type=text]").addClass("ui-corner-right");
+ $(".g-short-form input[type=submit]").addClass("ui-state-default ui-corner-left");
+ } else {
+ $(".g-short-form input[type=text]").addClass("ui-corner-left");
+ $(".g-short-form input[type=submit]").addClass("ui-state-default ui-corner-right");
+ }
+
+ // Set the input value equal to label text
+ if (input.val() == "") {
+ input.val(label.html());
+ button.enable(false);
+ }
+
+ // Attach event listeners to the input
+ input.bind("focus", function(e) {
+ // Empty input value if it equals it's label
+ if ($(this).val() == label.html()) {
+ $(this).val("");
+ }
+ button.enable(true);
+ });
+
+ input.bind("blur", function(e){
+ // Reset the input value if it's empty
+ if ($(this).val() == "") {
+ $(this).val(label.html());
+ button.enable(false);
+ }
+ });
+ });
+ };
+
+ // Augment jQuery autocomplete to expect the first response line to
+ // be a tag that protects against UTF-7 attacks.
+ $.fn.gallery_autocomplete = function(url, options) {
+ // Drop the first response - it should be a meta tag
+ options.parse = function(data) {
+ var parsed = [];
+ var rows = data.split("\n");
+ if (rows[0].indexOf(" tag in first line of autocomplete response';
+ }
+ rows.shift(); // drop tag
+ for (var i=0; i < rows.length; i++) {
+ var row = $.trim(rows[i]);
+ if (row) {
+ row = row.split("|");
+ parsed[parsed.length] = {
+ data: row,
+ value: row[0],
+ result: row[0]
+ };
+ }
+ }
+ return parsed;
+ };
+
+ $(this).autocomplete(url, options);
+ };
+
+})(jQuery);
diff --git a/lib/gallery.dialog.js b/lib/gallery.dialog.js
new file mode 100644
index 0000000..3115532
--- /dev/null
+++ b/lib/gallery.dialog.js
@@ -0,0 +1,221 @@
+
+(function($) {
+ $.widget("ui.gallery_dialog", {
+ _init: function() {
+ var self = this;
+ if (!self.options.immediate) {
+ this.element.click(function(event) {
+ event.preventDefault();
+ self._show($(event.currentTarget).attr("href"));
+ return false;
+ });
+ } else {
+ self._show(this.element.attr("href"));
+ }
+ },
+
+ _show: function(sHref) {
+ var self = this;
+ var eDialog = '
';
+
+ if ($("#g-dialog").length) {
+ $("#g-dialog").dialog("close");
+ }
+ $("body").append(eDialog);
+
+ if (!self.options.close) {
+ self.options.close = self.close_dialog;
+ }
+ $("#g-dialog").dialog(self.options);
+
+ $("#g-dialog").gallery_show_loading();
+
+ $.ajax({
+ url: sHref,
+ type: "GET",
+ beforeSend: function(xhr) {
+ // Until we convert to jquery 1.4, we need to save the XMLHttpRequest object so that we
+ // can detect the mime type of the reply
+ this.xhrData = xhr;
+ },
+ success: function(data, textStatus, xhr) {
+ // Pre jquery 1.4, get the saved XMLHttpRequest object
+ if (xhr == undefined) {
+ xhr = this.xhrData;
+ }
+ var mimeType = /^(\w+\/\w+)\;?/.exec(xhr.getResponseHeader("Content-Type"));
+
+ var content = "";
+ if (mimeType[1] == "application/json") {
+ data = JSON.parse(data);
+ content = data.html;
+ } else {
+ content = data;
+ }
+
+ $("#g-dialog").html(content).gallery_show_loading();
+
+ if ($("#g-dialog form").length) {
+ self.form_loaded(null, $("#g-dialog form"));
+ }
+ self._layout();
+
+ $("#g-dialog").dialog("open");
+ self._set_title();
+
+ if ($("#g-dialog form").length) {
+ self._ajaxify_dialog();
+ }
+ }
+ });
+ $("#g-dialog").dialog("option", "self", self);
+ },
+
+ error: function(xhr, textStatus, errorThrown) {
+ $("#g-dialog").html(xhr.responseText);
+ self._set_title();
+ self._layout();
+ },
+
+ _layout: function() {
+ var dialogWidth;
+ var dialogHeight = $("#g-dialog").height();
+ var cssWidth = new String($("#g-dialog form").css("width"));
+ var childWidth = cssWidth.replace(/[^0-9]/g,"");
+ var size = $.gallery_get_viewport_size();
+ if ($("#g-dialog iframe").length) {
+ dialogWidth = size.width() - 100;
+ // Set the iframe width and height
+ $("#g-dialog iframe").width("100%").height(size.height() - 100);
+ } else if ($("#g-dialog .g-dialog-panel").length) {
+ dialogWidth = size.width() - 100;
+ $("#g-dialog").dialog("option", "height", size.height() - 100);
+ } else if (childWidth == "" || childWidth > 300) {
+ dialogWidth = 500;
+ }
+ $("#g-dialog").dialog('option', 'width', dialogWidth);
+ },
+
+ form_loaded: function(event, ui) {
+ // Should be defined (and localized) in the theme
+ MSG_CANCEL = MSG_CANCEL || 'Cancel';
+ var eCancel = '' + MSG_CANCEL + ' ';
+ if ($("#g-dialog .submit").length) {
+ $("#g-dialog .submit").addClass("ui-state-default ui-corner-all");
+ $.fn.gallery_hover_init();
+ $("#g-dialog .submit").parent().append(eCancel);
+ $("#g-dialog .g-cancel").click(function(event) {
+ $("#g-dialog").dialog("close");
+ event.preventDefault();
+ });
+ }
+ $("#g-dialog .ui-state-default").hover(
+ function() {
+ $(this).addClass("ui-state-hover");
+ },
+ function() {
+ $(this).removeClass("ui-state-hover");
+ }
+ );
+ },
+
+ close_dialog: function(event, ui) {
+ var self = $("#g-dialog").dialog("option", "self");
+ if ($("#g-dialog form").length) {
+ self._trigger("form_closing", null, $("#g-dialog form"));
+ }
+ self._trigger("dialog_closing", null, $("#g-dialog"));
+ $("#g-dialog").dialog("destroy").remove();
+ },
+
+ _ajaxify_dialog: function() {
+ var self = this;
+ $("#g-dialog form").ajaxForm({
+ beforeSubmit: function(formData, form, options) {
+ form.find(":submit")
+ .addClass("ui-state-disabled")
+ .attr("disabled", "disabled");
+ return true;
+ },
+ beforeSend: function(xhr) {
+ // Until we convert to jquery 1.4, we need to save the XMLHttpRequest object so that we
+ // can detect the mime type of the reply
+ this.xhrData = xhr;
+ },
+ success: function(data) {
+ // Pre jquery 1.4, get the saved XMLHttpRequest object
+ xhr = this.xhrData;
+ if (xhr) {
+ var mimeType = /^(\w+\/\w+)\;?/.exec(xhr.getResponseHeader("Content-Type"));
+
+ var content = "";
+ if (mimeType[1] == "application/json") {
+ data = JSON.parse(data);
+ } else {
+ data = {"html": escape(data)};
+ }
+ } else {
+ // Uploading files (eg: watermark) uses a fake xhr in jquery.form.js so
+ // all we have is in the data field, which should be some very simple JSON.
+ // Weirdly enough in Chrome the result gets wrapped in a element and
+ // looks like this:
+ // {"result":"success",
+ // "location":"\/~bharat\/gallery3\/index.php\/admin\/watermarks"}
+ // bizarre. Strip that off before parsing.
+ data = JSON.parse(data.match("({.*})")[0]);
+ }
+
+ if (data.html) {
+ $("#g-dialog").html(data.html);
+ $("#g-dialog").dialog("option", "position", "center");
+ $("#g-dialog form :submit").removeClass("ui-state-disabled")
+ .attr("disabled", null);
+ self._set_title();
+ self._ajaxify_dialog();
+ self.form_loaded(null, $("#g-dialog form"));
+ if (typeof data.reset == 'function') {
+ eval(data.reset + '()');
+ }
+ }
+ if (data.result == "success") {
+ if (data.location) {
+ window.location = data.location;
+ } else {
+ window.location.reload();
+ }
+ }
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ $("#g-dialog").html(xhr.responseText);
+ self._set_title();
+ self._layout();
+ }
+ });
+ },
+
+ _set_title: function() {
+ // Remove titlebar for progress dialogs or set title
+ if ($("#g-dialog #g-progress").length) {
+ $(".ui-dialog-titlebar").remove();
+ } else if ($("#g-dialog h1").length) {
+ $("#g-dialog").dialog('option', 'title', $("#g-dialog h1:eq(0)").html());
+ $("#g-dialog h1:eq(0)").hide();
+ } else if ($("#g-dialog fieldset legend").length) {
+ $("#g-dialog").dialog('option', 'title', $("#g-dialog fieldset legend:eq(0)").html());
+ }
+ },
+
+ form_closing: function(event, ui) {},
+ dialog_closing: function(event, ui) {}
+ });
+
+ $.extend($.ui.gallery_dialog, {
+ defaults: {
+ autoOpen: false,
+ autoResize: true,
+ modal: true,
+ resizable: false,
+ position: "center"
+ }
+ });
+})(jQuery);
diff --git a/lib/gallery.in_place_edit.js b/lib/gallery.in_place_edit.js
new file mode 100644
index 0000000..5a815da
--- /dev/null
+++ b/lib/gallery.in_place_edit.js
@@ -0,0 +1,75 @@
+(function($) {
+ $.widget("ui.gallery_in_place_edit", {
+ _init: function() {
+ var self = this;
+ this.element.click(function(event) {
+ event.preventDefault();
+ self._show(event.currentTarget);
+ return false;
+ });
+ },
+
+ _show: function(target) {
+ if ($(target).data("gallery_in_place_edit") == true) {
+ return;
+ }
+ $(target).data("gallery_in_place_edit", true);
+ var self = this;
+ var tag_width = $(target).width();
+ $(self).data("tag_width", tag_width);
+
+ var form = $("#g-in-place-edit-form");
+ if (form.length > 0) {
+ self._cancel();
+ }
+
+ $.get(self.options.form_url.replace("__ID__", $(target).attr('rel')), function(data) {
+ var parent = $(target).parent();
+ parent.children().hide();
+ parent.append(data);
+ self._setup_form(parent.find("form"));
+ });
+ },
+
+ _setup_form: function(form) {
+ var self = this;
+ var width = $(self).data("tag_width");
+ form.find(":text").width(width).focus();
+ form.find(".g-cancel").click(function(event) {
+ self._cancel();
+ event.preventDefault();
+ return false;
+ });
+ $(".g-short-form").gallery_short_form();
+ this._ajaxify_edit();
+ },
+
+ _cancel: function() {
+ var parent = $("#g-in-place-edit-form").parent();
+ $("#g-in-place-edit-form").remove();
+ $(parent).children().show();
+ $(parent).find(".g-editable").data("gallery_in_place_edit", false);
+ },
+
+ _ajaxify_edit: function() {
+ var self = this;
+ var form = $("#g-in-place-edit-form");
+ $(form).ajaxForm({
+ dataType: "json",
+ success: function(data) {
+ if (data.result == "success") {
+ window.location.reload();
+ } else {
+ var parent = $(form).parent();
+ $(form).replaceWith(data.form);
+ self._setup_form(parent.find("form"));
+ }
+ }
+ });
+ }
+ });
+
+ $.extend($.ui.gallery_in_place_edit, {
+ defaults: {}
+ });
+})(jQuery);
diff --git a/lib/gallery.panel.js b/lib/gallery.panel.js
new file mode 100644
index 0000000..0683c53
--- /dev/null
+++ b/lib/gallery.panel.js
@@ -0,0 +1,100 @@
+(function($) {
+ $.widget("ui.gallery_panel", {
+ _init: function() {
+ var self = this;
+ this.element.click(function(event) {
+ event.preventDefault();
+ var element = event.currentTarget;
+ var parent = $(element).parent().parent();
+ var sHref = $(element).attr("href");
+ var parentClass = $(parent).attr("class");
+ var ePanel = " ";
+
+ // We keep track of the open vs. closed state by looking to see if there'
+ // an orig_text attr. If that attr is missing, then the panel is closed
+ // and we want to open it
+ var should_open = !$(element).attr("orig_text");
+
+ // Close any open panels and reset their button text
+ if ($("#g-panel").length) {
+ $("#g-panel").slideUp("slow").remove();
+ $.each($(".g-panel-link"),
+ function() {
+ if ($(this).attr("orig_text")) {
+ $(this).children(".g-button-text").text($(this).attr("orig_text"));
+ $(this).attr("orig_text", "");
+ }
+ }
+ );
+ }
+
+ if (should_open) {
+ $(parent).after(ePanel);
+ $("#g-panel td").html(sHref);
+ $.ajax({
+ url: sHref,
+ type: "GET",
+ beforeSend: function(xhr) {
+ // Until we convert to jquery 1.4, we need to save the
+ // XMLHttpRequest object
+ this.xhrData = xhr;
+ },
+ success: function(data, textStatus, xhr) {
+ // Pre jquery 1.4, get the saved XMLHttpRequest object
+ if (xhr == undefined) {
+ xhr = this.xhrData;
+ }
+ var mimeType = /^(\w+\/\w+)\;?/.exec(xhr.getResponseHeader("Content-Type"));
+ var content = "";
+ if (mimeType[1] == "application/json") {
+ data = JSON.parse(data);
+ content = data.html;
+ } else {
+ content = data;
+ }
+
+ $("#g-panel td").html(content);
+ self._ajaxify_panel();
+ if ($(element).attr("open_text")) {
+ $(element).attr("orig_text", $(element).children(".g-button-text").text());
+ $(element).children(".g-button-text").text($(element).attr("open_text"));
+ }
+ $("#g-panel").addClass(parentClass).show().slideDown("slow");
+ }
+ });
+ }
+
+ return false;
+ });
+ },
+
+ _ajaxify_panel: function () {
+ var self = this;
+ $("#g-panel td form").ajaxForm({
+ dataType: "json",
+ beforeSubmit: function(formData, form, options) {
+ form.find(":submit")
+ .addClass("ui-state-disabled")
+ .attr("disabled", "disabled");
+ return true;
+ },
+ success: function(data) {
+ if (data.html) {
+ $("#g-panel td").html(data.html);
+ self._ajaxify_panel();
+ }
+ if (data.result == "success") {
+ self._trigger("success", null, {});
+ if (data.location) {
+ window.location = data.location;
+ } else {
+ window.location.reload();
+ }
+ }
+ }
+ });
+ },
+
+ success: function(event, ui) {}
+ });
+ })(jQuery);
diff --git a/lib/gallery.show_full_size.js b/lib/gallery.show_full_size.js
new file mode 100644
index 0000000..0baee88
--- /dev/null
+++ b/lib/gallery.show_full_size.js
@@ -0,0 +1,58 @@
+(function($) {
+ /**
+ * @todo Move inline CSS out to external style sheet (theme style sheet)
+ */
+ $.gallery_show_full_size = function(image_url, image_width, image_height) {
+ var width = $(document).width();
+ var height = $(document).height();
+ var size = $.gallery_get_viewport_size();
+
+ $("body").append('
');
+
+ var image_size;
+ if (image_width >= size.width() - 6 || image_height >= size.height() - 6) {
+ image_size = $.gallery_auto_fit_window(image_width, image_height);
+ } else {
+ image_size = {
+ top: 12,
+ left: Math.round((width - image_width) / 2),
+ width: Math.round(image_width),
+ height: Math.round(image_height)
+ };
+ }
+
+ $("body").append('');
+
+ $().click(function() {
+ $("#g-fullsize-overlay*").remove();
+ $("#g-fullsize").remove();
+ });
+ $().bind("keypress", function() {
+ $("#g-fullsize-overlay*").remove();
+ $("#g-fullsize").remove();
+ });
+ $(window).resize(function() {
+ $("#g-fullsize-overlay").width($(document).width()).height($(document).height());
+ image_size = $.gallery_auto_fit_window(image_width, image_height);
+ $("#g-fullsize").height(image_size.height)
+ .width(image_size.width)
+ .css("top", image_size.top)
+ .css("left", image_size.left);
+ $("#g-fullsize-image").height(image_size.height).width(image_size.width);
+ });
+ };
+})(jQuery);
diff --git a/lib/images/Galerie-Logo.png b/lib/images/Galerie-Logo.png
new file mode 100644
index 0000000..95c7007
Binary files /dev/null and b/lib/images/Galerie-Logo.png differ
diff --git a/lib/images/apple-touch-icon.png b/lib/images/apple-touch-icon.png
new file mode 100644
index 0000000..d15ce1a
Binary files /dev/null and b/lib/images/apple-touch-icon.png differ
diff --git a/lib/images/favicon.ico b/lib/images/favicon.ico
new file mode 100644
index 0000000..66531d8
Binary files /dev/null and b/lib/images/favicon.ico differ
diff --git a/lib/images/logo.png b/lib/images/logo.png
new file mode 100644
index 0000000..7d7b9b9
Binary files /dev/null and b/lib/images/logo.png differ
diff --git a/lib/jquery-ui.js b/lib/jquery-ui.js
new file mode 100644
index 0000000..74515a5
--- /dev/null
+++ b/lib/jquery-ui.js
@@ -0,0 +1,328 @@
+;jQuery.ui||(function($){var _remove=$.fn.remove,isFF2=$.browser.mozilla&&(parseFloat($.browser.version)<1.9);$.ui={version:"1.7.2",plugin:{add:function(module,option,set){var proto=$.ui[module].prototype;for(var i in set){proto.plugins[i]=proto.plugins[i]||[];proto.plugins[i].push([option,set[i]]);}},call:function(instance,name,args){var set=instance.plugins[name];if(!set||!instance.element[0].parentNode){return;}
+for(var i=0;i0){return true;}
+el[scroll]=1;has=(el[scroll]>0);el[scroll]=0;return has;},isOverAxis:function(x,reference,size){return(x>reference)&&(x<(reference+size));},isOver:function(y,x,top,left,height,width){return $.ui.isOverAxis(y,top,height)&&$.ui.isOverAxis(x,left,width);},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,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}};if(isFF2){var attr=$.attr,removeAttr=$.fn.removeAttr,ariaNS="http://www.w3.org/2005/07/aaa",ariaState=/^aria-/,ariaRole=/^wairole:/;$.attr=function(elem,name,value){var set=value!==undefined;return(name=='role'?(set?attr.call(this,elem,name,"wairole:"+value):(attr.apply(this,arguments)||"").replace(ariaRole,"")):(ariaState.test(name)?(set?elem.setAttributeNS(ariaNS,name.replace(ariaState,"aaa:"),value):attr.call(this,elem,name.replace(ariaState,"aaa:"))):attr.apply(this,arguments)));};$.fn.removeAttr=function(name){return(ariaState.test(name)?this.each(function(){this.removeAttributeNS(ariaNS,name.replace(ariaState,""));}):removeAttr.call(this,name));};}
+$.fn.extend({remove:function(){$("*",this).add(this).each(function(){$(this).triggerHandler("remove");});return _remove.apply(this,arguments);},enableSelection:function(){return this.attr('unselectable','off').css('MozUserSelect','').unbind('selectstart.ui');},disableSelection:function(){return this.attr('unselectable','on').css('MozUserSelect','none').bind('selectstart.ui',function(){return false;});},scrollParent:function(){var scrollParent;if(($.browser.msie&&(/(static|relative)/).test(this.css('position')))||(/absolute/).test(this.css('position'))){scrollParent=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test($.curCSS(this,'position',1))&&(/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));}).eq(0);}else{scrollParent=this.parents().filter(function(){return(/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));}).eq(0);}
+return(/fixed/).test(this.css('position'))||!scrollParent.length?$(document):scrollParent;}});$.extend($.expr[':'],{data:function(elem,i,match){return!!$.data(elem,match[3]);},focusable:function(element){var nodeName=element.nodeName.toLowerCase(),tabIndex=$.attr(element,'tabindex');return(/input|select|textarea|button|object/.test(nodeName)?!element.disabled:'a'==nodeName||'area'==nodeName?element.href||!isNaN(tabIndex):!isNaN(tabIndex))&&!$(element)['area'==nodeName?'parents':'closest'](':hidden').length;},tabbable:function(element){var tabIndex=$.attr(element,'tabindex');return(isNaN(tabIndex)||tabIndex>=0)&&$(element).is(':focusable');}});function getter(namespace,plugin,method,args){function getMethods(type){var methods=$[namespace][plugin][type]||[];return(typeof methods=='string'?methods.split(/,?\s+/):methods);}
+var methods=getMethods('getter');if(args.length==1&&typeof args[0]=='string'){methods=methods.concat(getMethods('getterSetter'));}
+return($.inArray(method,methods)!=-1);}
+$.widget=function(name,prototype){var namespace=name.split(".")[0];name=name.split(".")[1];$.fn[name]=function(options){var isMethodCall=(typeof options=='string'),args=Array.prototype.slice.call(arguments,1);if(isMethodCall&&options.substring(0,1)=='_'){return this;}
+if(isMethodCall&&getter(namespace,name,options,args)){var instance=$.data(this[0],name);return(instance?instance[options].apply(instance,args):undefined);}
+return this.each(function(){var instance=$.data(this,name);(!instance&&!isMethodCall&&$.data(this,name,new $[namespace][name](this,options))._init());(instance&&isMethodCall&&$.isFunction(instance[options])&&instance[options].apply(instance,args));});};$[namespace]=$[namespace]||{};$[namespace][name]=function(element,options){var self=this;this.namespace=namespace;this.widgetName=name;this.widgetEventPrefix=$[namespace][name].eventPrefix||name;this.widgetBaseClass=namespace+'-'+name;this.options=$.extend({},$.widget.defaults,$[namespace][name].defaults,$.metadata&&$.metadata.get(element)[name],options);this.element=$(element).bind('setData.'+name,function(event,key,value){if(event.target==element){return self._setData(key,value);}}).bind('getData.'+name,function(event,key){if(event.target==element){return self._getData(key);}}).bind('remove',function(){return self.destroy();});};$[namespace][name].prototype=$.extend({},$.widget.prototype,prototype);$[namespace][name].getterSetter='option';};$.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+'-disabled'+' '+this.namespace+'-state-disabled').removeAttr('aria-disabled');},option:function(key,value){var options=key,self=this;if(typeof key=="string"){if(value===undefined){return this._getData(key);}
+options={};options[key]=value;}
+$.each(options,function(key,value){self._setData(key,value);});},_getData:function(key){return this.options[key];},_setData:function(key,value){this.options[key]=value;if(key=='disabled'){this.element
+[value?'addClass':'removeClass'](this.widgetBaseClass+'-disabled'+' '+
+this.namespace+'-state-disabled').attr("aria-disabled",value);}},enable:function(){this._setData('disabled',false);},disable:function(){this._setData('disabled',true);},_trigger:function(type,event,data){var callback=this.options[type],eventName=(type==this.widgetEventPrefix?type:this.widgetEventPrefix+type);event=$.Event(event);event.type=eventName;if(event.originalEvent){for(var i=$.event.props.length,prop;i;){prop=$.event.props[--i];event[prop]=event.originalEvent[prop];}}
+this.element.trigger(event,data);return!($.isFunction(callback)&&callback.call(this.element[0],event,data)===false||event.isDefaultPrevented());}};$.widget.defaults={disabled:false};$.ui.mouse={_mouseInit:function(){var self=this;this.element.bind('mousedown.'+this.widgetName,function(event){return self._mouseDown(event);}).bind('click.'+this.widgetName,function(event){if(self._preventClickEvent){self._preventClickEvent=false;event.stopImmediatePropagation();return false;}});if($.browser.msie){this._mouseUnselectable=this.element.attr('unselectable');this.element.attr('unselectable','on');}
+this.started=false;},_mouseDestroy:function(){this.element.unbind('.'+this.widgetName);($.browser.msie&&this.element.attr('unselectable',this._mouseUnselectable));},_mouseDown:function(event){event.originalEvent=event.originalEvent||{};if(event.originalEvent.mouseHandled){return;}
+(this._mouseStarted&&this._mouseUp(event));this._mouseDownEvent=event;var self=this,btnIsLeft=(event.which==1),elIsCancel=(typeof this.options.cancel=="string"?$(event.target).parents().add(event.target).filter(this.options.cancel).length:false);if(!btnIsLeft||elIsCancel||!this._mouseCapture(event)){return true;}
+this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){self.mouseDelayMet=true;},this.options.delay);}
+if(this._mouseDistanceMet(event)&&this._mouseDelayMet(event)){this._mouseStarted=(this._mouseStart(event)!==false);if(!this._mouseStarted){event.preventDefault();return true;}}
+this._mouseMoveDelegate=function(event){return self._mouseMove(event);};this._mouseUpDelegate=function(event){return self._mouseUp(event);};$(document).bind('mousemove.'+this.widgetName,this._mouseMoveDelegate).bind('mouseup.'+this.widgetName,this._mouseUpDelegate);($.browser.safari||event.preventDefault());event.originalEvent.mouseHandled=true;return true;},_mouseMove:function(event){if($.browser.msie&&!(document.documentMode>=9)&&!event.button){return this._mouseUp(event);}
+if(this._mouseStarted){this._mouseDrag(event);return event.preventDefault();}
+if(this._mouseDistanceMet(event)&&this._mouseDelayMet(event)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,event)!==false);(this._mouseStarted?this._mouseDrag(event):this._mouseUp(event));}
+return!this._mouseStarted;},_mouseUp:function(event){$(document).unbind('mousemove.'+this.widgetName,this._mouseMoveDelegate).unbind('mouseup.'+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(event.target==this._mouseDownEvent.target);this._mouseStop(event);}
+return false;},_mouseDistanceMet:function(event){return(Math.max(Math.abs(this._mouseDownEvent.pageX-event.pageX),Math.abs(this._mouseDownEvent.pageY-event.pageY))>=this.options.distance);},_mouseDelayMet:function(event){return this.mouseDelayMet;},_mouseStart:function(event){},_mouseDrag:function(event){},_mouseStop:function(event){},_mouseCapture:function(event){return true;}};$.ui.mouse.defaults={cancel:null,distance:1,delay:0};})(jQuery);(function($){$.widget("ui.draggable",$.extend({},$.ui.mouse,{_init: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'))return;this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable"
++" ui-draggable-dragging"
++" ui-draggable-disabled");this._mouseDestroy();},_mouseCapture:function(event){var o=this.options;if(this.helper||o.disabled||$(event.target).is('.ui-resizable-handle'))
+return false;this.handle=this._getHandle(event);if(!this.handle)
+return false;return true;},_mouseStart:function(event){var o=this.options;this.helper=this._createHelper(event);this._cacheHelperProportions();if($.ui.ddmanager)
+$.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};$.extend(this.offset,{click:{left:event.pageX-this.offset.left,top:event.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(event);this.originalPageX=event.pageX;this.originalPageY=event.pageY;if(o.cursorAt)
+this._adjustOffsetFromHelper(o.cursorAt);if(o.containment)
+this._setContainment();this._trigger("start",event);this._cacheHelperProportions();if($.ui.ddmanager&&!o.dropBehaviour)
+$.ui.ddmanager.prepareOffsets(this,event);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(event,true);return true;},_mouseDrag:function(event,noPropagation){this.position=this._generatePosition(event);this.positionAbs=this._convertPositionTo("absolute");if(!noPropagation){var ui=this._uiHash();this._trigger('drag',event,ui);this.position=ui.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';if($.ui.ddmanager)$.ui.ddmanager.drag(this,event);return false;},_mouseStop:function(event){var dropped=false;if($.ui.ddmanager&&!this.options.dropBehaviour)
+dropped=$.ui.ddmanager.drop(this,event);if(this.dropped){dropped=this.dropped;this.dropped=false;}
+if((this.options.revert=="invalid"&&!dropped)||(this.options.revert=="valid"&&dropped)||this.options.revert===true||($.isFunction(this.options.revert)&&this.options.revert.call(this.element,dropped))){var self=this;$(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){self._trigger("stop",event);self._clear();});}else{this._trigger("stop",event);this._clear();}
+return false;},_getHandle:function(event){var handle=!this.options.handle||!$(this.options.handle,this.element).length?true:false;$(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==event.target)handle=true;});return handle;},_createHelper:function(event){var o=this.options;var helper=$.isFunction(o.helper)?$(o.helper.apply(this.element[0],[event])):(o.helper=='clone'?this.element.clone():this.element);if(!helper.parents('body').length)
+helper.appendTo((o.appendTo=='parent'?this.element[0].parentNode:o.appendTo));if(helper[0]!=this.element[0]&&!(/(fixed|absolute)/).test(helper.css("position")))
+helper.css("position","absolute");return helper;},_adjustOffsetFromHelper:function(obj){if(obj.left!=undefined)this.offset.click.left=obj.left+this.margins.left;if(obj.right!=undefined)this.offset.click.left=this.helperProportions.width-obj.right+this.margins.left;if(obj.top!=undefined)this.offset.click.top=obj.top+this.margins.top;if(obj.bottom!=undefined)this.offset.click.top=this.helperProportions.height-obj.bottom+this.margins.top;},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var po=this.offsetParent.offset();if(this.cssPosition=='absolute'&&this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0])){po.left+=this.scrollParent.scrollLeft();po.top+=this.scrollParent.scrollTop();}
+if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=='html'&&$.browser.msie))
+po={top:0,left:0};return{top:po.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:po.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)};},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var p=this.element.position();return{top:p.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:p.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()};}else{return{top:0,left:0};}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)};},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()};},_setContainment:function(){var o=this.options;if(o.containment=='parent')o.containment=this.helper[0].parentNode;if(o.containment=='document'||o.containment=='window')this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,$(o.containment=='document'?document:window).width()-this.helperProportions.width-this.margins.left,($(o.containment=='document'?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!(/^(document|window|parent)$/).test(o.containment)&&o.containment.constructor!=Array){var ce=$(o.containment)[0];if(!ce)return;var co=$(o.containment).offset();var over=($(ce).css("overflow")!='hidden');this.containment=[co.left+(parseInt($(ce).css("borderLeftWidth"),10)||0)+(parseInt($(ce).css("paddingLeft"),10)||0)-this.margins.left,co.top+(parseInt($(ce).css("borderTopWidth"),10)||0)+(parseInt($(ce).css("paddingTop"),10)||0)-this.margins.top,co.left+(over?Math.max(ce.scrollWidth,ce.offsetWidth):ce.offsetWidth)-(parseInt($(ce).css("borderLeftWidth"),10)||0)-(parseInt($(ce).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,co.top+(over?Math.max(ce.scrollHeight,ce.offsetHeight):ce.offsetHeight)-(parseInt($(ce).css("borderTopWidth"),10)||0)-(parseInt($(ce).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top];}else if(o.containment.constructor==Array){this.containment=o.containment;}},_convertPositionTo:function(d,pos){if(!pos)pos=this.position;var mod=d=="absolute"?1:-1;var o=this.options,scroll=this.cssPosition=='absolute'&&!(this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,scrollIsRootNode=(/(html|body)/i).test(scroll[0].tagName);return{top:(pos.top
++this.offset.relative.top*mod
++this.offset.parent.top*mod
+-($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollTop():(scrollIsRootNode?0:scroll.scrollTop()))*mod)),left:(pos.left
++this.offset.relative.left*mod
++this.offset.parent.left*mod
+-($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollLeft():scrollIsRootNode?0:scroll.scrollLeft())*mod))};},_generatePosition:function(event){var o=this.options,scroll=this.cssPosition=='absolute'&&!(this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,scrollIsRootNode=(/(html|body)/i).test(scroll[0].tagName);if(this.cssPosition=='relative'&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset();}
+var pageX=event.pageX;var pageY=event.pageY;if(this.originalPosition){if(this.containment){if(event.pageX-this.offset.click.leftthis.containment[2])pageX=this.containment[2]+this.offset.click.left;if(event.pageY-this.offset.click.top>this.containment[3])pageY=this.containment[3]+this.offset.click.top;}
+if(o.grid){var top=this.originalPageY+Math.round((pageY-this.originalPageY)/o.grid[1])*o.grid[1];pageY=this.containment?(!(top-this.offset.click.topthis.containment[3])?top:(!(top-this.offset.click.topthis.containment[2])?left:(!(left-this.offset.click.left').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css($(this).offset()).appendTo("body");});},stop:function(event,ui){$("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this);});}});$.ui.plugin.add("draggable","opacity",{start:function(event,ui){var t=$(ui.helper),o=$(this).data('draggable').options;if(t.css("opacity"))o._opacity=t.css("opacity");t.css('opacity',o.opacity);},stop:function(event,ui){var o=$(this).data('draggable').options;if(o._opacity)$(ui.helper).css('opacity',o._opacity);}});$.ui.plugin.add("draggable","scroll",{start:function(event,ui){var i=$(this).data("draggable");if(i.scrollParent[0]!=document&&i.scrollParent[0].tagName!='HTML')i.overflowOffset=i.scrollParent.offset();},drag:function(event,ui){var i=$(this).data("draggable"),o=i.options,scrolled=false;if(i.scrollParent[0]!=document&&i.scrollParent[0].tagName!='HTML'){if(!o.axis||o.axis!='x'){if((i.overflowOffset.top+i.scrollParent[0].offsetHeight)-event.pageY=0;i--){var l=inst.snapElements[i].left,r=l+inst.snapElements[i].width,t=inst.snapElements[i].top,b=t+inst.snapElements[i].height;if(!((l-d=t&&y1<=b)||(y2>=t&&y2<=b)||(y1b))&&((x1>=l&&x1<=r)||(x2>=l&&x2<=r)||(x1r));break;default:return false;break;}};$.ui.ddmanager={current:null,droppables:{'default':[]},prepareOffsets:function(t,event){var m=$.ui.ddmanager.droppables[t.options.scope];var type=event?event.type:null;var list=(t.currentItem||t.element).find(":data(droppable)").andSelf();droppablesLoop:for(var i=0;i').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=o.handles||(!$('.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 n=this.handles.split(",");this.handles={};for(var i=0;i');if(/sw|se|ne|nw/.test(handle))axis.css({zIndex:++o.zIndex});if('se'==handle){axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');};this.handles[handle]='.ui-resizable-'+handle;this.element.append(axis);}}
+this._renderAxis=function(target){target=target||this.element;for(var i in this.handles){if(this.handles[i].constructor==String)
+this.handles[i]=$(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var axis=$(this.handles[i],this.element),padWrapper=0;padWrapper=/sw|ne|nw|se|n|s/.test(i)?axis.outerHeight():axis.outerWidth();var padPos=['padding',/ne|nw|n/.test(i)?'Top':/se|sw|s/.test(i)?'Bottom':/^e$/.test(i)?'Right':'Left'].join("");target.css(padPos,padWrapper);this._proportionallyResize();}
+if(!$(this.handles[i]).length)
+continue;}};this._renderAxis(this.element);this._handles=$('.ui-resizable-handle',this.element).disableSelection();this._handles.mouseover(function(){if(!self.resizing){if(this.className)
+var axis=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);self.axis=axis&&axis[1]?axis[1]:'se';}});if(o.autoHide){this._handles.hide();$(this.element).addClass("ui-resizable-autohide").hover(function(){$(this).removeClass("ui-resizable-autohide");self._handles.show();},function(){if(!self.resizing){$(this).addClass("ui-resizable-autohide");self._handles.hide();}});}
+this._mouseInit();},destroy:function(){this._mouseDestroy();var _destroy=function(exp){$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();};if(this.elementIsWrapper){_destroy(this.element);var wrapper=this.element;wrapper.parent().append(this.originalElement.css({position:wrapper.css('position'),width:wrapper.outerWidth(),height:wrapper.outerHeight(),top:wrapper.css('top'),left:wrapper.css('left')})).end().remove();}
+this.originalElement.css('resize',this.originalResizeStyle);_destroy(this.originalElement);},_mouseCapture:function(event){var handle=false;for(var i in this.handles){if($(this.handles[i])[0]==event.target)handle=true;}
+return this.options.disabled||!!handle;},_mouseStart:function(event){var o=this.options,iniPos=this.element.position(),el=this.element;this.resizing=true;this.documentScroll={top:$(document).scrollTop(),left:$(document).scrollLeft()};if(el.is('.ui-draggable')||(/absolute/).test(el.css('position'))){el.css({position:'absolute',top:iniPos.top,left:iniPos.left});}
+if($.browser.opera&&(/relative/).test(el.css('position')))
+el.css({position:'relative',top:'auto',left:'auto'});this._renderProxy();var curleft=num(this.helper.css('left')),curtop=num(this.helper.css('top'));if(o.containment){curleft+=$(o.containment).scrollLeft()||0;curtop+=$(o.containment).scrollTop()||0;}
+this.offset=this.helper.offset();this.position={left:curleft,top:curtop};this.size=this._helper?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalSize=this._helper?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalPosition={left:curleft,top:curtop};this.sizeDiff={width:el.outerWidth()-el.width(),height:el.outerHeight()-el.height()};this.originalMousePosition={left:event.pageX,top:event.pageY};this.aspectRatio=(typeof o.aspectRatio=='number')?o.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var cursor=$('.ui-resizable-'+this.axis).css('cursor');$('body').css('cursor',cursor=='auto'?this.axis+'-resize':cursor);el.addClass("ui-resizable-resizing");this._propagate("start",event);return true;},_mouseDrag:function(event){var el=this.helper,o=this.options,props={},self=this,smp=this.originalMousePosition,a=this.axis;var dx=(event.pageX-smp.left)||0,dy=(event.pageY-smp.top)||0;var trigger=this._change[a];if(!trigger)return false;var data=trigger.apply(this,[event,dx,dy]),ie6=$.browser.msie&&$.browser.version<7,csdif=this.sizeDiff;if(this._aspectRatio||event.shiftKey)
+data=this._updateRatio(data,event);data=this._respectSize(data,event);this._propagate("resize",event);el.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length)
+this._proportionallyResize();this._updateCache(data);this._trigger('resize',event,this.ui());return false;},_mouseStop:function(event){this.resizing=false;var o=this.options,self=this;if(this._helper){var pr=this._proportionallyResizeElements,ista=pr.length&&(/textarea/i).test(pr[0].nodeName),soffseth=ista&&$.ui.hasScroll(pr[0],'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var s={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;if(!o.animate)
+this.element.css($.extend(s,{top:top,left:left}));self.helper.height(self.size.height);self.helper.width(self.size.width);if(this._helper&&!o.animate)this._proportionallyResize();}
+$('body').css('cursor','auto');this.element.removeClass("ui-resizable-resizing");this._propagate("stop",event);if(this._helper)this.helper.remove();return false;},_updateCache:function(data){var o=this.options;this.offset=this.helper.offset();if(isNumber(data.left))this.position.left=data.left;if(isNumber(data.top))this.position.top=data.top;if(isNumber(data.height))this.size.height=data.height;if(isNumber(data.width))this.size.width=data.width;},_updateRatio:function(data,event){var o=this.options,cpos=this.position,csize=this.size,a=this.axis;if(data.height)data.width=(csize.height*this.aspectRatio);else if(data.width)data.height=(csize.width/this.aspectRatio);if(a=='sw'){data.left=cpos.left+(csize.width-data.width);data.top=null;}
+if(a=='nw'){data.top=cpos.top+(csize.height-data.height);data.left=cpos.left+(csize.width-data.width);}
+return data;},_respectSize:function(data,event){var el=this.helper,o=this.options,pRatio=this._aspectRatio||event.shiftKey,a=this.axis,ismaxw=isNumber(data.width)&&o.maxWidth&&(o.maxWidthdata.width),isminh=isNumber(data.height)&&o.minHeight&&(o.minHeight>data.height);if(isminw)data.width=o.minWidth;if(isminh)data.height=o.minHeight;if(ismaxw)data.width=o.maxWidth;if(ismaxh)data.height=o.maxHeight;var dw=this.originalPosition.left+this.originalSize.width,dh=this.position.top+this.size.height;var cw=/sw|nw|w/.test(a),ch=/nw|ne|n/.test(a);if(isminw&&cw)data.left=dw-o.minWidth;if(ismaxw&&cw)data.left=dw-o.maxWidth;if(isminh&&ch)data.top=dh-o.minHeight;if(ismaxh&&ch)data.top=dh-o.maxHeight;var isNotwh=!data.width&&!data.height;if(isNotwh&&!data.left&&data.top)data.top=null;else if(isNotwh&&!data.top&&data.left)data.left=null;return data;},_proportionallyResize:function(){var o=this.options;if(!this._proportionallyResizeElements.length)return;var element=this.helper||this.element;for(var i=0;i');var ie6=$.browser.msie&&$.browser.version<7,ie6offset=(ie6?1:0),pxyoffset=(ie6?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+pxyoffset,height:this.element.outerHeight()+pxyoffset,position:'absolute',left:this.elementOffset.left-ie6offset+'px',top:this.elementOffset.top-ie6offset+'px',zIndex:++o.zIndex});this.helper.appendTo("body").disableSelection();}else{this.helper=this.element;}},_change:{e:function(event,dx,dy){return{width:this.originalSize.width+dx};},w:function(event,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{left:sp.left+dx,width:cs.width-dx};},n:function(event,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{top:sp.top+dy,height:cs.height-dy};},s:function(event,dx,dy){return{height:this.originalSize.height+dy};},se:function(event,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[event,dx,dy]));},sw:function(event,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[event,dx,dy]));},ne:function(event,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[event,dx,dy]));},nw:function(event,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[event,dx,dy]));}},_propagate:function(n,event){$.ui.plugin.call(this,n,[event,this.ui()]);(n!="resize"&&this._trigger(n,event,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};}}));$.extend($.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});$.ui.plugin.add("resizable","alsoResize",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options;_store=function(exp){$(exp).each(function(){$(this).data("resizable-alsoresize",{width:parseInt($(this).width(),10),height:parseInt($(this).height(),10),left:parseInt($(this).css('left'),10),top:parseInt($(this).css('top'),10)});});};if(typeof(o.alsoResize)=='object'&&!o.alsoResize.parentNode){if(o.alsoResize.length){o.alsoResize=o.alsoResize[0];_store(o.alsoResize);}
+else{$.each(o.alsoResize,function(exp,c){_store(exp);});}}else{_store(o.alsoResize);}},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,os=self.originalSize,op=self.originalPosition;var delta={height:(self.size.height-os.height)||0,width:(self.size.width-os.width)||0,top:(self.position.top-op.top)||0,left:(self.position.left-op.left)||0},_alsoResize=function(exp,c){$(exp).each(function(){var el=$(this),start=$(this).data("resizable-alsoresize"),style={},css=c&&c.length?c:['width','height','top','left'];$.each(css||['width','height','top','left'],function(i,prop){var sum=(start[prop]||0)+(delta[prop]||0);if(sum&&sum>=0)
+style[prop]=sum||null;});if(/relative/.test(el.css('position'))&&$.browser.opera){self._revertToRelativePosition=true;el.css({position:'absolute',top:'auto',left:'auto'});}
+el.css(style);});};if(typeof(o.alsoResize)=='object'&&!o.alsoResize.nodeType){$.each(o.alsoResize,function(exp,c){_alsoResize(exp,c);});}else{_alsoResize(o.alsoResize);}},stop:function(event,ui){var self=$(this).data("resizable");if(self._revertToRelativePosition&&$.browser.opera){self._revertToRelativePosition=false;el.css({position:'relative'});}
+$(this).removeData("resizable-alsoresize-start");}});$.ui.plugin.add("resizable","animate",{stop:function(event,ui){var self=$(this).data("resizable"),o=self.options;var pr=self._proportionallyResizeElements,ista=pr.length&&(/textarea/i).test(pr[0].nodeName),soffseth=ista&&$.ui.hasScroll(pr[0],'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var style={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;self.element.animate($.extend(style,top&&left?{top:top,left:left}:{}),{duration:o.animateDuration,easing:o.animateEasing,step:function(){var data={width:parseInt(self.element.css('width'),10),height:parseInt(self.element.css('height'),10),top:parseInt(self.element.css('top'),10),left:parseInt(self.element.css('left'),10)};if(pr&&pr.length)$(pr[0]).css({width:data.width,height:data.height});self._updateCache(data);self._propagate("resize",event);}});}});$.ui.plugin.add("resizable","containment",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options,el=self.element;var oc=o.containment,ce=(oc instanceof $)?oc.get(0):(/parent/.test(oc))?el.parent().get(0):oc;if(!ce)return;self.containerElement=$(ce);if(/document/.test(oc)||oc==document){self.containerOffset={left:0,top:0};self.containerPosition={left:0,top:0};self.parentData={element:$(document),left:0,top:0,width:$(document).width(),height:$(document).height()||document.body.parentNode.scrollHeight};}
+else{var element=$(ce),p=[];$(["Top","Right","Left","Bottom"]).each(function(i,name){p[i]=num(element.css("padding"+name));});self.containerOffset=element.offset();self.containerPosition=element.position();self.containerSize={height:(element.innerHeight()-p[3]),width:(element.innerWidth()-p[1])};var co=self.containerOffset,ch=self.containerSize.height,cw=self.containerSize.width,width=($.ui.hasScroll(ce,"left")?ce.scrollWidth:cw),height=($.ui.hasScroll(ce)?ce.scrollHeight:ch);self.parentData={element:ce,left:co.left,top:co.top,width:width,height:height};}},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,ps=self.containerSize,co=self.containerOffset,cs=self.size,cp=self.position,pRatio=self._aspectRatio||event.shiftKey,cop={top:0,left:0},ce=self.containerElement;if(ce[0]!=document&&(/static/).test(ce.css('position')))cop=co;if(cp.left<(self._helper?co.left:0)){self.size.width=self.size.width+(self._helper?(self.position.left-co.left):(self.position.left-cop.left));if(pRatio)self.size.height=self.size.width/o.aspectRatio;self.position.left=o.helper?co.left:0;}
+if(cp.top<(self._helper?co.top:0)){self.size.height=self.size.height+(self._helper?(self.position.top-co.top):self.position.top);if(pRatio)self.size.width=self.size.height*o.aspectRatio;self.position.top=self._helper?co.top:0;}
+self.offset.left=self.parentData.left+self.position.left;self.offset.top=self.parentData.top+self.position.top;var woset=Math.abs((self._helper?self.offset.left-cop.left:(self.offset.left-cop.left))+self.sizeDiff.width),hoset=Math.abs((self._helper?self.offset.top-cop.top:(self.offset.top-co.top))+self.sizeDiff.height);var isParent=self.containerElement.get(0)==self.element.parent().get(0),isOffsetRelative=/relative|absolute/.test(self.containerElement.css('position'));if(isParent&&isOffsetRelative)woset-=self.parentData.left;if(woset+self.size.width>=self.parentData.width){self.size.width=self.parentData.width-woset;if(pRatio)self.size.height=self.size.width/self.aspectRatio;}
+if(hoset+self.size.height>=self.parentData.height){self.size.height=self.parentData.height-hoset;if(pRatio)self.size.width=self.size.height*self.aspectRatio;}},stop:function(event,ui){var self=$(this).data("resizable"),o=self.options,cp=self.position,co=self.containerOffset,cop=self.containerPosition,ce=self.containerElement;var helper=$(self.helper),ho=helper.offset(),w=helper.outerWidth()-self.sizeDiff.width,h=helper.outerHeight()-self.sizeDiff.height;if(self._helper&&!o.animate&&(/relative/).test(ce.css('position')))
+$(this).css({left:ho.left-cop.left-co.left,width:w,height:h});if(self._helper&&!o.animate&&(/static/).test(ce.css('position')))
+$(this).css({left:ho.left-cop.left-co.left,width:w,height:h});}});$.ui.plugin.add("resizable","ghost",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options,cs=self.size;self.ghost=self.originalElement.clone();self.ghost.css({opacity:.25,display:'block',position:'relative',height:cs.height,width:cs.width,margin:0,left:0,top:0}).addClass('ui-resizable-ghost').addClass(typeof o.ghost=='string'?o.ghost:'');self.ghost.appendTo(self.helper);},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options;if(self.ghost)self.ghost.css({position:'relative',height:self.size.height,width:self.size.width});},stop:function(event,ui){var self=$(this).data("resizable"),o=self.options;if(self.ghost&&self.helper)self.helper.get(0).removeChild(self.ghost.get(0));}});$.ui.plugin.add("resizable","grid",{resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,cs=self.size,os=self.originalSize,op=self.originalPosition,a=self.axis,ratio=o._aspectRatio||event.shiftKey;o.grid=typeof o.grid=="number"?[o.grid,o.grid]:o.grid;var ox=Math.round((cs.width-os.width)/(o.grid[0]||1))*(o.grid[0]||1),oy=Math.round((cs.height-os.height)/(o.grid[1]||1))*(o.grid[1]||1);if(/^(se|s|e)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;}
+else if(/^(ne)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;}
+else if(/^(sw)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.left=op.left-ox;}
+else{self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;self.position.left=op.left-ox;}}});var num=function(v){return parseInt(v,10)||0;};var isNumber=function(value){return!isNaN(parseInt(value,10));};})(jQuery);(function($){$.widget("ui.selectable",$.extend({},$.ui.mouse,{_init:function(){var self=this;this.element.addClass("ui-selectable");this.dragged=false;var selectees;this.refresh=function(){selectees=$(self.options.filter,self.element[0]);selectees.each(function(){var $this=$(this);var pos=$this.offset();$.data(this,"selectable-item",{element:this,$element:$this,left:pos.left,top:pos.top,right:pos.left+$this.outerWidth(),bottom:pos.top+$this.outerHeight(),startselected:false,selected:$this.hasClass('ui-selected'),selecting:$this.hasClass('ui-selecting'),unselecting:$this.hasClass('ui-unselecting')});});};this.refresh();this.selectees=selectees.addClass("ui-selectee");this._mouseInit();this.helper=$(document.createElement('div')).css({border:'1px dotted black'}).addClass("ui-selectable-helper");this.element.bind("mousedown.selectable",function(event){if(event.pageX>self.element[0].scrollWidth+self.element.offset().left){return;}
+var selectee=self._targetIsSelectable(event.target);if(!selectee){return;}
+var test=$(".ui-selected").length;if(!event.ctrlKey&&$(".ui-selected").length>1&&$(selectee).hasClass("ui-selected")){return(self._listenForMouseUp=1);}
+if(!event.ctrlKey){$(".ui-selected").each(function(){self._removeSelection(this,event);});}
+self._toggleSelection(selectee,event);event.preventDefault();}).bind("mouseup.selectable",function(event){if(self._listenForMouseUp){self._listenForMouseUp=0;var selectee=self._targetIsSelectable(event.target);if(!selectee){return;}
+self._addSelection(selectee,event);event.preventDefault();}})},_addSelection:function(selectee,event){$(selectee).addClass("ui-selecting");this._trigger("selecting",event,{selecting:selectee});$(selectee).removeClass('ui-selecting').addClass('ui-selected');this._trigger("selected",event,{selected:selectee});},_removeSelection:function(selected,event){$(selected).removeClass('ui-selected').addClass('ui-unselecting');this._trigger("unselecting",event,{unselecting:selected});$(selected).removeClass('ui-unselecting');this._trigger("unselected",event,{unselected:selected});},_toggleSelection:function(selectee,event){if($(selectee).hasClass("ui-selected")){this._removeSelection(selectee,event);}else{this._addSelection(selectee,event);}},_targetIsSelectable:function(target){var found=$(target).parents().andSelf().filter(".ui-selectee");return found.length&&found;},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();},_mouseStart:function(event){var self=this;if(event.pageX>this.element[0].scrollWidth+this.element.offset().left){this.opos=null;return;}
+this.opos=[event.pageX,event.pageY];if(this.options.disabled)
+return;var options=this.options,appendTo=$(options.appendTo),parentOffset=appendTo.css('position')=='static'?appendTo.offsetParent().offset():appendTo.offset();this.selectees=$(options.filter,this.element[0]);this._trigger("start",event);appendTo.append(this.helper);this.helper.css({"z-index":100,"position":"absolute","left":event.clientX-parentOffset.left,"top":event.clientY-parentOffset.top,"width":0,"height":0});if(options.autoRefresh){this.refresh();}
+this.selectees.filter('.ui-selected').each(function(){var selectee=$.data(this,"selectable-item");selectee.startselected=true;if(!event.metaKey){selectee.$element.removeClass('ui-selected');selectee.selected=false;selectee.$element.addClass('ui-unselecting');selectee.unselecting=true;self._trigger("unselecting",event,{unselecting:selectee.element});}});$(event.target).parents().andSelf().each(function(){var selectee=$.data(this,"selectable-item");if(selectee){selectee.$element.removeClass("ui-unselecting").addClass('ui-selecting');selectee.unselecting=false;selectee.selecting=true;selectee.selected=true;self._trigger("selecting",event,{selecting:selectee.element});return false;}});},_mouseDrag:function(event){var self=this;if(!this.opos){return;}
+this.dragged=true;if(this.options.disabled)
+return;var options=this.options;var x1=this.opos[0],y1=this.opos[1],x2=event.pageX,y2=event.pageY,appendTo=$(options.appendTo),parentOffset=appendTo.css('position')=='static'?appendTo.offsetParent().offset():appendTo.offset();if(x1>x2){var tmp=x2;x2=x1;x1=tmp;}
+if(y1>y2){var tmp=y2;y2=y1;y1=tmp;}
+this.helper.css({left:x1-parentOffset.left,top:y1-parentOffset.top,width:x2-x1,height:y2-y1});this.selectees.each(function(){var selectee=$.data(this,"selectable-item");if(!selectee||selectee.element==self.element[0])
+return;var hit=false;if(options.tolerance=='touch'){hit=(!(selectee.left>x2||selectee.righty2||selectee.bottomx1&&selectee.righty1&&selectee.bottom=0;i--)
+this.items[i].item.removeData("sortable-item");},_mouseCapture:function(event,overrideHandle){if(this.reverting){return false;}
+if(this.options.disabled||this.options.type=='static')return false;this._refreshItems(event);var currentItem=null,self=this,nodes=$(event.target).parents().each(function(){if($.data(this,'sortable-item')==self){currentItem=$(this);return false;}});if($.data(event.target,'sortable-item')==self)currentItem=$(event.target);if(!currentItem)return false;if(this.options.handle&&!overrideHandle){var validHandle=false;$(this.options.handle,currentItem).find("*").andSelf().each(function(){if(this==event.target)validHandle=true;});if(!validHandle)return false;}
+this.currentItem=currentItem;this._removeCurrentsFromItems();return true;},_mouseStart:function(event,overrideHandle,noActivation){var o=this.options,self=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(event);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");$.extend(this.offset,{click:{left:event.pageX-this.offset.left,top:event.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(event);this.originalPageX=event.pageX;this.originalPageY=event.pageY;if(o.cursorAt)
+this._adjustOffsetFromHelper(o.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide();}
+this._createPlaceholder();if(o.containment)
+this._setContainment();if(o.cursor){if($('body').css("cursor"))this._storedCursor=$('body').css("cursor");$('body').css("cursor",o.cursor);}
+if(o.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",o.opacity);}
+if(o.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",o.zIndex);}
+if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!='HTML')
+this.overflowOffset=this.scrollParent.offset();this._trigger("start",event,this._uiHash());if(!this._preserveHelperProportions)
+this._cacheHelperProportions();if(!noActivation){for(var i=this.containers.length-1;i>=0;i--){this.containers[i]._trigger("activate",event,self._uiHash(this));}}
+if($.ui.ddmanager)
+$.ui.ddmanager.current=this;if($.ui.ddmanager&&!o.dropBehaviour)
+$.ui.ddmanager.prepareOffsets(this,event);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(event);return true;},_mouseDrag:function(event){this.position=this._generatePosition(event);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs;}
+if(this.options.scroll){var o=this.options,scrolled=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!='HTML'){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-event.pageY=0;i--){var item=this.items[i],itemElement=item.item[0],intersection=this._intersectsWithPointer(item);if(!intersection)continue;if(itemElement!=this.currentItem[0]&&this.placeholder[intersection==1?"next":"prev"]()[0]!=itemElement&&!$.ui.contains(this.placeholder[0],itemElement)&&(this.options.type=='semi-dynamic'?!$.ui.contains(this.element[0],itemElement):true)){this.direction=intersection==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(item)){this._rearrange(event,item);}else{break;}
+this._trigger("change",event,this._uiHash());break;}}
+this._contactContainers(event);if($.ui.ddmanager)$.ui.ddmanager.drag(this,event);this._trigger('sort',event,this._uiHash());this.lastPositionAbs=this.positionAbs;return false;},_mouseStop:function(event,noPropagation){if(!event)return;if($.ui.ddmanager&&!this.options.dropBehaviour)
+$.ui.ddmanager.drop(this,event);if(this.options.revert){var self=this;var cur=self.placeholder.offset();self.reverting=true;$(this.helper).animate({left:cur.left-this.offset.parent.left-self.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:cur.top-this.offset.parent.top-self.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){self._clear(event);});}else{this._clear(event,noPropagation);}
+return false;},cancel:function(){var self=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original")
+this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");else
+this.currentItem.show();for(var i=this.containers.length-1;i>=0;i--){this.containers[i]._trigger("deactivate",null,self._uiHash(this));if(this.containers[i].containerCache.over){this.containers[i]._trigger("out",null,self._uiHash(this));this.containers[i].containerCache.over=0;}}}
+if(this.placeholder[0].parentNode)this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode)this.helper.remove();$.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){$(this.domPosition.prev).after(this.currentItem);}else{$(this.domPosition.parent).prepend(this.currentItem);}
+return true;},serialize:function(o){var items=this._getItemsAsjQuery(o&&o.connected);var str=[];o=o||{};$(items).each(function(){var res=($(o.item||this).attr(o.attribute||'id')||'').match(o.expression||(/(.+)[-=_](.+)/));if(res)str.push((o.key||res[1]+'[]')+'='+(o.key&&o.expression?res[1]:res[2]));});return str.join('&');},toArray:function(o){var items=this._getItemsAsjQuery(o&&o.connected);var ret=[];o=o||{};items.each(function(){ret.push($(o.item||this).attr(o.attribute||'id')||'');});return ret;},_intersectsWith:function(item){var x1=this.positionAbs.left,x2=x1+this.helperProportions.width,y1=this.positionAbs.top,y2=y1+this.helperProportions.height;var l=item.left,r=l+item.width,t=item.top,b=t+item.height;var dyClick=this.offset.click.top,dxClick=this.offset.click.left;var isOverElement=(y1+dyClick)>t&&(y1+dyClick)l&&(x1+dxClick)item[this.floating?'width':'height'])){return isOverElement;}else{return(l0?"down":"up");},_getDragHorizontalDirection:function(){var delta=this.positionAbs.left-this.lastPositionAbs.left;return delta!=0&&(delta>0?"right":"left");},refresh:function(event){this._refreshItems(event);this.refreshPositions();},_connectWith:function(){var options=this.options;return options.connectWith.constructor==String?[options.connectWith]:options.connectWith;},_getItemsAsjQuery:function(connected){var self=this;var items=[];var queries=[];var connectWith=this._connectWith();if(connectWith&&connected){for(var i=connectWith.length-1;i>=0;i--){var cur=$(connectWith[i]);for(var j=cur.length-1;j>=0;j--){var inst=$.data(cur[j],'sortable');if(inst&&inst!=this&&!inst.options.disabled){queries.push([$.isFunction(inst.options.items)?inst.options.items.call(inst.element):$(inst.options.items,inst.element).not(".ui-sortable-helper"),inst]);}};};}
+queries.push([$.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):$(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var i=queries.length-1;i>=0;i--){queries[i][0].each(function(){items.push(this);});};return $(items);},_removeCurrentsFromItems:function(){var list=this.currentItem.find(":data(sortable-item)");for(var i=0;i=0;i--){var cur=$(connectWith[i]);for(var j=cur.length-1;j>=0;j--){var inst=$.data(cur[j],'sortable');if(inst&&inst!=this&&!inst.options.disabled){queries.push([$.isFunction(inst.options.items)?inst.options.items.call(inst.element[0],event,{item:this.currentItem}):$(inst.options.items,inst.element),inst]);this.containers.push(inst);}};};}
+for(var i=queries.length-1;i>=0;i--){var targetData=queries[i][1];var _queries=queries[i][0];for(var j=0,queriesLength=_queries.length;j=0;i--){var item=this.items[i];if(item.instance!=this.currentContainer&&this.currentContainer&&item.item[0]!=this.currentItem[0])
+continue;var t=this.options.toleranceElement?$(this.options.toleranceElement,item.item):item.item;if(!fast){item.width=t.outerWidth();item.height=t.outerHeight();}
+var p=t.offset();item.left=p.left;item.top=p.top;};if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this);}else{for(var i=this.containers.length-1;i>=0;i--){var p=this.containers[i].element.offset();this.containers[i].containerCache.left=p.left;this.containers[i].containerCache.top=p.top;this.containers[i].containerCache.width=this.containers[i].element.outerWidth();this.containers[i].containerCache.height=this.containers[i].element.outerHeight();};}},_createPlaceholder:function(that){var self=that||this,o=self.options;if(!o.placeholder||o.placeholder.constructor==String){var className=o.placeholder;o.placeholder={element:function(){var el=$(document.createElement(self.currentItem[0].nodeName)).addClass(className||self.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!className)
+el.style.visibility="hidden";return el;},update:function(container,p){if(className&&!o.forcePlaceholderSize)return;if(!p.height()){p.height(self.currentItem.innerHeight()-parseInt(self.currentItem.css('paddingTop')||0,10)-parseInt(self.currentItem.css('paddingBottom')||0,10));};if(!p.width()){p.width(self.currentItem.innerWidth()-parseInt(self.currentItem.css('paddingLeft')||0,10)-parseInt(self.currentItem.css('paddingRight')||0,10));};}};}
+self.placeholder=$(o.placeholder.element.call(self.element,self.currentItem));self.currentItem.after(self.placeholder);o.placeholder.update(self,self.placeholder);},_contactContainers:function(event){for(var i=this.containers.length-1;i>=0;i--){if(this._intersectsWith(this.containers[i].containerCache)){if(!this.containers[i].containerCache.over){if(this.currentContainer!=this.containers[i]){var dist=10000;var itemWithLeastDistance=null;var base=this.positionAbs[this.containers[i].floating?'left':'top'];for(var j=this.items.length-1;j>=0;j--){if(!$.ui.contains(this.containers[i].element[0],this.items[j].item[0]))continue;var cur=this.items[j][this.containers[i].floating?'left':'top'];if(Math.abs(cur-base)this.containment[2])pageX=this.containment[2]+this.offset.click.left;if(event.pageY-this.offset.click.top>this.containment[3])pageY=this.containment[3]+this.offset.click.top;}
+if(o.grid){var top=this.originalPageY+Math.round((pageY-this.originalPageY)/o.grid[1])*o.grid[1];pageY=this.containment?(!(top-this.offset.click.topthis.containment[3])?top:(!(top-this.offset.click.topthis.containment[2])?left:(!(left-this.offset.click.left=0;i--){if($.ui.contains(this.containers[i].element[0],this.currentItem[0])&&!noPropagation){delayedTriggers.push((function(c){return function(event){c._trigger("receive",event,this._uiHash(this));};}).call(this,this.containers[i]));delayedTriggers.push((function(c){return function(event){c._trigger("update",event,this._uiHash(this));};}).call(this,this.containers[i]));}};};for(var i=this.containers.length-1;i>=0;i--){if(!noPropagation)delayedTriggers.push((function(c){return function(event){c._trigger("deactivate",event,this._uiHash(this));};}).call(this,this.containers[i]));if(this.containers[i].containerCache.over){delayedTriggers.push((function(c){return function(event){c._trigger("out",event,this._uiHash(this));};}).call(this,this.containers[i]));this.containers[i].containerCache.over=0;}}
+if(this._storedCursor)$('body').css("cursor",this._storedCursor);if(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(!noPropagation){this._trigger("beforeStop",event,this._uiHash());for(var i=0;i *',opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}});})(jQuery);(function($){$.widget("ui.accordion",{_init:function(){var o=this.options,self=this;this.running=0;if(o.collapsible==$.ui.accordion.defaults.collapsible&&o.alwaysOpen!=$.ui.accordion.defaults.alwaysOpen){o.collapsible=!o.alwaysOpen;}
+if(o.navigation){var current=this.element.find("a").filter(o.navigationFilter);if(current.length){if(current.filter(o.header).length){this.active=current;}else{this.active=current.parent().parent().prev();current.addClass("ui-accordion-content-active");}}}
+this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix");}
+this.headers=this.element.find(o.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){$(this).addClass('ui-state-hover');}).bind("mouseleave.accordion",function(){$(this).removeClass('ui-state-hover');}).bind("focus.accordion",function(){$(this).addClass('ui-state-focus');}).bind("blur.accordion",function(){$(this).removeClass('ui-state-focus');});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||o.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass('ui-accordion-content-active');$(" ").addClass("ui-icon "+o.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(o.icons.header).toggleClass(o.icons.headerSelected);if($.browser.msie){this.element.find('a').css('zoom','1');}
+this.resize();this.element.attr('role','tablist');this.headers.attr('role','tab').bind('keydown',function(event){return self._keydown(event);}).next().attr('role','tabpanel');this.headers.not(this.active||"").attr('aria-expanded','false').attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr('tabIndex','0');}else{this.active.attr('aria-expanded','true').attr('tabIndex','0');}
+if(!$.browser.safari)
+this.headers.find('a').attr('tabIndex','-1');if(o.event){this.headers.bind((o.event)+".accordion",function(event){return self._clickHandler.call(self,event,this);});}},destroy:function(){var o=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind('.accordion').removeData('accordion');this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var contents=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(o.autoHeight||o.fillHeight){contents.css("height","");}},_setData:function(key,value){if(key=='alwaysOpen'){key='collapsible';value=!value;}
+$.widget.prototype._setData.apply(this,arguments);},_keydown:function(event){var o=this.options,keyCode=$.ui.keyCode;if(o.disabled||event.altKey||event.ctrlKey)
+return;var length=this.headers.length;var currentIndex=this.headers.index(event.target);var toFocus=false;switch(event.keyCode){case keyCode.RIGHT:case keyCode.DOWN:toFocus=this.headers[(currentIndex+1)%length];break;case keyCode.LEFT:case keyCode.UP:toFocus=this.headers[(currentIndex-1+length)%length];break;case keyCode.SPACE:case keyCode.ENTER:return this._clickHandler({target:event.target},event.target);}
+if(toFocus){$(event.target).attr('tabIndex','-1');$(toFocus).attr('tabIndex','0');toFocus.focus();return false;}
+return true;},resize:function(){var o=this.options,maxHeight;if(o.fillSpace){if($.browser.msie){var defOverflow=this.element.parent().css('overflow');this.element.parent().css('overflow','hidden');}
+maxHeight=this.element.parent().height();if($.browser.msie){this.element.parent().css('overflow',defOverflow);}
+this.headers.each(function(){maxHeight-=$(this).outerHeight();});var maxPadding=0;this.headers.next().each(function(){maxPadding=Math.max(maxPadding,$(this).innerHeight()-$(this).height());}).height(Math.max(0,maxHeight-maxPadding)).css('overflow','auto');}else if(o.autoHeight){maxHeight=0;this.headers.next().each(function(){maxHeight=Math.max(maxHeight,$(this).outerHeight());}).height(maxHeight);}},activate:function(index){var active=this._findActive(index)[0];this._clickHandler({target:active},active);},_findActive:function(selector){return selector?typeof selector=="number"?this.headers.filter(":eq("+selector+")"):this.headers.not(this.headers.not(selector)):selector===false?$([]):this.headers.filter(":eq(0)");},_clickHandler:function(event,target){var o=this.options;if(o.disabled)return false;if(!event.target&&o.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header);this.active.next().addClass('ui-accordion-content-active');var toHide=this.active.next(),data={options:o,newHeader:$([]),oldHeader:o.active,newContent:$([]),oldContent:toHide},toShow=(this.active=$([]));this._toggle(toShow,toHide,data);return false;}
+var clicked=$(event.currentTarget||target);var clickedIsActive=clicked[0]==this.active[0];if(this.running||(!o.collapsible&&clickedIsActive)){return false;}
+this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header);this.active.next().addClass('ui-accordion-content-active');if(!clickedIsActive){clicked.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(o.icons.header).addClass(o.icons.headerSelected);clicked.next().addClass('ui-accordion-content-active');}
+var toShow=clicked.next(),toHide=this.active.next(),data={options:o,newHeader:clickedIsActive&&o.collapsible?$([]):clicked,oldHeader:this.active,newContent:clickedIsActive&&o.collapsible?$([]):toShow.find('> *'),oldContent:toHide.find('> *')},down=this.headers.index(this.active[0])>this.headers.index(clicked[0]);this.active=clickedIsActive?$([]):clicked;this._toggle(toShow,toHide,data,clickedIsActive,down);return false;},_toggle:function(toShow,toHide,data,clickedIsActive,down){var o=this.options,self=this;this.toShow=toShow;this.toHide=toHide;this.data=data;var complete=function(){if(!self)return;return self._completed.apply(self,arguments);};this._trigger("changestart",null,this.data);this.running=toHide.size()===0?toShow.size():toHide.size();if(o.animated){var animOptions={};if(o.collapsible&&clickedIsActive){animOptions={toShow:$([]),toHide:toHide,complete:complete,down:down,autoHeight:o.autoHeight||o.fillSpace};}else{animOptions={toShow:toShow,toHide:toHide,complete:complete,down:down,autoHeight:o.autoHeight||o.fillSpace};}
+if(!o.proxied){o.proxied=o.animated;}
+if(!o.proxiedDuration){o.proxiedDuration=o.duration;}
+o.animated=$.isFunction(o.proxied)?o.proxied(animOptions):o.proxied;o.duration=$.isFunction(o.proxiedDuration)?o.proxiedDuration(animOptions):o.proxiedDuration;var animations=$.ui.accordion.animations,duration=o.duration,easing=o.animated;if(!animations[easing]){animations[easing]=function(options){this.slide(options,{easing:easing,duration:duration||700});};}
+animations[easing](animOptions);}else{if(o.collapsible&&clickedIsActive){toShow.toggle();}else{toHide.hide();toShow.show();}
+complete(true);}
+toHide.prev().attr('aria-expanded','false').attr("tabIndex","-1").blur();toShow.prev().attr('aria-expanded','true').attr("tabIndex","0").focus();},_completed:function(cancel){var o=this.options;this.running=cancel?0:--this.running;if(this.running)return;if(o.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""});}
+this._trigger('change',null,this.data);}});$.extend($.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:'slide',autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> 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();}},animations:{slide:function(options,additions){options=$.extend({easing:"swing",duration:300},options,additions);if(!options.toHide.size()){options.toShow.animate({height:"show"},options);return;}
+if(!options.toShow.size()){options.toHide.animate({height:"hide"},options);return;}
+var overflow=options.toShow.css('overflow'),percentDone,showProps={},hideProps={},fxAttrs=["height","paddingTop","paddingBottom"],originalWidth;var s=options.toShow;originalWidth=s[0].style.width;s.width(parseInt(s.parent().width(),10)-parseInt(s.css("paddingLeft"),10)-parseInt(s.css("paddingRight"),10)-(parseInt(s.css("borderLeftWidth"),10)||0)-(parseInt(s.css("borderRightWidth"),10)||0));$.each(fxAttrs,function(i,prop){hideProps[prop]='hide';var parts=(''+$.css(options.toShow[0],prop)).match(/^([\d+-.]+)(.*)$/);showProps[prop]={value:parts[1],unit:parts[2]||'px'};});options.toShow.css({height:0,overflow:'hidden'}).show();options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate(hideProps,{step:function(now,settings){if(settings.prop=='height'){percentDone=(settings.now-settings.start)/(settings.end-settings.start);}
+options.toShow[0].style[settings.prop]=(percentDone*showProps[settings.prop].value)+showProps[settings.prop].unit;},duration:options.duration,easing:options.easing,complete:function(){if(!options.autoHeight){options.toShow.css("height","");}
+options.toShow.css("width",originalWidth);options.toShow.css({overflow:overflow});options.complete();}});},bounceslide:function(options){this.slide(options,{easing:options.down?"easeOutBounce":"swing",duration:options.down?1000:200});},easeslide:function(options){this.slide(options,{easing:"easeinout",duration:700});}}});})(jQuery);(function($){var setDataSwitch={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},uiDialogClasses='ui-dialog '+'ui-widget '+'ui-widget-content '+'ui-corner-all ';$.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr('title');var self=this,options=this.options,title=options.title||this.originalTitle||' ',titleId=$.ui.dialog.getTitleId(this.element),uiDialog=(this.uiDialog=$('
')).appendTo(document.body).hide().addClass(uiDialogClasses+options.dialogClass).css({position:'absolute',overflow:'hidden',zIndex:options.zIndex}).attr('tabIndex',-1).css('outline',0).keydown(function(event){(options.closeOnEscape&&event.keyCode&&event.keyCode==$.ui.keyCode.ESCAPE&&self.close(event));}).attr({role:'dialog','aria-labelledby':titleId}).mousedown(function(event){self.moveToTop(false,event);}),uiDialogContent=this.element.show().removeAttr('title').addClass('ui-dialog-content '+'ui-widget-content').appendTo(uiDialog),uiDialogTitlebar=(this.uiDialogTitlebar=$('
')).addClass('ui-dialog-titlebar '+'ui-widget-header '+'ui-corner-all '+'ui-helper-clearfix').prependTo(uiDialog),uiDialogTitlebarClose=$(' ').addClass('ui-dialog-titlebar-close '+'ui-corner-all').attr('role','button').hover(function(){uiDialogTitlebarClose.addClass('ui-state-hover');},function(){uiDialogTitlebarClose.removeClass('ui-state-hover');}).focus(function(){uiDialogTitlebarClose.addClass('ui-state-focus');}).blur(function(){uiDialogTitlebarClose.removeClass('ui-state-focus');}).mousedown(function(ev){ev.stopPropagation();}).click(function(event){self.close(event);return false;}).appendTo(uiDialogTitlebar),uiDialogTitlebarCloseText=(this.uiDialogTitlebarCloseText=$(' ')).addClass('ui-icon '+'ui-icon-closethick').text(options.closeText).appendTo(uiDialogTitlebarClose),uiDialogTitle=$(' ').addClass('ui-dialog-title').attr('id',titleId).html(title).prependTo(uiDialogTitlebar);uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();(options.draggable&&$.fn.draggable&&this._makeDraggable());(options.resizable&&$.fn.resizable&&this._makeResizable());this._createButtons(options.buttons);this._isOpen=false;(options.bgiframe&&$.fn.bgiframe&&uiDialog.bgiframe());(options.autoOpen&&this.open());},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind('.dialog').removeData('dialog').removeClass('ui-dialog-content ui-widget-content').hide().appendTo('body');this.uiDialog.remove();(this.originalTitle&&this.element.attr('title',this.originalTitle));},close:function(event){var self=this;if(false===self._trigger('beforeclose',event)){return;}
+(self.overlay&&self.overlay.destroy());self.uiDialog.unbind('keypress.ui-dialog');(self.options.hide?self.uiDialog.hide(self.options.hide,function(){self._trigger('close',event);}):self.uiDialog.hide()&&self._trigger('close',event));$.ui.dialog.overlay.resize();self._isOpen=false;if(self.options.modal){var maxZ=0;$('.ui-dialog').each(function(){if(this!=self.uiDialog[0]){maxZ=Math.max(maxZ,$(this).css('z-index'));}});$.ui.dialog.maxZ=maxZ;}},isOpen:function(){return this._isOpen;},moveToTop:function(force,event){if((this.options.modal&&!force)||(!this.options.stack&&!this.options.modal)){return this._trigger('focus',event);}
+if(this.options.zIndex>$.ui.dialog.maxZ){$.ui.dialog.maxZ=this.options.zIndex;}
+(this.overlay&&this.overlay.$el.css('z-index',$.ui.dialog.overlay.maxZ=++$.ui.dialog.maxZ));var saveScroll={scrollTop:this.element.attr('scrollTop'),scrollLeft:this.element.attr('scrollLeft')};this.uiDialog.css('z-index',++$.ui.dialog.maxZ);this.element.attr(saveScroll);this._trigger('focus',event);},open:function(){if(this._isOpen){return;}
+var options=this.options,uiDialog=this.uiDialog;this.overlay=options.modal?new $.ui.dialog.overlay(this):null;(uiDialog.next().length&&uiDialog.appendTo('body'));this._size();this._position(options.position);uiDialog.show(options.show);this.moveToTop(true);(options.modal&&uiDialog.bind('keypress.ui-dialog',function(event){if(event.keyCode!=$.ui.keyCode.TAB){return;}
+var tabbables=$(':tabbable',this),first=tabbables.filter(':first')[0],last=tabbables.filter(':last')[0];if(event.target==last&&!event.shiftKey){setTimeout(function(){first.focus();},1);}else if(event.target==first&&event.shiftKey){setTimeout(function(){last.focus();},1);}}));$([]).add(uiDialog.find('.ui-dialog-content :tabbable:first')).add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')).add(uiDialog).filter(':first').focus();this._trigger('open');this._isOpen=true;},_createButtons:function(buttons){var self=this,hasButtons=false,uiDialogButtonPane=$('
').addClass('ui-dialog-buttonpane '+'ui-widget-content '+'ui-helper-clearfix');this.uiDialog.find('.ui-dialog-buttonpane').remove();(typeof buttons=='object'&&buttons!==null&&$.each(buttons,function(){return!(hasButtons=true);}));if(hasButtons){$.each(buttons,function(name,fn){$(' ').addClass('ui-state-default '+'ui-corner-all').text(name).click(function(){fn.apply(self.element[0],arguments);}).hover(function(){$(this).addClass('ui-state-hover');},function(){$(this).removeClass('ui-state-hover');}).focus(function(){$(this).addClass('ui-state-focus');}).blur(function(){$(this).removeClass('ui-state-focus');}).appendTo(uiDialogButtonPane);});uiDialogButtonPane.appendTo(this.uiDialog);}},_makeDraggable:function(){var self=this,options=this.options,heightBeforeDrag;this.uiDialog.draggable({cancel:'.ui-dialog-content',handle:'.ui-dialog-titlebar',containment:'document',start:function(){heightBeforeDrag=options.height;$(this).height($(this).height()).addClass("ui-dialog-dragging");(options.dragStart&&options.dragStart.apply(self.element[0],arguments));},drag:function(){(options.drag&&options.drag.apply(self.element[0],arguments));},stop:function(){$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);(options.dragStop&&options.dragStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}});},_makeResizable:function(handles){handles=(handles===undefined?this.options.resizable:handles);var self=this,options=this.options,resizeHandles=typeof handles=='string'?handles:'n,e,s,w,se,sw,ne,nw';this.uiDialog.resizable({cancel:'.ui-dialog-content',alsoResize:this.element,maxWidth:options.maxWidth,maxHeight:options.maxHeight,minWidth:options.minWidth,minHeight:options.minHeight,start:function(){$(this).addClass("ui-dialog-resizing");(options.resizeStart&&options.resizeStart.apply(self.element[0],arguments));},resize:function(){(options.resize&&options.resize.apply(self.element[0],arguments));},handles:resizeHandles,stop:function(){$(this).removeClass("ui-dialog-resizing");options.height=$(this).height();options.width=$(this).width();(options.resizeStop&&options.resizeStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}}).find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');},_position:function(pos){var wnd=$(window),doc=$(document),pTop=doc.scrollTop(),pLeft=doc.scrollLeft(),minTop=pTop;if($.inArray(pos,['center','top','right','bottom','left'])>=0){pos=[pos=='right'||pos=='left'?pos:'center',pos=='top'||pos=='bottom'?pos:'middle'];}
+if(pos.constructor!=Array){pos=['center','middle'];}
+if(pos[0].constructor==Number){pLeft+=pos[0];}else{switch(pos[0]){case'left':pLeft+=0;break;case'right':pLeft+=wnd.width()-this.uiDialog.outerWidth();break;default:case'center':pLeft+=(wnd.width()-this.uiDialog.outerWidth())/2;}}
+if(pos[1].constructor==Number){pTop+=pos[1];}else{switch(pos[1]){case'top':pTop+=0;break;case'bottom':pTop+=wnd.height()-this.uiDialog.outerHeight();break;default:case'middle':pTop+=(wnd.height()-this.uiDialog.outerHeight())/2;}}
+pTop=Math.max(pTop,minTop);this.uiDialog.css({top:pTop,left:pLeft});},_setData:function(key,value){(setDataSwitch[key]&&this.uiDialog.data(setDataSwitch[key],value));switch(key){case"buttons":this._createButtons(value);break;case"closeText":this.uiDialogTitlebarCloseText.text(value);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(uiDialogClasses+value);break;case"draggable":(value?this._makeDraggable():this.uiDialog.draggable('destroy'));break;case"height":this.uiDialog.height(value);break;case"position":this._position(value);break;case"resizable":var uiDialog=this.uiDialog,isResizable=this.uiDialog.is(':data(resizable)');(isResizable&&!value&&uiDialog.resizable('destroy'));(isResizable&&typeof value=='string'&&uiDialog.resizable('option','handles',value));(isResizable||this._makeResizable(value));break;case"title":$(".ui-dialog-title",this.uiDialogTitlebar).html(value||' ');break;case"width":this.uiDialog.width(value);break;}
+$.widget.prototype._setData.apply(this,arguments);},_size:function(){var options=this.options;this.element.css({height:0,minHeight:0,width:'auto'});var nonContentHeight=this.uiDialog.css({height:'auto',width:options.width}).height();this.element.css({minHeight:Math.max(options.minHeight-nonContentHeight,0),height:options.height=='auto'?'auto':Math.max(options.height-nonContentHeight,0)});}});$.extend($.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:'close',dialogClass:'',draggable:true,hide:null,height:'auto',maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:'center',resizable:true,show:null,stack:true,title:'',width:300,zIndex:1000},getter:'isOpen',uuid:0,maxZ:0,getTitleId:function($el){return'ui-dialog-title-'+($el.attr('id')||++this.uuid);},overlay:function(dialog){this.$el=$.ui.dialog.overlay.create(dialog);}});$.extend($.ui.dialog.overlay,{instances:[],maxZ:0,events:$.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),function(event){return event+'.dialog-overlay';}).join(' '),create:function(dialog){if(this.instances.length===0){setTimeout(function(){if($.ui.dialog.overlay.instances.length){$(document).bind($.ui.dialog.overlay.events,function(event){var dialogZ=$(event.target).parents('.ui-dialog').css('zIndex')||0;return(dialogZ>$.ui.dialog.overlay.maxZ);});}},1);$(document).bind('keydown.dialog-overlay',function(event){(dialog.options.closeOnEscape&&event.keyCode&&event.keyCode==$.ui.keyCode.ESCAPE&&dialog.close(event));});$(window).bind('resize.dialog-overlay',$.ui.dialog.overlay.resize);}
+var $el=$('
').appendTo(document.body).addClass('ui-widget-overlay').css({width:this.width(),height:this.height()});(dialog.options.bgiframe&&$.fn.bgiframe&&$el.bgiframe());this.instances.push($el);return $el;},destroy:function($el){this.instances.splice($.inArray(this.instances,$el),1);if(this.instances.length===0){$([document,window]).unbind('.dialog-overlay');}
+$el.remove();var maxZ=0;$.each(this.instances,function(){maxZ=Math.max(maxZ,this.css('z-index'));});this.maxZ=maxZ;},height:function(){if($.browser.msie&&$.browser.version<7){var scrollHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var offsetHeight=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(scrollHeight=0&&this.anchors[o.selected])||o.selected<0)?o.selected:0;o.disabled=$.unique(o.disabled.concat($.map(this.lis.filter('.ui-state-disabled'),function(n,i){return self.lis.index(n);}))).sort();if($.inArray(o.selected,o.disabled)!=-1){o.disabled.splice($.inArray(o.selected,o.disabled),1);}
+this.panels.addClass('ui-tabs-hide');this.lis.removeClass('ui-tabs-selected ui-state-active');if(o.selected>=0&&this.anchors.length){this.panels.eq(o.selected).removeClass('ui-tabs-hide');this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active');self.element.queue("tabs",function(){self._trigger('show',null,self._ui(self.anchors[o.selected],self.panels[o.selected]));});this.load(o.selected);}
+$(window).bind('unload',function(){self.lis.add(self.anchors).unbind('.tabs');self.lis=self.anchors=self.panels=null;});}
+else{o.selected=this.lis.index(this.lis.filter('.ui-tabs-selected'));}
+this.element[o.collapsible?'addClass':'removeClass']('ui-tabs-collapsible');if(o.cookie){this._cookie(o.selected,o.cookie);}
+for(var i=0,li;(li=this.lis[i]);i++){$(li)[$.inArray(i,o.disabled)!=-1&&!$(li).hasClass('ui-tabs-selected')?'addClass':'removeClass']('ui-state-disabled');}
+if(o.cache===false){this.anchors.removeData('cache.tabs');}
+this.lis.add(this.anchors).unbind('.tabs');if(o.event!='mouseover'){var addState=function(state,el){if(el.is(':not(.ui-state-disabled)')){el.addClass('ui-state-'+state);}};var removeState=function(state,el){el.removeClass('ui-state-'+state);};this.lis.bind('mouseover.tabs',function(){addState('hover',$(this));});this.lis.bind('mouseout.tabs',function(){removeState('hover',$(this));});this.anchors.bind('focus.tabs',function(){addState('focus',$(this).closest('li'));});this.anchors.bind('blur.tabs',function(){removeState('focus',$(this).closest('li'));});}
+var hideFx,showFx;if(o.fx){if($.isArray(o.fx)){hideFx=o.fx[0];showFx=o.fx[1];}
+else{hideFx=showFx=o.fx;}}
+function resetStyle($el,fx){$el.css({display:''});if($.browser.msie&&fx.opacity){$el[0].style.removeAttribute('filter');}}
+var showTab=showFx?function(clicked,$show){$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');$show.hide().removeClass('ui-tabs-hide').animate(showFx,showFx.duration||'normal',function(){resetStyle($show,showFx);self._trigger('show',null,self._ui(clicked,$show[0]));});}:function(clicked,$show){$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');$show.removeClass('ui-tabs-hide');self._trigger('show',null,self._ui(clicked,$show[0]));};var hideTab=hideFx?function(clicked,$hide){$hide.animate(hideFx,hideFx.duration||'normal',function(){self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');$hide.addClass('ui-tabs-hide');resetStyle($hide,hideFx);self.element.dequeue("tabs");});}:function(clicked,$hide,$show){self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');$hide.addClass('ui-tabs-hide');self.element.dequeue("tabs");};this.anchors.bind(o.event+'.tabs',function(){var el=this,$li=$(this).closest('li'),$hide=self.panels.filter(':not(.ui-tabs-hide)'),$show=$(self._sanitizeSelector(this.hash));if(($li.hasClass('ui-tabs-selected')&&!o.collapsible)||$li.hasClass('ui-state-disabled')||$li.hasClass('ui-state-processing')||self._trigger('select',null,self._ui(this,$show[0]))===false){this.blur();return false;}
+o.selected=self.anchors.index(this);self.abort();if(o.collapsible){if($li.hasClass('ui-tabs-selected')){o.selected=-1;if(o.cookie){self._cookie(o.selected,o.cookie);}
+self.element.queue("tabs",function(){hideTab(el,$hide);}).dequeue("tabs");this.blur();return false;}
+else if(!$hide.length){if(o.cookie){self._cookie(o.selected,o.cookie);}
+self.element.queue("tabs",function(){showTab(el,$show);});self.load(self.anchors.index(this));this.blur();return false;}}
+if(o.cookie){self._cookie(o.selected,o.cookie);}
+if($show.length){if($hide.length){self.element.queue("tabs",function(){hideTab(el,$hide);});}
+self.element.queue("tabs",function(){showTab(el,$show);});self.load(self.anchors.index(this));}
+else{throw'jQuery UI Tabs: Mismatching fragment identifier.';}
+if($.browser.msie){this.blur();}});this.anchors.bind('click.tabs',function(){return false;});},destroy:function(){var o=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 href=$.data(this,'href.tabs');if(href){this.href=href;}
+var $this=$(this).unbind('.tabs');$.each(['href','load','cache'],function(i,prefix){$this.removeData(prefix+'.tabs');});});this.lis.unbind('.tabs').add(this.panels).each(function(){if($.data(this,'destroy.tabs')){$(this).remove();}
+else{$(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'].join(' '));}});if(o.cookie){this._cookie(null,o.cookie);}},add:function(url,label,index){if(index===undefined){index=this.anchors.length;}
+var self=this,o=this.options,$li=$(o.tabTemplate.replace(/#\{href\}/g,url).replace(/#\{label\}/g,label)),id=!url.indexOf('#')?url.replace('#',''):this._tabId($('a',$li)[0]);$li.addClass('ui-state-default ui-corner-top').data('destroy.tabs',true);var $panel=$('#'+id);if(!$panel.length){$panel=$(o.panelTemplate).attr('id',id).data('destroy.tabs',true);}
+$panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide');if(index>=this.lis.length){$li.appendTo(this.list);$panel.appendTo(this.list[0].parentNode);}
+else{$li.insertBefore(this.lis[index]);$panel.insertBefore(this.panels[index]);}
+o.disabled=$.map(o.disabled,function(n,i){return n>=index?++n:n;});this._tabify();if(this.anchors.length==1){$li.addClass('ui-tabs-selected ui-state-active');$panel.removeClass('ui-tabs-hide');this.element.queue("tabs",function(){self._trigger('show',null,self._ui(self.anchors[0],self.panels[0]));});this.load(0);}
+this._trigger('add',null,this._ui(this.anchors[index],this.panels[index]));},remove:function(index){var o=this.options,$li=this.lis.eq(index).remove(),$panel=this.panels.eq(index).remove();if($li.hasClass('ui-tabs-selected')&&this.anchors.length>1){this.select(index+(index+1=index?--n:n;});this._tabify();this._trigger('remove',null,this._ui($li.find('a')[0],$panel[0]));},enable:function(index){var o=this.options;if($.inArray(index,o.disabled)==-1){return;}
+this.lis.eq(index).removeClass('ui-state-disabled');o.disabled=$.grep(o.disabled,function(n,i){return n!=index;});this._trigger('enable',null,this._ui(this.anchors[index],this.panels[index]));},disable:function(index){var self=this,o=this.options;if(index!=o.selected){this.lis.eq(index).addClass('ui-state-disabled');o.disabled.push(index);o.disabled.sort();this._trigger('disable',null,this._ui(this.anchors[index],this.panels[index]));}},select:function(index){if(typeof index=='string'){index=this.anchors.index(this.anchors.filter('[href$='+index+']'));}
+else if(index===null){index=-1;}
+if(index==-1&&this.options.collapsible){index=this.options.selected;}
+this.anchors.eq(index).trigger(this.options.event+'.tabs');},load:function(index){var self=this,o=this.options,a=this.anchors.eq(index)[0],url=$.data(a,'load.tabs');this.abort();if(!url||this.element.queue("tabs").length!==0&&$.data(a,'cache.tabs')){this.element.dequeue("tabs");return;}
+this.lis.eq(index).addClass('ui-state-processing');if(o.spinner){var span=$('span',a);span.data('label.tabs',span.html()).html(o.spinner);}
+this.xhr=$.ajax($.extend({},o.ajaxOptions,{url:url,success:function(r,s){$(self._sanitizeSelector(a.hash)).html(r);self._cleanup();if(o.cache){$.data(a,'cache.tabs',true);}
+self._trigger('load',null,self._ui(self.anchors[index],self.panels[index]));try{o.ajaxOptions.success(r,s);}
+catch(e){}
+self.element.dequeue("tabs");}}));},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr;}
+this._cleanup();},url:function(index,url){this.anchors.eq(index).removeData('cache.tabs').data('load.tabs',url);},length:function(){return this.anchors.length;}});$.extend($.ui.tabs,{version:'1.7.2',getter:'length',defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:'click',fx:null,idPrefix:'ui-tabs-',panelTemplate:'
',spinner:'Loading… ',tabTemplate:'#{label} '}});$.extend($.ui.tabs.prototype,{rotation:null,rotate:function(ms,continuing){var self=this,o=this.options;var rotate=self._rotate||(self._rotate=function(e){clearTimeout(self.rotation);self.rotation=setTimeout(function(){var t=o.selected;self.select(++t
+
+
+
+home page or try again .',
+ array('%site%' => htmlspecialchars(url::site(), ENT_QUOTES, Kohana::CHARSET), '%uri%' => htmlspecialchars(url::site(Router::$current_uri), ENT_QUOTES, Kohana::CHARSET)));
+?>
+
+
+ ') !== FALSE)
+ {
+ // Closing body tag was found, insert the profiler data before it
+ Kohana::$output = str_ireplace('', $view->render().'', Kohana::$output);
+ }
+ else
+ {
+ // Append the profiler data to the output
+ Kohana::$output .= $view->render();
+ }
+ }
+
+ /**
+ * Benchmark times and memory usage from the Benchmark library.
+ *
+ * @return void
+ */
+ public static function benchmarks()
+ {
+ if ( ! Profiler::show('benchmarks'))
+ return;
+
+ $table = new Profiler_Table();
+ $table->add_column();
+ $table->add_column('kp-column kp-data');
+ $table->add_column('kp-column kp-data');
+ $table->add_column('kp-column kp-data');
+ $table->add_row(array(__('Benchmarks'), __('Count'), __('Time'), __('Memory')), 'kp-title', 'background-color: #FFE0E0');
+
+ $benchmarks = Benchmark::get(TRUE);
+
+ // Moves the first benchmark (total execution time) to the end of the array
+ $benchmarks = array_slice($benchmarks, 1) + array_slice($benchmarks, 0, 1);
+
+ text::alternate();
+ foreach ($benchmarks as $name => $benchmark)
+ {
+ // Clean unique id from system benchmark names
+ $name = ucwords(str_replace(array('_', '-'), ' ', str_replace(SYSTEM_BENCHMARK.'_', '', $name)));
+
+ $data = array(__($name), $benchmark['count'], number_format($benchmark['time'], Kohana::config('profiler.time_decimals')), number_format($benchmark['memory'] / 1024 / 1024, Kohana::config('profiler.memory_decimals')).'MB');
+ $class = text::alternate('', 'kp-altrow');
+
+ if ($name == 'Total Execution')
+ {
+ // Clear the count column
+ $data[1] = '';
+ $class = 'kp-totalrow';
+ }
+
+ $table->add_row($data, $class);
+ }
+
+ Profiler::add($table);
+ }
+
+ /**
+ * Database query benchmarks.
+ *
+ * @return void
+ */
+ public static function database()
+ {
+ if ( ! Profiler::show('database'))
+ return;
+
+ $queries = Database::$benchmarks;
+
+ // Don't show if there are no queries
+ if (empty($queries)) return;
+
+ $table = new Profiler_Table();
+ $table->add_column();
+ $table->add_column('kp-column kp-data');
+ $table->add_column('kp-column kp-data');
+ $table->add_row(array(__('Queries'), __('Time'), __('Rows')), 'kp-title', 'background-color: #E0FFE0');
+
+ text::alternate();
+ $total_time = $total_rows = 0;
+ foreach ($queries as $query)
+ {
+ $data = array($query['query'], number_format($query['time'], Kohana::config('profiler.time_decimals')), $query['rows']);
+ $class = text::alternate('', 'kp-altrow');
+ $table->add_row($data, $class);
+ $total_time += $query['time'];
+ $total_rows += $query['rows'];
+ }
+
+ $data = array(__('Total: ') . count($queries), number_format($total_time, Kohana::config('profiler.time_decimals')), $total_rows);
+ $table->add_row($data, 'kp-totalrow');
+
+ Profiler::add($table);
+ }
+
+ /**
+ * Session data.
+ *
+ * @return void
+ */
+ public static function session()
+ {
+ if (empty($_SESSION)) return;
+
+ if ( ! Profiler::show('session'))
+ return;
+
+ $table = new Profiler_Table();
+ $table->add_column('kp-name');
+ $table->add_column();
+ $table->add_row(array(__('Session'), __('Value')), 'kp-title', 'background-color: #CCE8FB');
+
+ text::alternate();
+ foreach($_SESSION as $name => $value)
+ {
+ if (is_object($value))
+ {
+ $value = get_class($value).' [object]';
+ }
+
+ $data = array($name, $value);
+ $class = text::alternate('', 'kp-altrow');
+ $table->add_row($data, $class);
+ }
+
+ Profiler::add($table);
+ }
+
+ /**
+ * POST data.
+ *
+ * @return void
+ */
+ public static function post()
+ {
+ if (empty($_POST)) return;
+
+ if ( ! Profiler::show('post'))
+ return;
+
+ $table = new Profiler_Table();
+ $table->add_column('kp-name');
+ $table->add_column();
+ $table->add_row(array(__('POST'), __('Value')), 'kp-title', 'background-color: #E0E0FF');
+
+ text::alternate();
+ foreach($_POST as $name => $value)
+ {
+ $data = array($name, $value);
+ $class = text::alternate('', 'kp-altrow');
+ $table->add_row($data, $class);
+ }
+
+ Profiler::add($table);
+ }
+
+ /**
+ * Cookie data.
+ *
+ * @return void
+ */
+ public static function cookies()
+ {
+ if (empty($_COOKIE)) return;
+
+ if ( ! Profiler::show('cookies'))
+ return;
+
+ $table = new Profiler_Table();
+ $table->add_column('kp-name');
+ $table->add_column();
+ $table->add_row(array(__('Cookies'), __('Value')), 'kp-title', 'background-color: #FFF4D7');
+
+ text::alternate();
+ foreach($_COOKIE as $name => $value)
+ {
+ $data = array($name, $value);
+ $class = text::alternate('', 'kp-altrow');
+ $table->add_row($data, $class);
+ }
+
+ Profiler::add($table);
+ }
+}
diff --git a/system/libraries/Profiler_Table.php b/system/libraries/Profiler_Table.php
new file mode 100644
index 0000000..e590ad7
--- /dev/null
+++ b/system/libraries/Profiler_Table.php
@@ -0,0 +1,67 @@
+columns[] = array('class' => $class, 'style' => $style);
+ }
+
+ /**
+ * Add row to table.
+ *
+ * @param array data to go in table cells
+ * @param string CSS class
+ * @param string CSS style
+ */
+ public function add_row($data, $class = '', $style = '')
+ {
+ $this->rows[] = array('data' => $data, 'class' => $class, 'style' => $style);
+ }
+
+ /**
+ * Render table.
+ *
+ * @return string
+ */
+ public function render()
+ {
+ $data['rows'] = $this->rows;
+ $data['columns'] = $this->columns;
+ return View::factory('profiler/table', $data)->render();
+ }
+}
\ No newline at end of file
diff --git a/system/libraries/Router.php b/system/libraries/Router.php
new file mode 100644
index 0000000..c36121d
--- /dev/null
+++ b/system/libraries/Router.php
@@ -0,0 +1,315 @@
+ 1)
+ {
+ // Custom routing
+ Router::$routed_uri = Router::routed_uri(Router::$current_uri);
+ }
+ }
+
+ // Explode the routed segments by slashes
+ Router::$rsegments = explode('/', Router::$routed_uri);
+
+ // Prepare to find the controller
+ $controller_path = '';
+ $method_segment = NULL;
+
+ // Paths to search
+ $paths = Kohana::include_paths();
+
+ foreach (Router::$rsegments as $key => $segment)
+ {
+ // Add the segment to the search path
+ $controller_path .= $segment;
+
+ $found = FALSE;
+ foreach ($paths as $dir)
+ {
+ // Search within controllers only
+ $dir .= 'controllers/';
+
+ if (is_dir($dir.$controller_path) OR is_file($dir.$controller_path.EXT))
+ {
+ // Valid path
+ $found = TRUE;
+
+ // The controller must be a file that exists with the search path
+ if ($c = str_replace('\\', '/', realpath($dir.$controller_path.EXT))
+ AND is_file($c) AND strpos($c, $dir) === 0)
+ {
+ // Set controller name
+ Router::$controller = $segment;
+
+ // Change controller path
+ Router::$controller_path = $c;
+
+ // Set the method segment
+ $method_segment = $key + 1;
+
+ // Stop searching
+ break;
+ }
+ }
+ }
+
+ if ($found === FALSE)
+ {
+ // Maximum depth has been reached, stop searching
+ break;
+ }
+
+ // Add another slash
+ $controller_path .= '/';
+ }
+
+ if ($method_segment !== NULL AND isset(Router::$rsegments[$method_segment]))
+ {
+ // Set method
+ Router::$method = Router::$rsegments[$method_segment];
+
+ if (isset(Router::$rsegments[$method_segment + 1]))
+ {
+ // Set arguments
+ Router::$arguments = array_slice(Router::$rsegments, $method_segment + 1);
+ }
+ }
+
+ // Last chance to set routing before a 404 is triggered
+ Event::run('system.post_routing');
+
+ if (Router::$controller === NULL)
+ {
+ // No controller was found, so no page can be rendered
+ Event::run('system.404');
+ }
+ }
+
+ /**
+ * Attempts to determine the current URI using CLI, GET, PATH_INFO, ORIG_PATH_INFO, or PHP_SELF.
+ *
+ * @return void
+ */
+ public static function find_uri()
+ {
+ if (Kohana::$server_api === 'cli')
+ {
+ // Command line requires a bit of hacking
+ if (isset($_SERVER['argv'][1]))
+ {
+ Router::$current_uri = $_SERVER['argv'][1];
+
+ // Remove GET string from segments
+ if (strpos(Router::$current_uri, '?') !== FALSE)
+ {
+ list(Router::$current_uri, $query) = explode('?', Router::$current_uri, 2);
+
+ // Parse the query string into $_GET
+ parse_str($query, $_GET);
+
+ // Convert $_GET to UTF-8
+ $_GET = Input::clean($_GET);
+ }
+ }
+ }
+ elseif (isset($_GET['kohana_uri']))
+ {
+ // Use the URI defined in the query string
+ Router::$current_uri = $_GET['kohana_uri'];
+
+ // Remove the URI from $_GET
+ unset($_GET['kohana_uri']);
+
+ // Remove the URI from $_SERVER['QUERY_STRING']
+ $_SERVER['QUERY_STRING'] = preg_replace('~\bkohana_uri\b[^&]*+&?~', '', $_SERVER['QUERY_STRING']);
+ }
+ else
+ {
+ if (isset($_SERVER['PATH_INFO']) AND $_SERVER['PATH_INFO'])
+ {
+ Router::$current_uri = $_SERVER['PATH_INFO'];
+ }
+ elseif (isset($_SERVER['ORIG_PATH_INFO']) AND $_SERVER['ORIG_PATH_INFO'])
+ {
+ Router::$current_uri = $_SERVER['ORIG_PATH_INFO'];
+ }
+ elseif (isset($_SERVER['PHP_SELF']) AND $_SERVER['PHP_SELF'])
+ {
+ // PATH_INFO is empty during requests to the front controller
+ Router::$current_uri = $_SERVER['PHP_SELF'];
+ }
+
+ if (isset($_SERVER['SCRIPT_NAME']) AND $_SERVER['SCRIPT_NAME'])
+ {
+ // Clean up PATH_INFO fallbacks
+ // PATH_INFO may be formatted for ISAPI instead of CGI on IIS
+ if (strncmp(Router::$current_uri, $_SERVER['SCRIPT_NAME'], strlen($_SERVER['SCRIPT_NAME'])) === 0)
+ {
+ // Remove the front controller from the current uri
+ Router::$current_uri = (string) substr(Router::$current_uri, strlen($_SERVER['SCRIPT_NAME']));
+ }
+ }
+ }
+
+ // Remove slashes from the start and end of the URI
+ Router::$current_uri = trim(Router::$current_uri, '/');
+
+ if (Router::$current_uri !== '')
+ {
+ if ($suffix = Kohana::config('core.url_suffix') AND strpos(Router::$current_uri, $suffix) !== FALSE)
+ {
+ // Remove the URL suffix
+ Router::$current_uri = preg_replace('#'.preg_quote($suffix).'$#u', '', Router::$current_uri);
+
+ // Set the URL suffix
+ Router::$url_suffix = $suffix;
+ }
+
+ // Reduce multiple slashes into single slashes
+ Router::$current_uri = preg_replace('#//+#', '/', Router::$current_uri);
+ }
+ }
+
+ /**
+ * Generates routed URI from given URI.
+ *
+ * @param string URI to convert
+ * @return string Routed uri
+ */
+ public static function routed_uri($uri)
+ {
+ if (Router::$routes === NULL)
+ {
+ // Load routes
+ Router::$routes = Kohana::config('routes');
+ }
+
+ // Prepare variables
+ $routed_uri = $uri = trim($uri, '/');
+
+ if (isset(Router::$routes[$uri]))
+ {
+ // Literal match, no need for regex
+ $routed_uri = Router::$routes[$uri];
+ }
+ else
+ {
+ // Loop through the routes and see if anything matches
+ foreach (Router::$routes as $key => $val)
+ {
+ if ($key === '_default') continue;
+
+ // Trim slashes
+ $key = trim($key, '/');
+ $val = trim($val, '/');
+
+ if (preg_match('#^'.$key.'$#u', $uri))
+ {
+ if (strpos($val, '$') !== FALSE)
+ {
+ // Use regex routing
+ $routed_uri = preg_replace('#^'.$key.'$#u', $val, $uri);
+ }
+ else
+ {
+ // Standard routing
+ $routed_uri = $val;
+ }
+
+ // A valid route has been found
+ break;
+ }
+ }
+ }
+
+ if (isset(Router::$routes[$routed_uri]))
+ {
+ // Check for double routing (without regex)
+ $routed_uri = Router::$routes[$routed_uri];
+ }
+
+ return trim($routed_uri, '/');
+ }
+
+} // End Router
\ No newline at end of file
diff --git a/system/libraries/Session.php b/system/libraries/Session.php
new file mode 100644
index 0000000..e57908e
--- /dev/null
+++ b/system/libraries/Session.php
@@ -0,0 +1,500 @@
+ session_id(), ':new_session:' => $session_id));
+ }
+
+ return Session::$instance;
+ }
+
+ /**
+ * Be sure to block the use of __clone.
+ */
+ private function __clone(){}
+
+ /**
+ * On first session instance creation, sets up the driver and creates session.
+ *
+ * @param string Force a specific session_id
+ */
+ protected function __construct($session_id = NULL)
+ {
+ $this->input = Input::instance();
+
+ // This part only needs to be run once
+ if (Session::$instance === NULL)
+ {
+ // Load config
+ Session::$config = Kohana::config('session');
+
+ // Makes a mirrored array, eg: foo=foo
+ Session::$protect = array_combine(Session::$protect, Session::$protect);
+
+ // Configure garbage collection
+ ini_set('session.gc_probability', (int) Session::$config['gc_probability']);
+ ini_set('session.gc_divisor', 100);
+ ini_set('session.gc_maxlifetime', (Session::$config['expiration'] == 0) ? 86400 : Session::$config['expiration']);
+
+ // Create a new session
+ $this->create(NULL, $session_id);
+
+ if (Session::$config['regenerate'] > 0 AND ($_SESSION['total_hits'] % Session::$config['regenerate']) === 0)
+ {
+ // Regenerate session id and update session cookie
+ $this->regenerate();
+ }
+ else
+ {
+ // Always update session cookie to keep the session alive
+ cookie::set(Session::$config['name'], $_SESSION['session_id'], Session::$config['expiration']);
+ }
+
+ // Close the session on system shutdown (run before sending the headers), so that
+ // the session cookie(s) can be written.
+ Event::add('system.shutdown', array($this, 'write_close'));
+
+ // Singleton instance
+ Session::$instance = $this;
+ }
+
+ Kohana_Log::add('debug', 'Session Library initialized');
+ }
+
+ /**
+ * Get the session id.
+ *
+ * @return string
+ */
+ public function id()
+ {
+ return $_SESSION['session_id'];
+ }
+
+ /**
+ * Create a new session.
+ *
+ * @param array variables to set after creation
+ * @param string Force a specific session_id
+ * @return void
+ */
+ public function create($vars = NULL, $session_id = NULL)
+ {
+ // Destroy any current sessions
+ $this->destroy();
+
+ if (Session::$config['driver'] !== 'native')
+ {
+ // Set driver name
+ $driver = 'Session_'.ucfirst(Session::$config['driver']).'_Driver';
+
+ // Load the driver
+ if ( ! Kohana::auto_load($driver))
+ throw new Kohana_Exception('The :driver: driver for the :library: library could not be found',
+ array(':driver:' => Session::$config['driver'], ':library:' => get_class($this)));
+
+ // Initialize the driver
+ Session::$driver = new $driver();
+
+ // Validate the driver
+ if ( ! (Session::$driver instanceof Session_Driver))
+ throw new Kohana_Exception('The :driver: driver for the :library: library must implement the :interface: interface',
+ array(':driver:' => Session::$config['driver'], ':library:' => get_class($this), ':interface:' => 'Session_Driver'));
+
+ // Register non-native driver as the session handler
+ session_set_save_handler
+ (
+ array(Session::$driver, 'open'),
+ array(Session::$driver, 'close'),
+ array(Session::$driver, 'read'),
+ array(Session::$driver, 'write'),
+ array(Session::$driver, 'destroy'),
+ array(Session::$driver, 'gc')
+ );
+ }
+
+ // Validate the session name
+ if ( ! preg_match('~^(?=.*[a-z])[a-z0-9_]++$~iD', Session::$config['name']))
+ throw new Kohana_Exception('The session_name, :session:, is invalid. It must contain only alphanumeric characters and underscores. Also at least one letter must be present.', array(':session:' => Session::$config['name']));
+
+ // Name the session, this will also be the name of the cookie
+ session_name(Session::$config['name']);
+
+ // Set the session cookie parameters
+ session_set_cookie_params
+ (
+ Session::$config['expiration'],
+ Kohana::config('cookie.path'),
+ Kohana::config('cookie.domain'),
+ Kohana::config('cookie.secure'),
+ Kohana::config('cookie.httponly')
+ );
+
+ $cookie = cookie::get(Session::$config['name']);
+
+ if ($session_id === NULL)
+ {
+ // Reopen session from signed cookie value.
+ $session_id = $cookie;
+ }
+
+ // Reopen an existing session if supplied
+ if ( ! is_null($session_id))
+ {
+ session_id($session_id);
+ }
+
+ // Start the session!
+ session_start();
+
+ // Put session_id in the session variable
+ $_SESSION['session_id'] = session_id();
+
+ // Set defaults
+ if ( ! isset($_SESSION['_kf_flash_']))
+ {
+ $_SESSION['total_hits'] = 0;
+ $_SESSION['_kf_flash_'] = array();
+
+ $_SESSION['user_agent'] = request::user_agent();
+ $_SESSION['ip_address'] = $this->input->ip_address();
+ }
+
+ // Set up flash variables
+ Session::$flash =& $_SESSION['_kf_flash_'];
+
+ // Increase total hits
+ $_SESSION['total_hits'] += 1;
+
+ // Validate data only on hits after one
+ if ($_SESSION['total_hits'] > 1)
+ {
+ // Validate the session
+ foreach (Session::$config['validate'] as $valid)
+ {
+ switch ($valid)
+ {
+ // Check user agent for consistency
+ case 'user_agent':
+ if ($_SESSION[$valid] !== request::user_agent())
+ return $this->create();
+ break;
+
+ // Check ip address for consistency
+ case 'ip_address':
+ if ($_SESSION[$valid] !== $this->input->$valid())
+ return $this->create();
+ break;
+
+ // Check expiration time to prevent users from manually modifying it
+ case 'expiration':
+ if (time() - $_SESSION['last_activity'] > ini_get('session.gc_maxlifetime'))
+ return $this->create();
+ break;
+ }
+ }
+ }
+
+ // Expire flash keys
+ $this->expire_flash();
+
+ // Update last activity
+ $_SESSION['last_activity'] = time();
+
+ // Set the new data
+ Session::set($vars);
+ }
+
+ /**
+ * Regenerates the global session id.
+ *
+ * @return void
+ */
+ public function regenerate()
+ {
+ if (Session::$config['driver'] === 'native')
+ {
+ // Generate a new session id
+ // Note: also sets a new session cookie with the updated id
+ session_regenerate_id(TRUE);
+
+ // Update session with new id
+ $_SESSION['session_id'] = session_id();
+ }
+ else
+ {
+ // Pass the regenerating off to the driver in case it wants to do anything special
+ $_SESSION['session_id'] = Session::$driver->regenerate();
+ }
+
+ // Get the session name
+ $name = session_name();
+
+ if (isset($_COOKIE[$name]))
+ {
+ // Change the cookie value to match the new session id to prevent "lag"
+ cookie::set($name, $_SESSION['session_id']);
+ }
+ }
+
+ /**
+ * Destroys the current session.
+ *
+ * @return void
+ */
+ public function destroy()
+ {
+ if (session_id() !== '')
+ {
+ // Get the session name
+ $name = session_name();
+
+ // Destroy the session
+ session_destroy();
+
+ // Re-initialize the array
+ $_SESSION = array();
+
+ // Delete the session cookie
+ cookie::delete($name);
+ }
+ }
+
+ /**
+ * Runs the system.session_write event, then calls session_write_close.
+ *
+ * @return void
+ */
+ public function write_close()
+ {
+ static $run;
+
+ if ($run === NULL)
+ {
+ $run = TRUE;
+
+ // Run the events that depend on the session being open
+ Event::run('system.session_write');
+
+ // Expire flash keys
+ $this->expire_flash();
+
+ // Close the session
+ session_write_close();
+ }
+ }
+
+ /**
+ * Set a session variable.
+ *
+ * @param string|array key, or array of values
+ * @param mixed value (if keys is not an array)
+ * @return void
+ */
+ public function set($keys, $val = FALSE)
+ {
+ if (empty($keys))
+ return FALSE;
+
+ if ( ! is_array($keys))
+ {
+ $keys = array($keys => $val);
+ }
+
+ foreach ($keys as $key => $val)
+ {
+ if (isset(Session::$protect[$key]))
+ continue;
+
+ // Set the key
+ $_SESSION[$key] = $val;
+ }
+ }
+
+ /**
+ * Set a flash variable.
+ *
+ * @param string|array key, or array of values
+ * @param mixed value (if keys is not an array)
+ * @return void
+ */
+ public function set_flash($keys, $val = FALSE)
+ {
+ if (empty($keys))
+ return FALSE;
+
+ if ( ! is_array($keys))
+ {
+ $keys = array($keys => $val);
+ }
+
+ foreach ($keys as $key => $val)
+ {
+ if ($key == FALSE)
+ continue;
+
+ Session::$flash[$key] = 'new';
+ Session::set($key, $val);
+ }
+ }
+
+ /**
+ * Freshen one, multiple or all flash variables.
+ *
+ * @param string variable key(s)
+ * @return void
+ */
+ public function keep_flash($keys = NULL)
+ {
+ $keys = ($keys === NULL) ? array_keys(Session::$flash) : func_get_args();
+
+ foreach ($keys as $key)
+ {
+ if (isset(Session::$flash[$key]))
+ {
+ Session::$flash[$key] = 'new';
+ }
+ }
+ }
+
+ /**
+ * Expires old flash data and removes it from the session.
+ *
+ * @return void
+ */
+ public function expire_flash()
+ {
+ static $run;
+
+ // Method can only be run once
+ if ($run === TRUE)
+ return;
+
+ if ( ! empty(Session::$flash))
+ {
+ foreach (Session::$flash as $key => $state)
+ {
+ if ($state === 'old')
+ {
+ // Flash has expired
+ unset(Session::$flash[$key], $_SESSION[$key]);
+ }
+ else
+ {
+ // Flash will expire
+ Session::$flash[$key] = 'old';
+ }
+ }
+ }
+
+ // Method has been run
+ $run = TRUE;
+ }
+
+ /**
+ * Get a variable. Access to sub-arrays is supported with key.subkey.
+ *
+ * @param string variable key
+ * @param mixed default value returned if variable does not exist
+ * @return mixed Variable data if key specified, otherwise array containing all session data.
+ */
+ public function get($key = FALSE, $default = FALSE)
+ {
+ if (empty($key))
+ return $_SESSION;
+
+ $result = isset($_SESSION[$key]) ? $_SESSION[$key] : Kohana::key_string($_SESSION, $key);
+
+ return ($result === NULL) ? $default : $result;
+ }
+
+ /**
+ * Get a variable, and delete it.
+ *
+ * @param string variable key
+ * @param mixed default value returned if variable does not exist
+ * @return mixed
+ */
+ public function get_once($key, $default = FALSE)
+ {
+ $return = Session::get($key, $default);
+ Session::delete($key);
+
+ return $return;
+ }
+
+ /**
+ * Delete one or more variables.
+ *
+ * @param string variable key(s)
+ * @return void
+ */
+ public function delete($keys)
+ {
+ $args = func_get_args();
+
+ foreach ($args as $key)
+ {
+ if (isset(Session::$protect[$key]))
+ continue;
+
+ // Unset the key
+ unset($_SESSION[$key]);
+ }
+ }
+
+ /**
+ * Do not save this session.
+ * This is a performance feature only, if using the native
+ * session "driver" the save will NOT be aborted.
+ *
+ * @return void
+ */
+ public function abort_save()
+ {
+ Session::$should_save = FALSE;
+ }
+
+} // End Session Class
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
new file mode 100644
index 0000000..16d101a
--- /dev/null
+++ b/system/libraries/URI.php
@@ -0,0 +1,279 @@
+build_array(URI::$segments, $offset, $associative);
+ }
+
+ /**
+ * Returns an array containing all the re-routed URI segments.
+ *
+ * @param integer rsegment offset
+ * @param boolean return an associative array
+ * @return array
+ */
+ public function rsegment_array($offset = 0, $associative = FALSE)
+ {
+ return $this->build_array(URI::$rsegments, $offset, $associative);
+ }
+
+ /**
+ * Returns an array containing all the URI arguments.
+ *
+ * @param integer segment offset
+ * @param boolean return an associative array
+ * @return array
+ */
+ public function argument_array($offset = 0, $associative = FALSE)
+ {
+ return $this->build_array(URI::$arguments, $offset, $associative);
+ }
+
+ /**
+ * Creates a simple or associative array from an array and an offset.
+ * Used as a helper for (r)segment_array and argument_array.
+ *
+ * @param array array to rebuild
+ * @param integer offset to start from
+ * @param boolean create an associative array
+ * @return array
+ */
+ public function build_array($array, $offset = 0, $associative = FALSE)
+ {
+ // Prevent the keys from being improperly indexed
+ array_unshift($array, 0);
+
+ // Slice the array, preserving the keys
+ $array = array_slice($array, $offset + 1, count($array) - 1, TRUE);
+
+ if ($associative === FALSE)
+ return $array;
+
+ $associative = array();
+ $pairs = array_chunk($array, 2);
+
+ foreach ($pairs as $pair)
+ {
+ // Add the key/value pair to the associative array
+ $associative[$pair[0]] = isset($pair[1]) ? $pair[1] : '';
+ }
+
+ return $associative;
+ }
+
+ /**
+ * Returns the complete URI as a string.
+ *
+ * @return string
+ */
+ public function string()
+ {
+ return URI::$current_uri;
+ }
+
+ /**
+ * Magic method for converting an object to a string.
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return URI::$current_uri;
+ }
+
+ /**
+ * Returns the total number of URI segments.
+ *
+ * @return integer
+ */
+ public function total_segments()
+ {
+ return count(URI::$segments);
+ }
+
+ /**
+ * Returns the total number of re-routed URI segments.
+ *
+ * @return integer
+ */
+ public function total_rsegments()
+ {
+ return count(URI::$rsegments);
+ }
+
+ /**
+ * Returns the total number of URI arguments.
+ *
+ * @return integer
+ */
+ public function total_arguments()
+ {
+ return count(URI::$arguments);
+ }
+
+ /**
+ * Returns the last URI segment.
+ *
+ * @param mixed default value returned if segment does not exist
+ * @return string
+ */
+ public function last_segment($default = FALSE)
+ {
+ if (($end = $this->total_segments()) < 1)
+ return $default;
+
+ return URI::$segments[$end - 1];
+ }
+
+ /**
+ * Returns the last re-routed URI segment.
+ *
+ * @param mixed default value returned if segment does not exist
+ * @return string
+ */
+ public function last_rsegment($default = FALSE)
+ {
+ if (($end = $this->total_segments()) < 1)
+ return $default;
+
+ return URI::$rsegments[$end - 1];
+ }
+
+ /**
+ * Returns the path to the current controller (not including the actual
+ * controller), as a web path.
+ *
+ * @param boolean return a full url, or only the path specifically
+ * @return string
+ */
+ public function controller_path($full = TRUE)
+ {
+ return ($full) ? url::site(URI::$controller_path) : URI::$controller_path;
+ }
+
+ /**
+ * Returns the current controller, as a web path.
+ *
+ * @param boolean return a full url, or only the controller specifically
+ * @return string
+ */
+ public function controller($full = TRUE)
+ {
+ return ($full) ? url::site(URI::$controller_path.URI::$controller) : URI::$controller;
+ }
+
+ /**
+ * Returns the current method, as a web path.
+ *
+ * @param boolean return a full url, or only the method specifically
+ * @return string
+ */
+ public function method($full = TRUE)
+ {
+ return ($full) ? url::site(URI::$controller_path.URI::$controller.'/'.URI::$method) : URI::$method;
+ }
+
+} // End URI Class
diff --git a/system/libraries/Validation.php b/system/libraries/Validation.php
new file mode 100644
index 0000000..9917fbb
--- /dev/null
+++ b/system/libraries/Validation.php
@@ -0,0 +1,815 @@
+errors = array();
+ $this->messages = array();
+ }
+
+ /**
+ * Create a copy of the current validation rules and change the array.
+ *
+ * @chainable
+ * @param array new array to validate
+ * @return Validation
+ */
+ public function copy(array $array)
+ {
+ $copy = clone $this;
+
+ $copy->exchangeArray($array);
+
+ return $copy;
+ }
+
+ /**
+ * Returns an array of all the field names that have filters, rules, or callbacks.
+ *
+ * @return array
+ */
+ public function field_names()
+ {
+ // All the fields that are being validated
+ $fields = array_keys(array_merge
+ (
+ $this->pre_filters,
+ $this->rules,
+ $this->callbacks,
+ $this->post_filters
+ ));
+
+ // Remove wildcard fields
+ $fields = array_diff($fields, array('*'));
+
+ return $fields;
+ }
+
+ /**
+ * Returns the array values of the current object.
+ *
+ * @return array
+ */
+ public function as_array()
+ {
+ return $this->getArrayCopy();
+ }
+
+ /**
+ * Returns the ArrayObject values, removing all inputs without rules.
+ * To choose specific inputs, list the field name as arguments.
+ *
+ * @param boolean return only fields with filters, rules, and callbacks
+ * @return array
+ */
+ public function safe_array()
+ {
+ // Load choices
+ $choices = func_get_args();
+ $choices = empty($choices) ? NULL : array_combine($choices, $choices);
+
+ // Get field names
+ $fields = $this->field_names();
+
+ $safe = array();
+ foreach ($fields as $field)
+ {
+ if ($choices === NULL OR isset($choices[$field]))
+ {
+ if (isset($this[$field]))
+ {
+ $value = $this[$field];
+
+ if (is_object($value))
+ {
+ // Convert the value back into an array
+ $value = $value->getArrayCopy();
+ }
+ }
+ else
+ {
+ // Even if the field is not in this array, it must be set
+ $value = NULL;
+ }
+
+ // Add the field to the array
+ $safe[$field] = $value;
+ }
+ }
+
+ return $safe;
+ }
+
+ /**
+ * Add additional rules that will forced, even for empty fields. All arguments
+ * passed will be appended to the list.
+ *
+ * @chainable
+ * @param string rule name
+ * @return object
+ */
+ public function allow_empty_rules($rules)
+ {
+ // Any number of args are supported
+ $rules = func_get_args();
+
+ // Merge the allowed rules
+ $this->empty_rules = array_merge($this->empty_rules, $rules);
+
+ return $this;
+ }
+
+ /**
+ * Sets or overwrites the label name for a field.
+ *
+ * @param string field name
+ * @param string label
+ * @return $this
+ */
+ public function label($field, $label = NULL)
+ {
+ if ($label === NULL AND ($field !== TRUE OR $field !== '*') AND ! isset($this->labels[$field]))
+ {
+ // Set the field label to the field name
+ $this->labels[$field] = ucfirst(preg_replace('/[^\pL]+/u', ' ', $field));
+ }
+ elseif ($label !== NULL)
+ {
+ // Set the label for this field
+ $this->labels[$field] = $label;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Sets labels using an array.
+ *
+ * @param array list of field => label names
+ * @return $this
+ */
+ public function labels(array $labels)
+ {
+ $this->labels = $labels + $this->labels;
+
+ return $this;
+ }
+
+ /**
+ * Converts a filter, rule, or callback into a fully-qualified callback array.
+ *
+ * @return mixed
+ */
+ protected function callback($callback)
+ {
+ if (is_string($callback))
+ {
+ if (strpos($callback, '::') !== FALSE)
+ {
+ $callback = explode('::', $callback);
+ }
+ elseif (function_exists($callback))
+ {
+ // No need to check if the callback is a method
+ $callback = $callback;
+ }
+ elseif (method_exists($this, $callback))
+ {
+ // The callback exists in Validation
+ $callback = array($this, $callback);
+ }
+ elseif (method_exists('valid', $callback))
+ {
+ // The callback exists in valid::
+ $callback = array('valid', $callback);
+ }
+ }
+
+ if ( ! is_callable($callback, FALSE))
+ {
+ if (is_array($callback))
+ {
+ if (is_object($callback[0]))
+ {
+ // Object instance syntax
+ $name = get_class($callback[0]).'->'.$callback[1];
+ }
+ else
+ {
+ // Static class syntax
+ $name = $callback[0].'::'.$callback[1];
+ }
+ }
+ else
+ {
+ // Function syntax
+ $name = $callback;
+ }
+
+ throw new Kohana_Exception('Callback %name% used for Validation is not callable', array('%name%' => $name));
+ }
+
+ return $callback;
+ }
+
+ /**
+ * Add a pre-filter to one or more inputs. Pre-filters are applied before
+ * rules or callbacks are executed.
+ *
+ * @chainable
+ * @param callback filter
+ * @param string fields to apply filter to, use TRUE for all fields
+ * @return object
+ */
+ public function pre_filter($filter, $field = TRUE)
+ {
+ if ($field === TRUE OR $field === '*')
+ {
+ // Use wildcard
+ $fields = array('*');
+ }
+ else
+ {
+ // Add the filter to specific inputs
+ $fields = func_get_args();
+ $fields = array_slice($fields, 1);
+ }
+
+ // Convert to a proper callback
+ $filter = $this->callback($filter);
+
+ foreach ($fields as $field)
+ {
+ // Add the filter to specified field
+ $this->pre_filters[$field][] = $filter;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add a post-filter to one or more inputs. Post-filters are applied after
+ * rules and callbacks have been executed.
+ *
+ * @chainable
+ * @param callback filter
+ * @param string fields to apply filter to, use TRUE for all fields
+ * @return object
+ */
+ public function post_filter($filter, $field = TRUE)
+ {
+ if ($field === TRUE)
+ {
+ // Use wildcard
+ $fields = array('*');
+ }
+ else
+ {
+ // Add the filter to specific inputs
+ $fields = func_get_args();
+ $fields = array_slice($fields, 1);
+ }
+
+ // Convert to a proper callback
+ $filter = $this->callback($filter);
+
+ foreach ($fields as $field)
+ {
+ // Add the filter to specified field
+ $this->post_filters[$field][] = $filter;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add rules to a field. Validation rules may only return TRUE or FALSE and
+ * can not manipulate the value of a field.
+ *
+ * @chainable
+ * @param string field name
+ * @param callback rules (one or more arguments)
+ * @return object
+ */
+ public function add_rules($field, $rules)
+ {
+ // Get the rules
+ $rules = func_get_args();
+ $rules = array_slice($rules, 1);
+
+ // Set a default field label
+ $this->label($field);
+
+ if ($field === TRUE)
+ {
+ // Use wildcard
+ $field = '*';
+ }
+
+ foreach ($rules as $rule)
+ {
+ // Arguments for rule
+ $args = NULL;
+
+ // False rule
+ $false_rule = FALSE;
+
+ $rule_tmp = trim(is_string($rule) ? $rule : $rule[1]);
+
+ // Should the rule return false?
+ if ($rule_tmp !== ($rule_name = ltrim($rule_tmp, '! ')))
+ {
+ $false_rule = TRUE;
+ }
+
+ if (is_string($rule))
+ {
+ // Use the updated rule name
+ $rule = $rule_name;
+
+ // Have arguments?
+ if (preg_match('/^([^\[]++)\[(.+)\]$/', $rule, $matches))
+ {
+ // Split the rule into the function and args
+ $rule = $matches[1];
+ $args = preg_split('/(?array_fields[$field] = $field;
+ }
+
+ // Convert to a proper callback
+ $rule = $this->callback($rule);
+
+ // Add the rule, with args, to the field
+ $this->rules[$field][] = array($rule, $args, $false_rule);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add callbacks to a field. Callbacks must accept the Validation object
+ * and the input name. Callback returns are not processed.
+ *
+ * @chainable
+ * @param string field name
+ * @param callbacks callbacks (unlimited number)
+ * @return object
+ */
+ public function add_callbacks($field, $callbacks)
+ {
+ // Get all callbacks as an array
+ $callbacks = func_get_args();
+ $callbacks = array_slice($callbacks, 1);
+
+ // Set a default field label
+ $this->label($field);
+
+ if ($field === TRUE)
+ {
+ // Use wildcard
+ $field = '*';
+ }
+
+ foreach ($callbacks as $callback)
+ {
+ // Convert to a proper callback
+ $callback = $this->callback($callback);
+
+ // Add the callback to specified field
+ $this->callbacks[$field][] = $callback;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Validate by processing pre-filters, rules, callbacks, and post-filters.
+ * All fields that have filters, rules, or callbacks will be initialized if
+ * they are undefined. Validation will only be run if there is data already
+ * in the array.
+ *
+ * @param object Validation object, used only for recursion
+ * @param object name of field for errors
+ * @return bool
+ */
+ public function validate($object = NULL, $field_name = NULL)
+ {
+ if ($object === NULL)
+ {
+ // Use the current object
+ $object = $this;
+ }
+
+ $array = $this->safe_array();
+
+ // Get all defined field names
+ $fields = array_keys($array);
+
+ foreach ($this->pre_filters as $field => $callbacks)
+ {
+ foreach ($callbacks as $callback)
+ {
+ if ($field === '*')
+ {
+ foreach ($fields as $f)
+ {
+ $array[$f] = is_array($array[$f]) ? array_map($callback, $array[$f]) : call_user_func($callback, $array[$f]);
+ }
+ }
+ else
+ {
+ $array[$field] = is_array($array[$field]) ? array_map($callback, $array[$field]) : call_user_func($callback, $array[$field]);
+ }
+ }
+ }
+
+ foreach ($this->rules as $field => $callbacks)
+ {
+ foreach ($callbacks as $callback)
+ {
+ // Separate the callback, arguments and is false bool
+ list ($callback, $args, $is_false) = $callback;
+
+ // Function or method name of the rule
+ $rule = is_array($callback) ? $callback[1] : $callback;
+
+ if ($field === '*')
+ {
+ foreach ($fields as $f)
+ {
+ // Note that continue, instead of break, is used when
+ // applying rules using a wildcard, so that all fields
+ // will be validated.
+
+ if (isset($this->errors[$f]))
+ {
+ // Prevent other rules from being evaluated if an error has occurred
+ continue;
+ }
+
+ if (empty($array[$f]) AND ! in_array($rule, $this->empty_rules))
+ {
+ // This rule does not need to be processed on empty fields
+ continue;
+ }
+
+ $result = ($args === NULL) ? call_user_func($callback, $array[$f]) : call_user_func($callback, $array[$f], $args);
+
+ if (($result == $is_false))
+ {
+ $this->add_error($f, $rule, $args);
+
+ // Stop validating this field when an error is found
+ continue;
+ }
+ }
+ }
+ else
+ {
+ if (isset($this->errors[$field]))
+ {
+ // Prevent other rules from being evaluated if an error has occurred
+ break;
+ }
+
+ if ( ! in_array($rule, $this->empty_rules) AND ! $this->required($array[$field]))
+ {
+ // This rule does not need to be processed on empty fields
+ continue;
+ }
+
+ // Results of our test
+ $result = ($args === NULL) ? call_user_func($callback, $array[$field]) : call_user_func($callback, $array[$field], $args);
+
+ if (($result == $is_false))
+ {
+ $rule = $is_false ? '!'.$rule : $rule;
+ $this->add_error($field, $rule, $args);
+
+ // Stop validating this field when an error is found
+ break;
+ }
+ }
+ }
+ }
+
+ foreach ($this->callbacks as $field => $callbacks)
+ {
+ foreach ($callbacks as $callback)
+ {
+ if ($field === '*')
+ {
+ foreach ($fields as $f)
+ {
+ // Note that continue, instead of break, is used when
+ // applying rules using a wildcard, so that all fields
+ // will be validated.
+
+ if (isset($this->errors[$f]))
+ {
+ // Stop validating this field when an error is found
+ continue;
+ }
+
+ call_user_func($callback, $this, $f);
+ }
+ }
+ else
+ {
+ if (isset($this->errors[$field]))
+ {
+ // Stop validating this field when an error is found
+ break;
+ }
+
+ call_user_func($callback, $this, $field);
+ }
+ }
+ }
+
+ foreach ($this->post_filters as $field => $callbacks)
+ {
+ foreach ($callbacks as $callback)
+ {
+ if ($field === '*')
+ {
+ foreach ($fields as $f)
+ {
+ $array[$f] = is_array($array[$f]) ? array_map($callback, $array[$f]) : call_user_func($callback, $array[$f]);
+ }
+ }
+ else
+ {
+ $array[$field] = is_array($array[$field]) ? array_map($callback, $array[$field]) : call_user_func($callback, $array[$field]);
+ }
+ }
+ }
+
+ // Swap the array back into the object
+ $this->exchangeArray($array);
+
+ // Return TRUE if there are no errors
+ return $this->errors === array();
+ }
+
+ /**
+ * Add an error to an input.
+ *
+ * @chainable
+ * @param string input name
+ * @param string unique error name
+ * @param string arguments to pass to lang file
+ * @return object
+ */
+ public function add_error($field, $name, $args = NULL)
+ {
+ $this->errors[$field] = array($name, $args);
+
+ return $this;
+ }
+
+ /**
+ * Return the errors array.
+ *
+ * @param boolean load errors from a message file
+ * @return array
+ */
+ public function errors($file = NULL)
+ {
+ if ($file === NULL)
+ {
+ $errors = array();
+ foreach($this->errors as $field => $error)
+ {
+ $errors[$field] = $error[0];
+ }
+ return $errors;
+ }
+ else
+ {
+ $errors = array();
+ foreach ($this->errors as $input => $error)
+ {
+ // Locations to check for error messages
+ $error_locations = array
+ (
+ "validation/{$file}.{$input}.{$error[0]}",
+ "validation/{$file}.{$input}.default",
+ "validation/default.{$error[0]}"
+ );
+
+ if (($message = Kohana::message($error_locations[0])) !== $error_locations[0])
+ {
+ // Found a message for this field and error
+ }
+ elseif (($message = Kohana::message($error_locations[1])) !== $error_locations[1])
+ {
+ // Found a default message for this field
+ }
+ elseif (($message = Kohana::message($error_locations[2])) !== $error_locations[2])
+ {
+ // Found a default message for this error
+ }
+ else
+ {
+ // No message exists, display the path expected
+ $message = "validation/{$file}.{$input}.{$error[0]}";
+ }
+
+ // Start the translation values list
+ $values = array(':field' => __($this->labels[$input]));
+
+ if ( ! empty($error[1]))
+ {
+ foreach ($error[1] as $key => $value)
+ {
+ // Add each parameter as a numbered value, starting from 1
+ $values[':param'.($key + 1)] = __($value);
+ }
+ }
+
+ // Translate the message using the default language
+ $errors[$input] = __($message, $values);
+ }
+
+ return $errors;
+ }
+ }
+
+ /**
+ * Rule: required. Generates an error if the field has an empty value.
+ *
+ * @param mixed input value
+ * @return bool
+ */
+ public function required($str)
+ {
+ if (is_object($str) AND $str instanceof ArrayObject)
+ {
+ // Get the array from the ArrayObject
+ $str = $str->getArrayCopy();
+ }
+
+ if (is_array($str))
+ {
+ return ! empty($str);
+ }
+ else
+ {
+ return ! ($str === '' OR $str === NULL OR $str === FALSE);
+ }
+ }
+
+ /**
+ * Rule: matches. Generates an error if the field does not match one or more
+ * other fields.
+ *
+ * @param mixed input value
+ * @param array input names to match against
+ * @return bool
+ */
+ public function matches($str, array $inputs)
+ {
+ foreach ($inputs as $key)
+ {
+ if ($str !== (isset($this[$key]) ? $this[$key] : NULL))
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Rule: length. Generates an error if the field is too long or too short.
+ *
+ * @param mixed input value
+ * @param array minimum, maximum, or exact length to match
+ * @return bool
+ */
+ public function length($str, array $length)
+ {
+ if ( ! is_string($str))
+ return FALSE;
+
+ $size = mb_strlen($str);
+ $status = FALSE;
+
+ if (count($length) > 1)
+ {
+ list ($min, $max) = $length;
+
+ if ($size >= $min AND $size <= $max)
+ {
+ $status = TRUE;
+ }
+ }
+ else
+ {
+ $status = ($size === (int) $length[0]);
+ }
+
+ return $status;
+ }
+
+ /**
+ * Rule: depends_on. Generates an error if the field does not depend on one
+ * or more other fields.
+ *
+ * @param mixed field name
+ * @param array field names to check dependency
+ * @return bool
+ */
+ public function depends_on($field, array $fields)
+ {
+ foreach ($fields as $depends_on)
+ {
+ if ( ! isset($this[$depends_on]) OR $this[$depends_on] == NULL)
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Rule: chars. Generates an error if the field contains characters outside of the list.
+ *
+ * @param string field value
+ * @param array allowed characters
+ * @return bool
+ */
+ public function chars($value, array $chars)
+ {
+ return ! preg_match('![^'.implode('', $chars).']!u', $value);
+ }
+
+} // End Validation
\ No newline at end of file
diff --git a/system/libraries/View.php b/system/libraries/View.php
new file mode 100644
index 0000000..ba482bb
--- /dev/null
+++ b/system/libraries/View.php
@@ -0,0 +1,329 @@
+set_filename($name, $type);
+ }
+
+ if (is_array($data) AND ! empty($data))
+ {
+ // Preload data using array_merge, to allow user extensions
+ $this->kohana_local_data = array_merge($this->kohana_local_data, $data);
+ }
+ }
+
+ /**
+ * Magic method access to test for view property
+ *
+ * @param string View property to test for
+ * @return boolean
+ */
+ public function __isset($key = NULL)
+ {
+ return $this->is_set($key);
+ }
+
+ /**
+ * Sets the view filename.
+ *
+ * @chainable
+ * @param string view filename
+ * @param string view file type
+ * @return object
+ */
+ public function set_filename($name, $type = NULL)
+ {
+ if ($type == NULL)
+ {
+ // Load the filename and set the content type
+ $this->kohana_filename = Kohana::find_file('views', $name, TRUE);
+ $this->kohana_filetype = EXT;
+ }
+ else
+ {
+ // Check if the filetype is allowed by the configuration
+ if ( ! in_array($type, Kohana::config('view.allowed_filetypes')))
+ throw new Kohana_Exception('The requested filetype, .:type:, is not allowed in your view configuration file', array(':type:' => $type));
+
+ // Load the filename and set the content type
+ $this->kohana_filename = Kohana::find_file('views', $name, TRUE, $type);
+ $this->kohana_filetype = Kohana::config('mimes.'.$type);
+
+ if ($this->kohana_filetype == NULL)
+ {
+ // Use the specified type
+ $this->kohana_filetype = $type;
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Sets a view variable.
+ *
+ * @param string|array name of variable or an array of variables
+ * @param mixed value when using a named variable
+ * @return object
+ */
+ public function set($name, $value = NULL)
+ {
+ if (is_array($name))
+ {
+ foreach ($name as $key => $value)
+ {
+ $this->__set($key, $value);
+ }
+ }
+ else
+ {
+ $this->__set($name, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Checks for a property existence in the view locally or globally. Unlike the built in __isset(),
+ * this method can take an array of properties to test simultaneously.
+ *
+ * @param string $key property name to test for
+ * @param array $key array of property names to test for
+ * @return boolean property test result
+ * @return array associative array of keys and boolean test result
+ */
+ public function is_set( $key = FALSE )
+ {
+ // Setup result;
+ $result = FALSE;
+
+ // If key is an array
+ if (is_array($key))
+ {
+ // Set the result to an array
+ $result = array();
+
+ // Foreach key
+ foreach ($key as $property)
+ {
+ // Set the result to an associative array
+ $result[$property] = (array_key_exists($property, $this->kohana_local_data)) ? TRUE : FALSE;
+ }
+ }
+ else
+ {
+ // Otherwise just check one property
+ $result = (array_key_exists($key, $this->kohana_local_data)) ? TRUE : FALSE;
+ }
+
+ // Return the result
+ return $result;
+ }
+
+ /**
+ * Sets a bound variable by reference.
+ *
+ * @param string name of variable
+ * @param mixed variable to assign by reference
+ * @return object
+ */
+ public function bind($name, & $var)
+ {
+ $this->kohana_local_data[$name] =& $var;
+
+ return $this;
+ }
+
+ /**
+ * Magically sets a view variable.
+ *
+ * @param string variable key
+ * @param string variable value
+ * @return void
+ */
+ public function __set($key, $value)
+ {
+ $this->kohana_local_data[$key] = $value;
+ }
+
+ /**
+ * Magically gets a view variable.
+ *
+ * @param string variable key
+ * @return mixed variable value if the key is found
+ * @return void if the key is not found
+ */
+ public function &__get($key)
+ {
+ if (isset($this->kohana_local_data[$key]))
+ {
+ return $this->kohana_local_data[$key];
+ }
+ elseif (isset($this->$key))
+ {
+ return $this->$key;
+ }
+ else
+ {
+ throw new Kohana_Exception('Undefined view variable: :var',
+ array(':var' => $key));
+ }
+ }
+
+ /**
+ * Magically converts view object to string.
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ try
+ {
+ return $this->render();
+ }
+ catch (Exception $e)
+ {
+ Kohana_Exception::handle($e);
+ return (string) '';
+ }
+ }
+
+ /**
+ * Renders a view.
+ *
+ * @param boolean set to TRUE to echo the output instead of returning it
+ * @param callback special renderer to pass the output through
+ * @param callback modifier to pass the data through before rendering
+ * @return string if print is FALSE
+ * @return void if print is TRUE
+ */
+ public function render($print = FALSE, $renderer = FALSE, $modifier = FALSE)
+ {
+ if (empty($this->kohana_filename))
+ throw new Kohana_Exception('You must set the the view filename before calling render');
+
+ if (is_string($this->kohana_filetype))
+ {
+ // Merge global and local data, local overrides global with the same name
+ $data = $this->kohana_local_data;
+
+ if ($modifier !== FALSE AND is_callable($modifier, TRUE))
+ {
+ // Pass the data through the user defined modifier
+ $data = call_user_func($modifier, $data);
+ }
+
+ $output = $this->load_view($this->kohana_filename, $data);
+
+ if ($renderer !== FALSE AND is_callable($renderer, TRUE))
+ {
+ // Pass the output through the user defined renderer
+ $output = call_user_func($renderer, $output);
+ }
+
+ if ($print === TRUE)
+ {
+ // Display the output
+ echo $output;
+ return;
+ }
+ }
+ else
+ {
+ // Set the content type and size
+ header('Content-Type: '.$this->kohana_filetype[0]);
+
+ if ($print === TRUE)
+ {
+ if ($file = fopen($this->kohana_filename, 'rb'))
+ {
+ // Display the output
+ fpassthru($file);
+ fclose($file);
+ }
+ return;
+ }
+
+ // Fetch the file contents
+ $output = file_get_contents($this->kohana_filename);
+ }
+
+ return $output;
+ }
+
+ /**
+ * Includes a View within the controller scope.
+ *
+ * @param string view filename
+ * @param array array of view variables
+ * @return string
+ */
+ public function load_view($kohana_view_filename, $kohana_input_data)
+ {
+ if ($kohana_view_filename == '')
+ return;
+
+ // Buffering on
+ ob_start();
+
+ // Import the view variables to local namespace
+ extract($kohana_input_data, EXTR_SKIP);
+
+ try
+ {
+ include $kohana_view_filename;
+ }
+ catch (Exception $e)
+ {
+ ob_end_clean();
+ throw $e;
+ }
+
+ // Fetch the output and close the buffer
+ return ob_get_clean();
+ }
+} // End View
diff --git a/system/libraries/drivers/Cache.php b/system/libraries/drivers/Cache.php
new file mode 100644
index 0000000..9741509
--- /dev/null
+++ b/system/libraries/drivers/Cache.php
@@ -0,0 +1,42 @@
+config = $config;
+ $this->config['directory'] = str_replace('\\', '/', realpath($this->config['directory'])).'/';
+
+ if ( ! is_dir($this->config['directory']) OR ! is_writable($this->config['directory']))
+ throw new Cache_Exception('The configured cache directory, :directory:, is not writable.', array(':directory:' => $this->config['directory']));
+ }
+
+ /**
+ * Finds an array of files matching the given id or tag.
+ *
+ * @param string cache key or tag
+ * @param bool search for tags
+ * @return array of filenames matching the id or tag
+ */
+ public function exists($keys, $tag = FALSE)
+ {
+ if ($keys === TRUE)
+ {
+ // Find all the files
+ return glob($this->config['directory'].'*~*~*');
+ }
+ elseif ($tag === TRUE)
+ {
+ // Find all the files that have the tag name
+ $paths = array();
+
+ foreach ( (array) $keys as $tag)
+ {
+ $paths = array_merge($paths, glob($this->config['directory'].'*~*'.$tag.'*~*'));
+ }
+
+ // Find all tags matching the given tag
+ $files = array();
+
+ foreach ($paths as $path)
+ {
+ // Split the files
+ $tags = explode('~', basename($path));
+
+ // Find valid tags
+ if (count($tags) !== 3 OR empty($tags[1]))
+ continue;
+
+ // Split the tags by plus signs, used to separate tags
+ $item_tags = explode('+', $tags[1]);
+
+ // Check each supplied tag, and match aginst the tags on each item.
+ foreach ($keys as $tag)
+ {
+ if (in_array($tag, $item_tags))
+ {
+ // Add the file to the array, it has the requested tag
+ $files[] = $path;
+ }
+ }
+ }
+
+ return $files;
+ }
+ else
+ {
+ $paths = array();
+
+ foreach ( (array) $keys as $key)
+ {
+ // Find the file matching the given key
+ $paths = array_merge($paths, glob($this->config['directory'].str_replace(array('/', '\\', ' '), '_', $key).'~*'));
+ }
+
+ return $paths;
+ }
+ }
+
+ public function set($items, $tags = NULL, $lifetime = NULL)
+ {
+ if ($lifetime !== 0)
+ {
+ // File driver expects unix timestamp
+ $lifetime += time();
+ }
+
+
+ if ( ! is_null($tags) AND ! empty($tags))
+ {
+ // Convert the tags into a string list
+ $tags = implode('+', (array) $tags);
+ }
+
+ $success = TRUE;
+
+ foreach ($items as $key => $value)
+ {
+ if (is_resource($value))
+ throw new Cache_Exception('Caching of resources is impossible, because resources cannot be serialised.');
+
+ // Remove old cache file
+ $this->delete($key);
+
+ if ( ! (bool) file_put_contents($this->config['directory'].str_replace(array('/', '\\', ' '), '_', $key).'~'.$tags.'~'.$lifetime, serialize($value)))
+ {
+ $success = FALSE;
+ }
+ }
+
+ return $success;
+ }
+
+ public function get($keys, $single = FALSE)
+ {
+ $items = array();
+
+ if ($files = $this->exists($keys))
+ {
+ // Turn off errors while reading the files
+ $ER = error_reporting(0);
+
+ foreach ($files as $file)
+ {
+ // Validate that the item has not expired
+ if ($this->expired($file))
+ continue;
+
+ list($key, $junk) = explode('~', basename($file), 2);
+
+ if (($data = file_get_contents($file)) !== FALSE)
+ {
+ // Unserialize the data
+ $data = unserialize($data);
+ }
+ else
+ {
+ $data = NULL;
+ }
+
+ $items[$key] = $data;
+ }
+
+ // Turn errors back on
+ error_reporting($ER);
+ }
+
+ // Reutrn a single item if only one key was requested
+ if ($single)
+ {
+ return (count($items) > 0) ? current($items) : NULL;
+ }
+ else
+ {
+ return $items;
+ }
+ }
+
+ /**
+ * Get cache items by tag
+ */
+ public function get_tag($tags)
+ {
+ // An array will always be returned
+ $result = array();
+
+ if ($paths = $this->exists($tags, TRUE))
+ {
+ // Find all the files with the given tag
+ foreach ($paths as $path)
+ {
+ // Get the id from the filename
+ list($key, $junk) = explode('~', basename($path), 2);
+
+ if (($data = $this->get($key, TRUE)) !== FALSE)
+ {
+ // Add the result to the array
+ $result[$key] = $data;
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Delete cache items by keys or tags
+ */
+ public function delete($keys, $tag = FALSE)
+ {
+ $success = TRUE;
+
+ $paths = $this->exists($keys, $tag);
+
+ // Disable all error reporting while deleting
+ $ER = error_reporting(0);
+
+ foreach ($paths as $path)
+ {
+ // Remove the cache file
+ if ( ! unlink($path))
+ {
+ Kohana_Log::add('error', 'Cache: Unable to delete cache file: '.$path);
+ $success = FALSE;
+ }
+ }
+
+ // Turn on error reporting again
+ error_reporting($ER);
+
+ return $success;
+ }
+
+ /**
+ * Delete cache items by tag
+ */
+ public function delete_tag($tags)
+ {
+ return $this->delete($tags, TRUE);
+ }
+
+ /**
+ * Empty the cache
+ */
+ public function delete_all()
+ {
+ return $this->delete(TRUE);
+ }
+
+ /**
+ * Check if a cache file has expired by filename.
+ *
+ * @param string|array array of filenames
+ * @return bool
+ */
+ protected function expired($file)
+ {
+ // Get the expiration time
+ $expires = (int) substr($file, strrpos($file, '~') + 1);
+
+ // Expirations of 0 are "never expire"
+ return ($expires !== 0 AND $expires <= time());
+ }
+} // End Cache Memcache Driver
diff --git a/system/libraries/drivers/Cache/Memcache.php b/system/libraries/drivers/Cache/Memcache.php
new file mode 100644
index 0000000..13d61d8
--- /dev/null
+++ b/system/libraries/drivers/Cache/Memcache.php
@@ -0,0 +1,132 @@
+config = $config;
+ $this->backend = new Memcache;
+
+ $this->flags = (isset($config['compression']) AND $config['compression']) ? MEMCACHE_COMPRESSED : FALSE;
+
+ foreach ($config['servers'] as $server)
+ {
+ // Make sure all required keys are set
+ $server += array('host' => '127.0.0.1',
+ 'port' => 11211,
+ 'persistent' => FALSE,
+ 'weight' => 1,
+ 'timeout' => 1,
+ 'retry_interval' => 15
+ );
+
+ // Add the server to the pool
+ $this->backend->addServer($server['host'], $server['port'], (bool) $server['persistent'], (int) $server['weight'], (int) $server['timeout'], (int) $server['retry_interval'], TRUE, array($this,'_memcache_failure_callback'));
+ }
+ }
+
+ public function _memcache_failure_callback($host, $port)
+ {
+ $this->backend->setServerParams($host, $port, 1, -1, FALSE);
+ Kohana_Log::add('error', __('Cache: Memcache server down: :host:::port:',array(':host:' => $host,':port:' => $port)));
+ }
+
+ public function set($items, $tags = NULL, $lifetime = NULL)
+ {
+ if ($lifetime !== 0)
+ {
+ // Memcache driver expects unix timestamp
+ $lifetime += time();
+ }
+
+ if ($tags !== NULL)
+ throw new Cache_Exception('Memcache driver does not support tags');
+
+ foreach ($items as $key => $value)
+ {
+ if (is_resource($value))
+ throw new Cache_Exception('Caching of resources is impossible, because resources cannot be serialised.');
+
+ if ( ! $this->backend->set($key, $value, $this->flags, $lifetime))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ }
+
+ public function get($keys, $single = FALSE)
+ {
+ $items = $this->backend->get($keys);
+
+ if ($single)
+ {
+ if ($items === FALSE)
+ return NULL;
+
+ return (count($items) > 0) ? current($items) : NULL;
+ }
+ else
+ {
+ return ($items === FALSE) ? array() : $items;
+ }
+ }
+
+ /**
+ * Get cache items by tag
+ */
+ public function get_tag($tags)
+ {
+ throw new Cache_Exception('Memcache driver does not support tags');
+ }
+
+ /**
+ * Delete cache item by key
+ */
+ public function delete($keys)
+ {
+ foreach ($keys as $key)
+ {
+ if ( ! $this->backend->delete($key))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Delete cache items by tag
+ */
+ public function delete_tag($tags)
+ {
+ throw new Cache_Exception('Memcache driver does not support tags');
+ }
+
+ /**
+ * Empty the cache
+ */
+ public function delete_all()
+ {
+ return $this->backend->flush();
+ }
+} // End Cache Memcache Driver
diff --git a/system/libraries/drivers/Cache/Xcache.php b/system/libraries/drivers/Cache/Xcache.php
new file mode 100644
index 0000000..6761983
--- /dev/null
+++ b/system/libraries/drivers/Cache/Xcache.php
@@ -0,0 +1,161 @@
+config = $config;
+ }
+
+ public function set($items, $tags = NULL, $lifetime = NULL)
+ {
+ if ($tags !== NULL)
+ {
+ Kohana_Log::add('debug', __('Cache: XCache driver does not support tags'));
+ }
+
+ foreach ($items as $key => $value)
+ {
+ if (is_resource($value))
+ throw new Cache_Exception('Caching of resources is impossible, because resources cannot be serialised.');
+
+ if ( ! xcache_set($key, $value, $lifetime))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ }
+
+ public function get($keys, $single = FALSE)
+ {
+ $items = array();
+
+ foreach ($keys as $key)
+ {
+ if (xcache_isset($key))
+ {
+ $items[$key] = xcache_get($key);
+ }
+ else
+ {
+ $items[$key] = NULL;
+ }
+ }
+
+ if ($single)
+ {
+ return ($items === FALSE OR count($items) > 0) ? current($items) : NULL;
+ }
+ else
+ {
+ return ($items === FALSE) ? array() : $items;
+ }
+ }
+
+ /**
+ * Get cache items by tag
+ */
+ public function get_tag($tags)
+ {
+ Kohana_Log::add('debug', __('Cache: XCache driver does not support tags'));
+ return NULL;
+ }
+
+ /**
+ * Delete cache item by key
+ */
+ public function delete($keys)
+ {
+ foreach ($keys as $key)
+ {
+ if ( ! xcache_unset($key))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Delete cache items by tag
+ */
+ public function delete_tag($tags)
+ {
+ Kohana_Log::add('debug', __('Cache: XCache driver does not support tags'));
+ return NULL;
+ }
+
+ /**
+ * Empty the cache
+ */
+ public function delete_all()
+ {
+ $this->auth();
+ $result = TRUE;
+
+ for ($i = 0, $max = xcache_count(XC_TYPE_VAR); $i < $max; $i++)
+ {
+ if (xcache_clear_cache(XC_TYPE_VAR, $i) !== NULL)
+ {
+ $result = FALSE;
+ break;
+ }
+ }
+
+ // Undo the login
+ $this->auth(TRUE);
+
+ return $result;
+ }
+
+ private function auth($reverse = FALSE)
+ {
+ static $backup = array();
+
+ $keys = array('PHP_AUTH_USER', 'PHP_AUTH_PW');
+
+ foreach ($keys as $key)
+ {
+ if ($reverse)
+ {
+ if (isset($backup[$key]))
+ {
+ $_SERVER[$key] = $backup[$key];
+ unset($backup[$key]);
+ }
+ else
+ {
+ unset($_SERVER[$key]);
+ }
+ }
+ else
+ {
+ $value = getenv($key);
+
+ if ( ! empty($value))
+ {
+ $backup[$key] = $value;
+ }
+
+ $_SERVER[$key] = $this->config->{$key};
+ }
+ }
+ }
+} // End Cache XCache Driver
diff --git a/system/libraries/drivers/Config.php b/system/libraries/drivers/Config.php
new file mode 100644
index 0000000..a82684b
--- /dev/null
+++ b/system/libraries/drivers/Config.php
@@ -0,0 +1,257 @@
+cache_lifetime = $cache_setting;
+ // Restore the cached configuration
+ $this->config = $this->load_cache();
+
+ if (count($this->config) > 0)
+ $this->loaded = TRUE;
+
+ // Add the save cache method to system.shutshut event
+ Event::add('system.shutdown', array($this, 'save_cache'));
+ }
+
+ }
+
+ /**
+ * Gets a value from config. If required is TRUE
+ * then get will throw an exception if value cannot
+ * be loaded.
+ *
+ * @param string key the setting to get
+ * @param bool slash remove trailing slashes
+ * @param bool required is setting required?
+ * @return mixed
+ * @access public
+ */
+ public function get($key, $slash = FALSE, $required = FALSE)
+ {
+ // Get the group name from the key
+ $group = explode('.', $key, 2);
+ $group = $group[0];
+
+ // Check for existing value and load it dynamically if required
+ if ( ! isset($this->config[$group]))
+ $this->config[$group] = $this->load($group, $required);
+
+ // Get the value of the key string
+ $value = Kohana::key_string($this->config, $key);
+
+ if ($slash === TRUE AND is_string($value) AND $value !== '')
+ {
+ // Force the value to end with "/"
+ $value = rtrim($value, '/').'/';
+ }
+
+ if (($required === TRUE) AND ($value === null))
+ throw new Kohana_Config_Exception('Value not found in config driver');
+
+ $this->loaded = TRUE;
+ return $value;
+ }
+
+ /**
+ * Sets a new value to the configuration
+ *
+ * @param string key
+ * @param mixed value
+ * @return bool
+ * @access public
+ */
+ public function set($key, $value)
+ {
+ // Do this to make sure that the config array is already loaded
+ $this->get($key);
+
+ if (substr($key, 0, 7) === 'routes.')
+ {
+ // Routes cannot contain sub keys due to possible dots in regex
+ $keys = explode('.', $key, 2);
+ }
+ else
+ {
+ // Convert dot-noted key string to an array
+ $keys = explode('.', $key);
+ }
+
+ // Used for recursion
+ $conf =& $this->config;
+ $last = count($keys) - 1;
+
+ foreach ($keys as $i => $k)
+ {
+ if ($i === $last)
+ {
+ $conf[$k] = $value;
+ }
+ else
+ {
+ $conf =& $conf[$k];
+ }
+ }
+
+ if (substr($key,0,12) === 'core.modules')
+ {
+ // Reprocess the include paths
+ Kohana::include_paths(TRUE);
+ }
+
+ // Set config to changed
+ return $this->changed = TRUE;
+ }
+
+ /**
+ * Clear the configuration
+ *
+ * @param string group
+ * @return bool
+ * @access public
+ */
+ public function clear($group)
+ {
+ // Remove the group from config
+ unset($this->config[$group]);
+
+ // Set config to changed
+ return $this->changed = TRUE;
+ }
+
+ /**
+ * Checks whether the setting exists in
+ * config
+ *
+ * @param string $key
+ * @return bool
+ * @access public
+ */
+ public function setting_exists($key)
+ {
+ return $this->get($key) === NULL;
+ }
+
+ /**
+ * Loads a configuration group based on the setting
+ *
+ * @param string group
+ * @param bool required
+ * @return array
+ * @access public
+ * @abstract
+ */
+ abstract public function load($group, $required = FALSE);
+
+ /**
+ * Loads the cached version of this configuration driver
+ *
+ * @return array
+ * @access public
+ */
+ public function load_cache()
+ {
+ // Load the cache for this configuration
+ $cached_config = Kohana::cache($this->cache_name, $this->cache_lifetime);
+
+ // If the configuration wasn't loaded from the cache
+ if ($cached_config === NULL)
+ $cached_config = array();
+
+ // Return the cached config
+ return $cached_config;
+ }
+
+ /**
+ * Saves a cached version of this configuration driver
+ *
+ * @return bool
+ * @access public
+ */
+ public function save_cache()
+ {
+ // If this configuration has changed
+ if ($this->get('core.internal_cache') !== FALSE AND $this->changed)
+ {
+ $data = $this->config;
+
+ // Save the cache
+ return Kohana::cache_save($this->cache_name, $data, $this->cache_lifetime);
+ }
+
+ return TRUE;
+ }
+} // End Kohana_Config_Driver
\ No newline at end of file
diff --git a/system/libraries/drivers/Config/Array.php b/system/libraries/drivers/Config/Array.php
new file mode 100644
index 0000000..b2ca19b
--- /dev/null
+++ b/system/libraries/drivers/Config/Array.php
@@ -0,0 +1,83 @@
+ $args)
+ {
+ if ( ! $this->$func($args))
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Sanitize and normalize a geometry array based on the temporary image
+ * width and height. Valid properties are: width, height, top, left.
+ *
+ * @param array geometry properties
+ * @return void
+ */
+ protected function sanitize_geometry( & $geometry)
+ {
+ list($width, $height) = $this->properties();
+
+ // Turn off error reporting
+ $reporting = error_reporting(0);
+
+ // Width and height cannot exceed current image size
+ $geometry['width'] = min($geometry['width'], $width);
+ $geometry['height'] = min($geometry['height'], $height);
+
+ // Set standard coordinates if given, otherwise use pixel values
+ if ($geometry['top'] === 'center')
+ {
+ $geometry['top'] = floor(($height / 2) - ($geometry['height'] / 2));
+ }
+ elseif ($geometry['top'] === 'top')
+ {
+ $geometry['top'] = 0;
+ }
+ elseif ($geometry['top'] === 'bottom')
+ {
+ $geometry['top'] = $height - $geometry['height'];
+ }
+
+ // Set standard coordinates if given, otherwise use pixel values
+ if ($geometry['left'] === 'center')
+ {
+ $geometry['left'] = floor(($width / 2) - ($geometry['width'] / 2));
+ }
+ elseif ($geometry['left'] === 'left')
+ {
+ $geometry['left'] = 0;
+ }
+ elseif ($geometry['left'] === 'right')
+ {
+ $geometry['left'] = $width - $geometry['height'];
+ }
+
+ // Restore error reporting
+ error_reporting($reporting);
+ }
+
+ /**
+ * Return the current width and height of the temporary image. This is mainly
+ * needed for sanitizing the geometry.
+ *
+ * @return array width, height
+ */
+ abstract protected function properties();
+
+ /**
+ * Process an image with a set of actions.
+ *
+ * @param string image filename
+ * @param array actions to execute
+ * @param string destination directory path
+ * @param string destination filename
+ * @param boolean render the image
+ * @param string background color
+ * @return boolean
+ */
+ abstract public function process($image, $actions, $dir, $file, $render = FALSE, $background = NULL);
+
+ /**
+ * Flip an image. Valid directions are horizontal and vertical.
+ *
+ * @param integer direction to flip
+ * @return boolean
+ */
+ abstract function flip($direction);
+
+ /**
+ * Crop an image. Valid properties are: width, height, top, left.
+ *
+ * @param array new properties
+ * @return boolean
+ */
+ abstract function crop($properties);
+
+ /**
+ * Resize an image. Valid properties are: width, height, and master.
+ *
+ * @param array new properties
+ * @return boolean
+ */
+ abstract public function resize($properties);
+
+ /**
+ * Rotate an image. Valid amounts are -180 to 180.
+ *
+ * @param integer amount to rotate
+ * @return boolean
+ */
+ abstract public function rotate($amount);
+
+ /**
+ * Sharpen and image. Valid amounts are 1 to 100.
+ *
+ * @param integer amount to sharpen
+ * @return boolean
+ */
+ abstract public function sharpen($amount);
+
+ /**
+ * Overlay a second image. Valid properties are: overlay_file, mime, x, y and transparency.
+ *
+ * @return boolean
+ */
+ abstract public function composite($properties);
+
+} // End Image Driver
\ No newline at end of file
diff --git a/system/libraries/drivers/Image/GD.php b/system/libraries/drivers/Image/GD.php
new file mode 100644
index 0000000..6ffffe8
--- /dev/null
+++ b/system/libraries/drivers/Image/GD.php
@@ -0,0 +1,440 @@
+ $image['file']));
+
+ // Make sure the image type is supported for saving
+ if (empty($save) OR ! function_exists($save))
+ throw new Kohana_Exception('The specified image, :type:, is not an allowed image type.', array(':type:' => $dir.$file));
+
+ // Load the image
+ $this->image = $image;
+
+ // Create the GD image resource
+ $this->tmp_image = $create($image['file']);
+
+ // Get the quality setting from the actions
+ $quality = arr::remove('quality', $actions);
+
+ if ($status = $this->execute($actions))
+ {
+ // Prevent the alpha from being lost
+ imagealphablending($this->tmp_image, TRUE);
+ imagesavealpha($this->tmp_image, TRUE);
+
+ switch ($save)
+ {
+ case 'imagejpeg':
+ // Default the quality to 95
+ ($quality === NULL) and $quality = 95;
+ break;
+ case 'imagegif':
+ // Remove the quality setting, GIF doesn't use it
+ unset($quality);
+ break;
+ case 'imagepng':
+ // Always use a compression level of 9 for PNGs. This does not
+ // affect quality, it only increases the level of compression!
+ $quality = 9;
+ break;
+ }
+
+ if ($render === FALSE)
+ {
+ // Set the status to the save return value, saving with the quality requested
+ $status = isset($quality) ? $save($this->tmp_image, $dir.$file, $quality) : $save($this->tmp_image, $dir.$file);
+ }
+ else
+ {
+ // Output the image directly to the browser
+ switch ($save)
+ {
+ case 'imagejpeg':
+ header('Content-Type: image/jpeg');
+ break;
+ case 'imagegif':
+ header('Content-Type: image/gif');
+ break;
+ case 'imagepng':
+ header('Content-Type: image/png');
+ break;
+ }
+
+ $status = isset($quality) ? $save($this->tmp_image, NULL, $quality) : $save($this->tmp_image);
+ }
+
+ // Destroy the temporary image
+ imagedestroy($this->tmp_image);
+ }
+
+ return $status;
+ }
+
+ public function flip($direction)
+ {
+ // Get the current width and height
+ $width = imagesx($this->tmp_image);
+ $height = imagesy($this->tmp_image);
+
+ // Create the flipped image
+ $flipped = $this->imagecreatetransparent($width, $height);
+
+ if ($direction === Image::HORIZONTAL)
+ {
+ for ($x = 0; $x < $width; $x++)
+ {
+ $status = imagecopy($flipped, $this->tmp_image, $x, 0, $width - $x - 1, 0, 1, $height);
+ }
+ }
+ elseif ($direction === Image::VERTICAL)
+ {
+ for ($y = 0; $y < $height; $y++)
+ {
+ $status = imagecopy($flipped, $this->tmp_image, 0, $y, 0, $height - $y - 1, $width, 1);
+ }
+ }
+ else
+ {
+ // Do nothing
+ return TRUE;
+ }
+
+ if ($status === TRUE)
+ {
+ // Swap the new image for the old one
+ imagedestroy($this->tmp_image);
+ $this->tmp_image = $flipped;
+ }
+
+ return $status;
+ }
+
+ public function crop($properties)
+ {
+ // Sanitize the cropping settings
+ $this->sanitize_geometry($properties);
+
+ // Get the current width and height
+ $width = imagesx($this->tmp_image);
+ $height = imagesy($this->tmp_image);
+
+ // Create the temporary image to copy to
+ $img = $this->imagecreatetransparent($properties['width'], $properties['height']);
+
+ // Execute the crop
+ if ($status = imagecopyresampled($img, $this->tmp_image, 0, 0, $properties['left'], $properties['top'], $width, $height, $width, $height))
+ {
+ // Swap the new image for the old one
+ imagedestroy($this->tmp_image);
+ $this->tmp_image = $img;
+ }
+
+ return $status;
+ }
+
+ public function resize($properties)
+ {
+ // Get the current width and height
+ $width = imagesx($this->tmp_image);
+ $height = imagesy($this->tmp_image);
+
+ if (substr($properties['width'], -1) === '%')
+ {
+ // Recalculate the percentage to a pixel size
+ $properties['width'] = round($width * (substr($properties['width'], 0, -1) / 100));
+ }
+
+ if (substr($properties['height'], -1) === '%')
+ {
+ // Recalculate the percentage to a pixel size
+ $properties['height'] = round($height * (substr($properties['height'], 0, -1) / 100));
+ }
+
+ // Recalculate the width and height, if they are missing
+ empty($properties['width']) and $properties['width'] = round($width * $properties['height'] / $height);
+ empty($properties['height']) and $properties['height'] = round($height * $properties['width'] / $width);
+
+ if ($properties['master'] === Image::AUTO)
+ {
+ // Change an automatic master dim to the correct type
+ $properties['master'] = (($width / $properties['width']) > ($height / $properties['height'])) ? Image::WIDTH : Image::HEIGHT;
+ }
+
+ if (empty($properties['height']) OR $properties['master'] === Image::WIDTH)
+ {
+ // Recalculate the height based on the width
+ $properties['height'] = round($height * $properties['width'] / $width);
+ }
+
+ if (empty($properties['width']) OR $properties['master'] === Image::HEIGHT)
+ {
+ // Recalculate the width based on the height
+ $properties['width'] = round($width * $properties['height'] / $height);
+ }
+
+ // Test if we can do a resize without resampling to speed up the final resize
+ if ($properties['width'] > $width / 2 AND $properties['height'] > $height / 2)
+ {
+ // Presize width and height
+ $pre_width = $width;
+ $pre_height = $height;
+
+ // The maximum reduction is 10% greater than the final size
+ $max_reduction_width = round($properties['width'] * 1.1);
+ $max_reduction_height = round($properties['height'] * 1.1);
+
+ // Reduce the size using an O(2n) algorithm, until it reaches the maximum reduction
+ while ($pre_width / 2 > $max_reduction_width AND $pre_height / 2 > $max_reduction_height)
+ {
+ $pre_width /= 2;
+ $pre_height /= 2;
+ }
+
+ // Create the temporary image to copy to
+ $img = $this->imagecreatetransparent($pre_width, $pre_height);
+
+ if ($status = imagecopyresized($img, $this->tmp_image, 0, 0, 0, 0, $pre_width, $pre_height, $width, $height))
+ {
+ // Swap the new image for the old one
+ imagedestroy($this->tmp_image);
+ $this->tmp_image = $img;
+ }
+
+ // Set the width and height to the presize
+ $width = $pre_width;
+ $height = $pre_height;
+ }
+
+ // Create the temporary image to copy to
+ $img = $this->imagecreatetransparent($properties['width'], $properties['height']);
+
+ // Execute the resize
+ if ($status = imagecopyresampled($img, $this->tmp_image, 0, 0, 0, 0, $properties['width'], $properties['height'], $width, $height))
+ {
+ // Swap the new image for the old one
+ imagedestroy($this->tmp_image);
+ $this->tmp_image = $img;
+ }
+
+ return $status;
+ }
+
+ public function rotate($amount)
+ {
+ // Use current image to rotate
+ $img = $this->tmp_image;
+
+ // White, with an alpha of 0
+ $transparent = imagecolorallocatealpha($img, 255, 255, 255, 127);
+
+ // Rotate, setting the transparent color
+ $img = imagerotate($img, 360 - $amount, $transparent, -1);
+
+ // Fill the background with the transparent "color"
+ imagecolortransparent($img, $transparent);
+
+ // Merge the images
+ if ($status = imagecopymerge($this->tmp_image, $img, 0, 0, 0, 0, imagesx($this->tmp_image), imagesy($this->tmp_image), 100))
+ {
+ // Prevent the alpha from being lost
+ imagealphablending($img, TRUE);
+ imagesavealpha($img, TRUE);
+
+ // Swap the new image for the old one
+ imagedestroy($this->tmp_image);
+ $this->tmp_image = $img;
+ }
+
+ return $status;
+ }
+
+ public function sharpen($amount)
+ {
+ // Make sure that the sharpening function is available
+ if ( ! function_exists('imageconvolution'))
+ throw new Kohana_Exception('Your configured driver does not support the :method: image transformation.', array(':method:' => __FUNCTION__));
+
+ // Amount should be in the range of 18-10
+ $amount = round(abs(-18 + ($amount * 0.08)), 2);
+
+ // Gaussian blur matrix
+ $matrix = array
+ (
+ array(-1, -1, -1),
+ array(-1, $amount, -1),
+ array(-1, -1, -1),
+ );
+
+ // Perform the sharpen
+ return imageconvolution($this->tmp_image, $matrix, $amount - 8, 0);
+ }
+
+ public function composite($properties)
+ {
+ switch($properties['mime'])
+ {
+ case "image/jpeg":
+ $overlay_img = imagecreatefromjpeg($properties['overlay_file']);
+ break;
+
+ case "image/gif":
+ $overlay_img = imagecreatefromgif($properties['overlay_file']);
+ break;
+
+ case "image/png":
+ $overlay_img = imagecreatefrompng($properties['overlay_file']);
+ break;
+ }
+
+ $this->imagecopymerge_alpha($this->tmp_image, $overlay_img, $properties['x'], $properties['y'], 0, 0, imagesx($overlay_img), imagesy($overlay_img), $properties['transparency']);
+
+ imagedestroy($overlay_img);
+
+ return TRUE;
+ }
+
+ /**
+ * A replacement for php's imagecopymerge() function that supports the alpha channel
+ * See php bug #23815: http://bugs.php.net/bug.php?id=23815
+ *
+ * @param resource $dst_im Destination image link resource
+ * @param resource $src_im Source image link resource
+ * @param integer $dst_x x-coordinate of destination point
+ * @param integer $dst_y y-coordinate of destination point
+ * @param integer $src_x x-coordinate of source point
+ * @param integer $src_y y-coordinate of source point
+ * @param integer $src_w Source width
+ * @param integer $src_h Source height
+ * @param integer $pct Transparency percent (0 to 100)
+ */
+ protected function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct)
+ {
+ // Create a new blank image the site of our source image
+ $cut = imagecreatetruecolor($src_w, $src_h);
+
+ // Copy the blank image into the destination image where the source goes
+ imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
+
+ // Place the source image in the destination image
+ imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
+ imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct);
+ }
+
+ protected function properties()
+ {
+ return array(imagesx($this->tmp_image), imagesy($this->tmp_image));
+ }
+
+ /**
+ * Returns an image with a transparent background. Used for rotating to
+ * prevent unfilled backgrounds.
+ *
+ * @param integer image width
+ * @param integer image height
+ * @return resource
+ */
+ protected function imagecreatetransparent($width, $height)
+ {
+ if ($width < 1)
+ {
+ $width = 1;
+ }
+
+ if ($height < 1)
+ {
+ $height = 1;
+ }
+
+ if (self::$blank_png === NULL)
+ {
+ // Decode the blank PNG if it has not been done already
+ self::$blank_png = imagecreatefromstring(base64_decode
+ (
+ 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29'.
+ 'mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBN'.
+ 'CgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQ'.
+ 'AANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoH'.
+ 'AgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB'.
+ '3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII='
+ ));
+
+ // Set the blank PNG width and height
+ self::$blank_png_width = imagesx(self::$blank_png);
+ self::$blank_png_height = imagesy(self::$blank_png);
+ }
+
+ $img = imagecreatetruecolor($width, $height);
+
+ // Resize the blank image
+ imagecopyresized($img, self::$blank_png, 0, 0, 0, 0, $width, $height, self::$blank_png_width, self::$blank_png_height);
+
+ // Prevent the alpha from being lost
+ imagealphablending($img, FALSE);
+ imagesavealpha($img, TRUE);
+
+ return $img;
+ }
+
+} // End Image GD Driver
\ No newline at end of file
diff --git a/system/libraries/drivers/Image/GraphicsMagick.php b/system/libraries/drivers/Image/GraphicsMagick.php
new file mode 100644
index 0000000..89b40b4
--- /dev/null
+++ b/system/libraries/drivers/Image/GraphicsMagick.php
@@ -0,0 +1,225 @@
+ext = (PHP_SHLIB_SUFFIX === 'dll') ? '.exe' : '';
+
+ // Check to make sure the provided path is correct
+ if ( ! is_file(realpath($config['directory']).'/gm'.$this->ext))
+ throw new Kohana_Exception('The GraphicsMagick directory specified does not contain a required program, :gm:.', array(':gm:' => 'gm'.$this->ext));
+
+
+ // Set the installation directory
+ $this->dir = str_replace('\\', '/', realpath($config['directory'])).'/';
+ }
+
+ /**
+ * Creates a temporary image and executes the given actions. By creating a
+ * temporary copy of the image before manipulating it, this process is atomic.
+ */
+ public function process($image, $actions, $dir, $file, $render = FALSE, $background = NULL)
+ {
+ // Need to implement $background support
+ if ($background !== NULL)
+ throw new Kohana_Exception('The GraphicsMagick driver does not support setting a background color');
+
+ // We only need the filename
+ $image = $image['file'];
+
+ // Unique temporary filename
+ $this->tmp_image = $dir.'k2img--'.sha1(time().$dir.$file).substr($file, strrpos($file, '.'));
+
+ // Copy the image to the temporary file
+ copy($image, $this->tmp_image);
+
+ // Quality change is done last
+ $quality = (int) arr::remove('quality', $actions);
+
+ // Use 95 for the default quality
+ empty($quality) and $quality = 95;
+
+ // All calls to these will need to be escaped, so do it now
+ $this->cmd_image = escapeshellarg($this->tmp_image);
+ $this->new_image = ($render)? $this->cmd_image : escapeshellarg($dir.$file);
+
+ if ($status = $this->execute($actions))
+ {
+ // Use convert to change the image into its final version. This is
+ // done to allow the file type to change correctly, and to handle
+ // the quality conversion in the most effective way possible.
+ if ($error = exec(escapeshellcmd($this->dir.'gm'.$this->ext.' convert').' -quality '.$quality.'% '.$this->cmd_image.' '.$this->new_image))
+ {
+ $this->errors[] = $error;
+ }
+ else
+ {
+ // Output the image directly to the browser
+ if ($render !== FALSE)
+ {
+ $contents = file_get_contents($this->tmp_image);
+ switch (substr($file, strrpos($file, '.') + 1))
+ {
+ case 'jpg':
+ case 'jpeg':
+ header('Content-Type: image/jpeg');
+ break;
+ case 'gif':
+ header('Content-Type: image/gif');
+ break;
+ case 'png':
+ header('Content-Type: image/png');
+ break;
+ }
+ echo $contents;
+ }
+ }
+ }
+
+ // Remove the temporary image
+ unlink($this->tmp_image);
+ $this->tmp_image = '';
+
+ return $status;
+ }
+
+ public function crop($prop)
+ {
+ // Sanitize and normalize the properties into geometry
+ $this->sanitize_geometry($prop);
+
+ // Set the IM geometry based on the properties
+ $geometry = escapeshellarg($prop['width'].'x'.$prop['height'].'+'.$prop['left'].'+'.$prop['top']);
+
+ if ($error = exec(escapeshellcmd($this->dir.'gm'.$this->ext.' convert').' -crop '.$geometry.' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function flip($dir)
+ {
+ // Convert the direction into a GM command
+ $dir = ($dir === Image::HORIZONTAL) ? '-flop' : '-flip';
+
+ if ($error = exec(escapeshellcmd($this->dir.'gm'.$this->ext.' convert').' '.$dir.' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function resize($prop)
+ {
+ switch ($prop['master'])
+ {
+ case Image::WIDTH: // Wx
+ $dim = escapeshellarg($prop['width'].'x');
+ break;
+ case Image::HEIGHT: // xH
+ $dim = escapeshellarg('x'.$prop['height']);
+ break;
+ case Image::AUTO: // WxH
+ $dim = escapeshellarg($prop['width'].'x'.$prop['height']);
+ break;
+ case Image::NONE: // WxH!
+ $dim = escapeshellarg($prop['width'].'x'.$prop['height'].'!');
+ break;
+ }
+
+ // Use "convert" to change the width and height
+ if ($error = exec(escapeshellcmd($this->dir.'gm'.$this->ext.' convert').' -resize '.$dim.' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function rotate($amt)
+ {
+ if ($error = exec(escapeshellcmd($this->dir.'gm'.$this->ext.' convert').' -rotate '.escapeshellarg($amt).' -background transparent '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function sharpen($amount)
+ {
+ // Set the sigma, radius, and amount. The amount formula allows a nice
+ // spread between 1 and 100 without pixelizing the image badly.
+ $sigma = 0.5;
+ $radius = $sigma * 2;
+ $amount = round(($amount / 80) * 3.14, 2);
+
+ // Convert the amount to an GM command
+ $sharpen = escapeshellarg($radius.'x'.$sigma.'+'.$amount.'+0');
+
+ if ($error = exec(escapeshellcmd($this->dir.'gm'.$this->ext.' convert').' -unsharp '.$sharpen.' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function composite($properties)
+ {
+ if ($error = exec(escapeshellcmd($this->dir.'gm'.$this->ext.' composite').' -geometry ' . escapeshellarg('+'.$properties['x'].'+'.$properties['y']).' -dissolve '.escapeshellarg($properties['transparency']).' '.escapeshellarg($properties['overlay_file']).' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ protected function properties()
+ {
+ return array_slice(getimagesize($this->tmp_image), 0, 2, FALSE);
+ }
+
+} // End Image GraphicsMagick Driver
\ No newline at end of file
diff --git a/system/libraries/drivers/Image/ImageMagick.php b/system/libraries/drivers/Image/ImageMagick.php
new file mode 100644
index 0000000..55c0ba2
--- /dev/null
+++ b/system/libraries/drivers/Image/ImageMagick.php
@@ -0,0 +1,233 @@
+ext = (PHP_SHLIB_SUFFIX === 'dll') ? '.exe' : '';
+
+ // Check to make sure the provided path is correct
+ if ( ! is_file(realpath($config['directory']).'/convert'.$this->ext))
+ throw new Kohana_Exception('The ImageMagick directory specified does not contain a required program, :im:', array(':im:' => 'convert'.$this->ext));
+
+ // Set the installation directory
+ $this->dir = str_replace('\\', '/', realpath($config['directory'])).'/';
+ }
+
+ /**
+ * Creates a temporary image and executes the given actions. By creating a
+ * temporary copy of the image before manipulating it, this process is atomic.
+ */
+ public function process($image, $actions, $dir, $file, $render = FALSE, $background = NULL)
+ {
+ // We only need the filename
+ $image = $image['file'];
+
+ // Unique temporary filename
+ $this->tmp_image = $dir.'k2img--'.sha1(time().$dir.$file).substr($file, strrpos($file, '.'));
+
+ // Copy the image to the temporary file
+ copy($image, $this->tmp_image);
+
+ // Quality change is done last
+ $quality = (int) arr::remove('quality', $actions);
+
+ // Use 95 for the default quality
+ empty($quality) and $quality = 95;
+
+ if (is_string($background))
+ {
+ // Set the background color
+ $this->background = escapeshellarg($background);
+ }
+ else
+ {
+ // Use a transparent background
+ $this->background = 'transparent';
+ }
+
+ // All calls to these will need to be escaped, so do it now
+ $this->cmd_image = escapeshellarg($this->tmp_image);
+ $this->new_image = $render ? $this->cmd_image : escapeshellarg($dir.$file);
+
+ if ($status = $this->execute($actions))
+ {
+ // Use convert to change the image into its final version. This is
+ // done to allow the file type to change correctly, and to handle
+ // the quality conversion in the most effective way possible.
+ if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -background '.$this->background.' -flatten -quality '.$quality.'% '.$this->cmd_image.' '.$this->new_image))
+ {
+ $this->errors[] = $error;
+ }
+ else
+ {
+ // Output the image directly to the browser
+ if ($render === TRUE)
+ {
+ $contents = file_get_contents($this->tmp_image);
+ switch (substr($file, strrpos($file, '.') + 1))
+ {
+ case 'jpg':
+ case 'jpeg':
+ header('Content-Type: image/jpeg');
+ break;
+ case 'gif':
+ header('Content-Type: image/gif');
+ break;
+ case 'png':
+ header('Content-Type: image/png');
+ break;
+ }
+ echo $contents;
+ }
+ }
+ }
+
+ // Remove the temporary image
+ unlink($this->tmp_image);
+ $this->tmp_image = '';
+
+ return $status;
+ }
+
+ public function crop($prop)
+ {
+ // Sanitize and normalize the properties into geometry
+ $this->sanitize_geometry($prop);
+
+ // Set the IM geometry based on the properties
+ $geometry = escapeshellarg($prop['width'].'x'.$prop['height'].'+'.$prop['left'].'+'.$prop['top']);
+
+ if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -background '.$this->background.' -flatten -crop '.$geometry.'! '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function flip($dir)
+ {
+ // Convert the direction into a IM command
+ $dir = ($dir === Image::HORIZONTAL) ? '-flop' : '-flip';
+
+ if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -background '.$this->background.' -flatten '.$dir.' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function resize($prop)
+ {
+ switch ($prop['master'])
+ {
+ case Image::WIDTH: // Wx
+ $dim = escapeshellarg($prop['width'].'x');
+ break;
+ case Image::HEIGHT: // xH
+ $dim = escapeshellarg('x'.$prop['height']);
+ break;
+ case Image::AUTO: // WxH
+ $dim = escapeshellarg($prop['width'].'x'.$prop['height']);
+ break;
+ case Image::NONE: // WxH!
+ $dim = escapeshellarg($prop['width'].'x'.$prop['height'].'!');
+ break;
+ }
+
+ // Use "convert" to change the width and height
+ if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -background '.$this->background.' -flatten -resize '.$dim.' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function rotate($amt)
+ {
+ if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -background '.$this->background.' -flatten -rotate '.escapeshellarg($amt).' -background transparent '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function sharpen($amount)
+ {
+ // Set the sigma, radius, and amount. The amount formula allows a nice
+ // spread between 1 and 100 without pixelizing the image badly.
+ $sigma = 0.5;
+ $radius = $sigma * 2;
+ $amount = round(($amount / 80) * 3.14, 2);
+
+ // Convert the amount to an IM command
+ $sharpen = escapeshellarg($radius.'x'.$sigma.'+'.$amount.'+0');
+
+ if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -background '.$this->background.' -flatten -unsharp '.$sharpen.' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ public function composite($properties)
+ {
+ if ($error = exec(escapeshellcmd($this->dir.'composite'.$this->ext).' -geometry ' . escapeshellarg('+'.$properties['x'].'+'.$properties['y']).' -dissolve '.escapeshellarg($properties['transparency']).' '.escapeshellarg($properties['overlay_file']).' '.$this->cmd_image.' '.$this->cmd_image))
+ {
+ $this->errors[] = $error;
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ protected function properties()
+ {
+ return array_slice(getimagesize($this->tmp_image), 0, 2, FALSE);
+ }
+
+} // End Image ImageMagick Driver
\ No newline at end of file
diff --git a/system/libraries/drivers/Log.php b/system/libraries/drivers/Log.php
new file mode 100644
index 0000000..cd6dba7
--- /dev/null
+++ b/system/libraries/drivers/Log.php
@@ -0,0 +1,22 @@
+config = $config;
+ }
+
+ abstract public function save(array $messages);
+}
\ No newline at end of file
diff --git a/system/libraries/drivers/Log/Database.php b/system/libraries/drivers/Log/Database.php
new file mode 100644
index 0000000..19db974
--- /dev/null
+++ b/system/libraries/drivers/Log/Database.php
@@ -0,0 +1,40 @@
+config['group'])
+ ->insert($this->config['table'])
+ ->columns(array('date', 'level', 'message'));
+
+ $run_insert = FALSE;
+
+ foreach ($messages AS $message)
+ {
+ if ($this->config['log_levels'][$message['type']] <= $this->config['log_threshold'])
+ {
+ // Add new message to database
+ $insert->values($message);
+
+ // There is data to insert
+ $run_insert = TRUE;
+ }
+ }
+
+ // Update the database
+ if ($run_insert)
+ {
+ $insert->execute();
+ }
+ }
+}
\ No newline at end of file
diff --git a/system/libraries/drivers/Log/File.php b/system/libraries/drivers/Log/File.php
new file mode 100644
index 0000000..6ad565b
--- /dev/null
+++ b/system/libraries/drivers/Log/File.php
@@ -0,0 +1,44 @@
+config['log_directory'].'/'.date('Y-m-d').'.log'.EXT;
+
+ if ( ! is_file($filename))
+ {
+ // Write the SYSPATH checking header
+ file_put_contents($filename,
+ ''.PHP_EOL.PHP_EOL);
+
+ // Prevent external writes
+ chmod($filename, $this->config['posix_permissions']);
+ }
+
+ foreach ($messages AS $message)
+ {
+ if ($this->config['log_levels'][$message['type']] <= $this->config['log_threshold'])
+ {
+ // Add a new message line
+ $messages_to_write[] = date($this->config['date_format'], $message['date']).' --- '.$message['type'].': '.$message['message'];
+ }
+ }
+
+ if ( ! empty($messages_to_write))
+ {
+ // Write messages to log file
+ file_put_contents($filename, implode(PHP_EOL, $messages_to_write).PHP_EOL, FILE_APPEND);
+ }
+ }
+}
\ No newline at end of file
diff --git a/system/libraries/drivers/Log/Syslog.php b/system/libraries/drivers/Log/Syslog.php
new file mode 100644
index 0000000..5da5d25
--- /dev/null
+++ b/system/libraries/drivers/Log/Syslog.php
@@ -0,0 +1,34 @@
+ LOG_ERR,
+ 'alert' => LOG_WARNING,
+ 'info' => LOG_INFO,
+ 'debug' => LOG_DEBUG);
+
+ public function save(array $messages)
+ {
+ // Open the connection to syslog
+ openlog($this->config['ident'], LOG_CONS, LOG_USER);
+
+ do
+ {
+ // Load the next message
+ list ($date, $type, $text) = array_shift($messages);
+
+ syslog($this->syslog_levels[$type], $text);
+ }
+ while ( ! empty($messages));
+
+ // Close connection to syslog
+ closelog();
+ }
+}
\ No newline at end of file
diff --git a/system/libraries/drivers/Session.php b/system/libraries/drivers/Session.php
new file mode 100644
index 0000000..e591b91
--- /dev/null
+++ b/system/libraries/drivers/Session.php
@@ -0,0 +1,70 @@
+ 'apc',
+ * 'requests' => 10000
+ * );
+ * Lifetime does not need to be set as it is
+ * overridden by the session expiration setting.
+ *
+ * $Id: Cache.php 4729 2009-12-29 20:35:19Z isaiah $
+ *
+ * @package Kohana
+ * @author Kohana Team
+ * @copyright (c) 2007-2009 Kohana Team
+ * @license http://kohanaphp.com/license
+ */
+class Session_Cache_Driver implements Session_Driver {
+
+ protected $cache;
+ protected $encrypt;
+
+ public function __construct()
+ {
+ // Load Encrypt library
+ if (Kohana::config('session.encryption'))
+ {
+ $this->encrypt = new Encrypt;
+ }
+
+ Kohana_Log::add('debug', 'Session Cache Driver Initialized');
+ }
+
+ public function open($path, $name)
+ {
+ $config = Kohana::config('session.storage');
+
+ if (empty($config))
+ {
+ // Load the default group
+ $config = Kohana::config('cache.default');
+ }
+ elseif (is_string($config))
+ {
+ $name = $config;
+
+ // Test the config group name
+ if (($config = Kohana::config('cache.'.$config)) === NULL)
+ throw new Kohana_Exception('The :group: group is not defined in your configuration.', array(':group:' => $name));
+ }
+
+ $config['lifetime'] = (Kohana::config('session.expiration') == 0) ? 86400 : Kohana::config('session.expiration');
+ $this->cache = new Cache($config);
+
+ return is_object($this->cache);
+ }
+
+ public function close()
+ {
+ return TRUE;
+ }
+
+ public function read($id)
+ {
+ $id = 'session_'.$id;
+ if ($data = $this->cache->get($id))
+ {
+ return Kohana::config('session.encryption') ? $this->encrypt->decode($data) : $data;
+ }
+
+ // Return value must be string, NOT a boolean
+ return '';
+ }
+
+ public function write($id, $data)
+ {
+ if ( ! Session::$should_save)
+ return TRUE;
+
+ $id = 'session_'.$id;
+ $data = Kohana::config('session.encryption') ? $this->encrypt->encode($data) : $data;
+
+ return $this->cache->set($id, $data);
+ }
+
+ public function destroy($id)
+ {
+ $id = 'session_'.$id;
+ return $this->cache->delete($id);
+ }
+
+ public function regenerate()
+ {
+ session_regenerate_id(TRUE);
+
+ // Return new session id
+ return session_id();
+ }
+
+ public function gc($maxlifetime)
+ {
+ // Just return, caches are automatically cleaned up
+ return TRUE;
+ }
+
+} // End Session Cache Driver
diff --git a/system/libraries/drivers/Session/Cookie.php b/system/libraries/drivers/Session/Cookie.php
new file mode 100644
index 0000000..88f5e21
--- /dev/null
+++ b/system/libraries/drivers/Session/Cookie.php
@@ -0,0 +1,83 @@
+cookie_name = Kohana::config('session.name').'_data';
+
+ if (Kohana::config('session.encryption'))
+ {
+ $this->encrypt = Encrypt::instance();
+ }
+
+ Kohana_Log::add('debug', 'Session Cookie Driver Initialized');
+ }
+
+ public function open($path, $name)
+ {
+ return TRUE;
+ }
+
+ public function close()
+ {
+ return TRUE;
+ }
+
+ public function read($id)
+ {
+ $data = (string) cookie::get($this->cookie_name);
+
+ if ($data == '')
+ return $data;
+
+ return empty($this->encrypt) ? base64_decode($data) : $this->encrypt->decode($data);
+ }
+
+ public function write($id, $data)
+ {
+ if ( ! Session::$should_save)
+ return TRUE;
+
+ $data = empty($this->encrypt) ? base64_encode($data) : $this->encrypt->encode($data);
+
+ if (strlen($data) > 4048)
+ {
+ Kohana_Log::add('error', 'Session ('.$id.') data exceeds the 4KB limit, ignoring write.');
+ return FALSE;
+ }
+
+ return cookie::set($this->cookie_name, $data, Kohana::config('session.expiration'));
+ }
+
+ public function destroy($id)
+ {
+ return cookie::delete($this->cookie_name);
+ }
+
+ public function regenerate()
+ {
+ session_regenerate_id(TRUE);
+
+ // Return new id
+ return session_id();
+ }
+
+ public function gc($maxlifetime)
+ {
+ return TRUE;
+ }
+
+} // End Session Cookie Driver Class
\ No newline at end of file
diff --git a/system/libraries/drivers/Session/Database.php b/system/libraries/drivers/Session/Database.php
new file mode 100644
index 0000000..7b372d2
--- /dev/null
+++ b/system/libraries/drivers/Session/Database.php
@@ -0,0 +1,178 @@
+encrypt = Encrypt::instance();
+ }
+
+ if (is_array($config['storage']))
+ {
+ if ( ! empty($config['storage']['group']))
+ {
+ // Set the group name
+ $this->db = $config['storage']['group'];
+ }
+
+ if ( ! empty($config['storage']['table']))
+ {
+ // Set the table name
+ $this->table = $config['storage']['table'];
+ }
+ }
+
+ Kohana_Log::add('debug', 'Session Database Driver Initialized');
+ }
+
+ public function open($path, $name)
+ {
+ return TRUE;
+ }
+
+ public function close()
+ {
+ return TRUE;
+ }
+
+ public function read($id)
+ {
+ // Load the session
+ $query = db::select('data')
+ ->from($this->table)
+ ->where('session_id', '=', $id)
+ ->limit(1)
+ ->execute($this->db);
+
+ if ($query->count() === 0)
+ {
+ // No current session
+ $this->session_id = NULL;
+
+ return '';
+ }
+
+ // Set the current session id
+ $this->session_id = $id;
+
+ // Load the data
+ $data = $query->current()->data;
+
+ return ($this->encrypt === NULL) ? base64_decode($data) : $this->encrypt->decode($data);
+ }
+
+ public function write($id, $data)
+ {
+ if ( ! Session::$should_save)
+ return TRUE;
+
+ $data = array
+ (
+ 'session_id' => $id,
+ 'last_activity' => time(),
+ 'data' => ($this->encrypt === NULL) ? base64_encode($data) : $this->encrypt->encode($data)
+ );
+
+ if ($this->session_id === NULL)
+ {
+ // Insert a new session
+ $query = db::insert($this->table, $data)
+ ->execute($this->db);
+ }
+ elseif ($id === $this->session_id)
+ {
+ // Do not update the session_id
+ unset($data['session_id']);
+
+ // Update the existing session
+ $query = db::update($this->table)
+ ->set($data)
+ ->where('session_id', '=', $id)
+ ->execute($this->db);
+ }
+ else
+ {
+ // Update the session and id
+ $query = db::update($this->table)
+ ->set($data)
+ ->where('session_id', '=', $this->session_id)
+ ->execute($this->db);
+
+ // Set the new session id
+ $this->session_id = $id;
+ }
+
+ return (bool) $query->count();
+ }
+
+ public function destroy($id)
+ {
+ // Delete the requested session
+ db::delete($this->table)
+ ->where('session_id', '=', $id)
+ ->execute($this->db);
+
+ // Session id is no longer valid
+ $this->session_id = NULL;
+
+ return TRUE;
+ }
+
+ public function regenerate()
+ {
+ // Generate a new session id
+ session_regenerate_id();
+
+ // Return new session id
+ return session_id();
+ }
+
+ public function gc($maxlifetime)
+ {
+ // Delete all expired sessions
+ $query = db::delete($this->table)
+ ->where('last_activity', '<', time() - $maxlifetime)
+ ->execute($this->db);
+
+ Kohana_Log::add('debug', 'Session garbage collected: '.$query->count().' row(s) deleted.');
+
+ return TRUE;
+ }
+
+} // End Session Database Driver
diff --git a/system/messages/kohana/core.php b/system/messages/kohana/core.php
new file mode 100644
index 0000000..0fa66b0
--- /dev/null
+++ b/system/messages/kohana/core.php
@@ -0,0 +1,37 @@
+ array
+ (
+ E_KOHANA => 'Framework Error',
+ E_PAGE_NOT_FOUND => 'Page Not Found',
+ E_DATABASE_ERROR => 'Database Error',
+ E_RECOVERABLE_ERROR => 'Recoverable Error',
+ E_ERROR => 'Fatal Error',
+ E_COMPILE_ERROR => 'Fatal Error',
+ E_CORE_ERROR => 'Fatal Error',
+ E_USER_ERROR => 'Fatal Error',
+ E_PARSE => 'Syntax Error',
+ E_WARNING => 'Warning Message',
+ E_COMPILE_WARNING => 'Warning Message',
+ E_CORE_WARNING => 'Warning Message',
+ E_USER_WARNING => 'Warning Message',
+ E_STRICT => 'Strict Mode Error',
+ E_NOTICE => 'Runtime Message',
+ E_USER_NOTICE => 'Runtime Message',
+ ),
+);
+
+// E_DEPRECATED is only defined in PHP >= 5.3.0
+if (defined('E_DEPRECATED'))
+{
+ $messages['errors'][E_DEPRECATED] = 'Deprecated';
+}
\ No newline at end of file
diff --git a/system/messages/validation/default.php b/system/messages/validation/default.php
new file mode 100644
index 0000000..88580a6
--- /dev/null
+++ b/system/messages/validation/default.php
@@ -0,0 +1,25 @@
+ 'The :field field is required',
+ 'length' => 'The :field field must be between :param1 and :param2 characters long',
+ 'depends_on' => 'The :field field requires the :param1 field',
+ 'matches' => 'The :field field must be the same as :param1',
+ 'email' => 'The :field field must be a valid email address',
+ 'decimal' => 'The :field field must be a decimal with :param1 places',
+ 'digit' => 'The :field field must be a digit',
+ 'in_array' => 'The :field field must be one of the available options',
+ 'alpha_numeric' => 'The :field field must consist only of alphabetical or numeric characters',
+ 'alpha_dash ' => 'The :field field must consist only of alphabetical, numeric, underscore and dash characters',
+ 'numeric ' => 'The :field field must be a valid number',
+ 'url' => 'The :field field must be a valid url',
+ 'phone' => 'The :field field must be a valid phone number',
+);
diff --git a/system/views/kohana/error.php b/system/views/kohana/error.php
new file mode 100644
index 0000000..aa6770c
--- /dev/null
+++ b/system/views/kohana/error.php
@@ -0,0 +1,252 @@
+
+
+
+
diff --git a/system/views/kohana/error_disabled.php b/system/views/kohana/error_disabled.php
new file mode 100644
index 0000000..1024eb1
--- /dev/null
+++ b/system/views/kohana/error_disabled.php
@@ -0,0 +1,19 @@
+
+
+
+