From efc851a94c772c43e2b62d349f636dce28cb97a0 Mon Sep 17 00:00:00 2001 From: woutervanwijk Date: Mon, 13 Jan 2014 12:02:57 +0100 Subject: [PATCH 01/17] better ios scrolling, faster playing restored (used in musicbox 0.4.3) old webclient renamed --- flatclient/css/webclient.css | 5 +--- flatclient/js/controls.js | 22 ++++++++++-------- flatclient/js/gui.js | 7 +++--- .../css/add2home.css | 0 .../css/images/ajax-loader.gif | Bin .../css/images/icons-18-black.png | Bin .../css/images/icons-18-white.png | Bin .../css/images/icons-36-black.png | Bin .../css/images/icons-36-white.png | Bin .../css/images/icons-png/action-black.png | Bin .../css/images/icons-png/action-white.png | Bin .../css/images/icons-png/alert-black.png | Bin .../css/images/icons-png/alert-white.png | Bin .../css/images/icons-png/arrow-d-black.png | Bin .../css/images/icons-png/arrow-d-l-black.png | Bin .../css/images/icons-png/arrow-d-l-white.png | Bin .../css/images/icons-png/arrow-d-r-black.png | Bin .../css/images/icons-png/arrow-d-r-white.png | Bin .../css/images/icons-png/arrow-d-white.png | Bin .../css/images/icons-png/arrow-l-black.png | Bin .../css/images/icons-png/arrow-l-white.png | Bin .../css/images/icons-png/arrow-r-black.png | Bin .../css/images/icons-png/arrow-r-white.png | Bin .../css/images/icons-png/arrow-u-black.png | Bin .../css/images/icons-png/arrow-u-l-black.png | Bin .../css/images/icons-png/arrow-u-l-white.png | Bin .../css/images/icons-png/arrow-u-r-black.png | Bin .../css/images/icons-png/arrow-u-r-white.png | Bin .../css/images/icons-png/arrow-u-white.png | Bin .../css/images/icons-png/audio-black.png | Bin .../css/images/icons-png/audio-white.png | Bin .../css/images/icons-png/back-black.png | Bin .../css/images/icons-png/back-white.png | Bin .../css/images/icons-png/bars-black.png | Bin .../css/images/icons-png/bars-white.png | Bin .../css/images/icons-png/bullets-black.png | Bin .../css/images/icons-png/bullets-white.png | Bin .../css/images/icons-png/calendar-black.png | Bin .../css/images/icons-png/calendar-white.png | Bin .../css/images/icons-png/camera-black.png | Bin .../css/images/icons-png/camera-white.png | Bin .../css/images/icons-png/carat-d-black.png | Bin .../css/images/icons-png/carat-d-white.png | Bin .../css/images/icons-png/carat-l-black.png | Bin .../css/images/icons-png/carat-l-white.png | Bin .../css/images/icons-png/carat-r-black.png | Bin .../css/images/icons-png/carat-r-white.png | Bin .../css/images/icons-png/carat-u-black.png | Bin .../css/images/icons-png/carat-u-white.png | Bin .../css/images/icons-png/check-black.png | Bin .../css/images/icons-png/check-white.png | Bin .../css/images/icons-png/clock-black.png | Bin .../css/images/icons-png/clock-white.png | Bin .../css/images/icons-png/cloud-black.png | Bin .../css/images/icons-png/cloud-white.png | Bin .../css/images/icons-png/comment-black.png | Bin .../css/images/icons-png/comment-white.png | Bin .../css/images/icons-png/delete-black.png | Bin .../css/images/icons-png/delete-white.png | Bin .../css/images/icons-png/edit-black.png | Bin .../css/images/icons-png/edit-white.png | Bin .../css/images/icons-png/eye-black.png | Bin .../css/images/icons-png/eye-white.png | Bin .../css/images/icons-png/forbidden-black.png | Bin .../css/images/icons-png/forbidden-white.png | Bin .../css/images/icons-png/forward-black.png | Bin .../css/images/icons-png/forward-white.png | Bin .../css/images/icons-png/gear-black.png | Bin .../css/images/icons-png/gear-white.png | Bin .../css/images/icons-png/grid-black.png | Bin .../css/images/icons-png/grid-white.png | Bin .../css/images/icons-png/heart-black.png | Bin .../css/images/icons-png/heart-white.png | Bin .../css/images/icons-png/home-black.png | Bin .../css/images/icons-png/home-white.png | Bin .../css/images/icons-png/info-black.png | Bin .../css/images/icons-png/info-white.png | Bin .../css/images/icons-png/location-black.png | Bin .../css/images/icons-png/location-white.png | Bin .../css/images/icons-png/lock-black.png | Bin .../css/images/icons-png/lock-white.png | Bin .../css/images/icons-png/mail-black.png | Bin .../css/images/icons-png/mail-white.png | Bin .../css/images/icons-png/minus-black.png | Bin .../css/images/icons-png/minus-white.png | Bin .../css/images/icons-png/navigation-black.png | Bin .../css/images/icons-png/navigation-white.png | Bin .../css/images/icons-png/phone-black.png | Bin .../css/images/icons-png/phone-white.png | Bin .../css/images/icons-png/plus-black.png | Bin .../css/images/icons-png/plus-white.png | Bin .../css/images/icons-png/power-black.png | Bin .../css/images/icons-png/power-white.png | Bin .../css/images/icons-png/recycle-black.png | Bin .../css/images/icons-png/recycle-white.png | Bin .../css/images/icons-png/refresh-black.png | Bin .../css/images/icons-png/refresh-white.png | Bin .../css/images/icons-png/search-black.png | Bin .../css/images/icons-png/search-white.png | Bin .../css/images/icons-png/shop-black.png | Bin .../css/images/icons-png/shop-white.png | Bin .../css/images/icons-png/star-black.png | Bin .../css/images/icons-png/star-white.png | Bin .../css/images/icons-png/tag-black.png | Bin .../css/images/icons-png/tag-white.png | Bin .../css/images/icons-png/user-black.png | Bin .../css/images/icons-png/user-white.png | Bin .../css/images/icons-png/video-black.png | Bin .../css/images/icons-png/video-white.png | Bin .../css/iscroll-pull-icon@2x.png | Bin .../css/jquery.mobile-1.4.0-beta.1.css | 0 .../css/jquery.mobile-1.4.0-beta.1.min.css | 0 ...query.mobile.external-png-1.4.0-beta.1.css | 0 ...y.mobile.external-png-1.4.0-beta.1.min.css | 0 .../jquery.mobile.inline-png-1.4.0-beta.1.css | 0 ...ery.mobile.inline-png-1.4.0-beta.1.min.css | 0 .../jquery.mobile.inline-svg-1.4.0-beta.1.css | 0 ...ery.mobile.inline-svg-1.4.0-beta.1.min.css | 0 .../css/jquery.mobile.iscrollview-pull.css | 0 .../css/jquery.mobile.iscrollview.css | 0 .../jquery.mobile.structure-1.4.0-beta.1.css | 0 ...uery.mobile.structure-1.4.0-beta.1.min.css | 0 .../css/jquery.mobile.theme-1.4.0-beta.1.css | 0 .../jquery.mobile.theme-1.4.0-beta.1.min.css | 0 .../css/webclient.css | 0 .../images/ajax-loader.gif | Bin .../images/empty.png | Bin .../images/icons-18-black.png | Bin .../images/icons-18-white.png | Bin .../images/icons-36-black.png | Bin .../images/icons-36-white.png | Bin .../images/icons/AUTHORS | 0 .../images/icons/LICENSE | 0 .../images/icons/arrow_down_12x12.png | Bin .../images/icons/arrow_down_16x16.png | Bin .../images/icons/arrow_down_24x24.png | Bin .../images/icons/arrow_down_32x32.png | Bin .../images/icons/arrow_down_8x8.png | Bin .../images/icons/arrow_down_alt1_12x12.png | Bin .../images/icons/arrow_down_alt1_16x16.png | Bin .../images/icons/arrow_down_alt1_24x24.png | Bin .../images/icons/arrow_down_alt1_32x32.png | Bin .../images/icons/arrow_down_alt1_8x8.png | Bin .../images/icons/arrow_left_alt1_12x12.png | Bin .../images/icons/arrow_left_alt1_16x16.png | Bin .../images/icons/arrow_left_alt1_24x24.png | Bin .../images/icons/arrow_left_alt1_32x32.png | Bin .../images/icons/cd_12x12.png | Bin .../images/icons/cd_16x16.png | Bin .../images/icons/cd_24x24.png | Bin .../images/icons/cd_32x32.png | Bin .../images/icons/cd_8x8.png | Bin .../images/icons/cog_12x12.png | Bin .../images/icons/cog_16x16.png | Bin .../images/icons/cog_24x24.png | Bin .../images/icons/cog_32x32.png | Bin .../images/icons/cog_8x8.png | Bin .../images/icons/first_12x12.png | Bin .../images/icons/first_16x16.png | Bin .../images/icons/first_24x24.png | Bin .../images/icons/first_32x32.png | Bin .../images/icons/first_8x8.png | Bin .../images/icons/fork_21x24.png | Bin .../images/icons/headphones_12x11.png | Bin .../images/icons/headphones_16x14.png | Bin .../images/icons/headphones_24x21.png | Bin .../images/icons/headphones_32x28.png | Bin .../images/icons/headphones_8x7.png | Bin .../images/icons/heart_fill_12x11.png | Bin .../images/icons/heart_fill_16x14.png | Bin .../images/icons/heart_fill_24x21.png | Bin .../images/icons/heart_fill_32x28.png | Bin .../images/icons/heart_fill_8x7.png | Bin .../images/icons/heart_stroke_12x11.png | Bin .../images/icons/heart_stroke_16x14.png | Bin .../images/icons/heart_stroke_24x21.png | Bin .../images/icons/heart_stroke_32x28.png | Bin .../images/icons/heart_stroke_8x7.png | Bin .../images/icons/info_12x24.png | Bin .../images/icons/info_16x32.png | Bin .../images/icons/info_4x8.png | Bin .../images/icons/info_6x12.png | Bin .../images/icons/info_8x16.png | Bin .../images/icons/last_12x12.png | Bin .../images/icons/last_16x16.png | Bin .../images/icons/last_24x24.png | Bin .../images/icons/last_32x32.png | Bin .../images/icons/last_8x8.png | Bin .../images/icons/layers_24x21.png | Bin .../images/icons/list_12x11.png | Bin .../images/icons/list_16x14.png | Bin .../images/icons/list_24x21.png | Bin .../images/icons/list_32x28.png | Bin .../images/icons/list_8x7.png | Bin .../images/icons/list_nested_12x11.png | Bin .../images/icons/list_nested_16x14.png | Bin .../images/icons/list_nested_24x21.png | Bin .../images/icons/list_nested_32x28.png | Bin .../images/icons/list_nested_8x7.png | Bin .../images/icons/loop_12x12.png | Bin .../images/icons/loop_16x16.png | Bin .../images/icons/loop_24x24.png | Bin .../images/icons/loop_32x32.png | Bin .../images/icons/loop_8x8.png | Bin .../images/icons/loop_alt1_12x9.png | Bin .../images/icons/loop_alt1_16x12.png | Bin .../images/icons/loop_alt1_24x18.png | Bin .../images/icons/loop_alt1_32x24.png | Bin .../images/icons/loop_alt1_8x6.png | Bin .../images/icons/loop_alt2_12x11.png | Bin .../images/icons/loop_alt2_16x14.png | Bin .../images/icons/loop_alt2_24x21.png | Bin .../images/icons/loop_alt2_32x28.png | Bin .../images/icons/loop_alt2_8x7.png | Bin .../images/icons/loop_alt3_12x9.png | Bin .../images/icons/loop_alt3_16x12.png | Bin .../images/icons/loop_alt3_24x18.png | Bin .../images/icons/loop_alt3_32x24.png | Bin .../images/icons/loop_alt3_8x6.png | Bin .../images/icons/loop_alt4_12x9.png | Bin .../images/icons/loop_alt4_16x12.png | Bin .../images/icons/loop_alt4_24x18.png | Bin .../images/icons/loop_alt4_32x24.png | Bin .../images/icons/loop_alt4_8x6.png | Bin .../images/icons/magnifying_glass_12x12.png | Bin .../images/icons/magnifying_glass_16x16.png | Bin .../images/icons/magnifying_glass_24x24.png | Bin .../images/icons/magnifying_glass_32x32.png | Bin .../images/icons/magnifying_glass_8x8.png | Bin .../images/icons/mic_18x24.png | Bin .../images/icons/new_window_16x16.png | Bin .../images/icons/new_window_24x24.png | Bin .../images/icons/pause_12x16.png | Bin .../images/icons/pause_18x24.png | Bin .../images/icons/pause_24x32.png | Bin .../images/icons/pause_32x32.png | Bin .../images/icons/pause_6x8.png | Bin .../images/icons/pause_9x12.png | Bin .../images/icons/play_12x16.png | Bin .../images/icons/play_18x24.png | Bin .../images/icons/play_24x32.png | Bin .../images/icons/play_32x32.png | Bin .../images/icons/play_6x8.png | Bin .../images/icons/play_9x12.png | Bin .../images/icons/play_alt_12x12.png | Bin .../images/icons/play_alt_16x16.png | Bin .../images/icons/play_alt_24x24.png | Bin .../images/icons/play_alt_32x32.png | Bin .../images/icons/play_alt_8x8.png | Bin .../images/icons/reload_12x14.png | Bin .../images/icons/reload_18x21.png | Bin .../images/icons/reload_24x28.png | Bin .../images/icons/reload_6x7.png | Bin .../images/icons/reload_9x11.png | Bin .../images/icons/reload_alt_12x14.png | Bin .../images/icons/reload_alt_18x21.png | Bin .../images/icons/reload_alt_24x28.png | Bin .../images/icons/reload_alt_6x7.png | Bin .../images/icons/reload_alt_9x11.png | Bin .../images/icons/user_24x32.png | Bin .../images/icons/volume_12x9.png | Bin .../images/icons/volume_16x12.png | Bin .../images/icons/volume_24x18.png | Bin .../images/icons/volume_32x24.png | Bin .../images/icons/volume_8x6.png | Bin .../images/icons/volume_mute_12x9.png | Bin .../images/icons/volume_mute_16x12.png | Bin .../images/icons/volume_mute_24x18.png | Bin .../images/icons/volume_mute_32x24.png | Bin .../images/icons/volume_mute_8x6.png | Bin .../images/loader.gif | Bin .../images/start.jpg | Bin {webclient => webclient (old)}/index.html | 0 {webclient => webclient (old)}/js/add2home.js | 0 {webclient => webclient (old)}/js/controls.js | 0 .../js/fastclick.js | 0 .../js/functionsvars.js | 0 {webclient => webclient (old)}/js/gui.js | 0 .../js/iscroll-lite.js | 0 {webclient => webclient (old)}/js/iscroll.js | 0 .../js/jquery-1.10.2.min.js | 0 .../js/jquery-1.10.2.min.map | 0 .../js/jquery-1.8.3.js | 0 .../js/jquery-1.8.3.min.js | 0 .../js/jquery.ba-hashchange.min.js | 0 .../js/jquery.cookie.js | 0 .../js/jquery.mobile-1.4.0-beta.1.js | 0 .../js/jquery.mobile-1.4.0-beta.1.min.js | 0 .../js/jquery.mobile-1.4.0-beta.1.min.map | 0 .../jquery.mobile.iscrollview-closure-min.js | 0 .../js/jquery.mobile.iscrollview-yui-min.js | 0 .../js/jquery.mobile.iscrollview.js | 0 .../js/jquery.touchwipe.min.js | 0 .../js/jquery.truncate.min.js | 0 .../js/lastfm.api.cache.js | 0 .../js/lastfm.api.js | 0 .../js/lastfm.api.md5.js | 0 {webclient => webclient (old)}/js/lastfm.js | 0 {webclient => webclient (old)}/js/library.js | 0 .../js/process_ws.js | 0 {webclient => webclient (old)}/mb.manifest | 0 301 files changed, 17 insertions(+), 17 deletions(-) rename {webclient => webclient (old)}/css/add2home.css (100%) rename {webclient => webclient (old)}/css/images/ajax-loader.gif (100%) rename {webclient => webclient (old)}/css/images/icons-18-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-18-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-36-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-36-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/action-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/action-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/alert-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/alert-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-d-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-d-l-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-d-l-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-d-r-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-d-r-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-d-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-l-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-l-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-r-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-r-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-u-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-u-l-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-u-l-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-u-r-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-u-r-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/arrow-u-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/audio-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/audio-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/back-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/back-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/bars-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/bars-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/bullets-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/bullets-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/calendar-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/calendar-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/camera-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/camera-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-d-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-d-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-l-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-l-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-r-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-r-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-u-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/carat-u-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/check-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/check-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/clock-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/clock-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/cloud-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/cloud-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/comment-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/comment-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/delete-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/delete-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/edit-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/edit-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/eye-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/eye-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/forbidden-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/forbidden-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/forward-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/forward-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/gear-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/gear-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/grid-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/grid-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/heart-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/heart-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/home-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/home-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/info-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/info-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/location-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/location-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/lock-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/lock-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/mail-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/mail-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/minus-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/minus-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/navigation-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/navigation-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/phone-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/phone-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/plus-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/plus-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/power-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/power-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/recycle-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/recycle-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/refresh-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/refresh-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/search-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/search-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/shop-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/shop-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/star-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/star-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/tag-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/tag-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/user-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/user-white.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/video-black.png (100%) rename {webclient => webclient (old)}/css/images/icons-png/video-white.png (100%) rename {webclient => webclient (old)}/css/iscroll-pull-icon@2x.png (100%) rename {webclient => webclient (old)}/css/jquery.mobile-1.4.0-beta.1.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile-1.4.0-beta.1.min.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.external-png-1.4.0-beta.1.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.external-png-1.4.0-beta.1.min.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.inline-png-1.4.0-beta.1.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.inline-png-1.4.0-beta.1.min.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.inline-svg-1.4.0-beta.1.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.inline-svg-1.4.0-beta.1.min.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.iscrollview-pull.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.iscrollview.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.structure-1.4.0-beta.1.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.structure-1.4.0-beta.1.min.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.theme-1.4.0-beta.1.css (100%) rename {webclient => webclient (old)}/css/jquery.mobile.theme-1.4.0-beta.1.min.css (100%) rename {webclient => webclient (old)}/css/webclient.css (100%) rename {webclient => webclient (old)}/images/ajax-loader.gif (100%) rename {webclient => webclient (old)}/images/empty.png (100%) rename {webclient => webclient (old)}/images/icons-18-black.png (100%) rename {webclient => webclient (old)}/images/icons-18-white.png (100%) rename {webclient => webclient (old)}/images/icons-36-black.png (100%) rename {webclient => webclient (old)}/images/icons-36-white.png (100%) rename {webclient => webclient (old)}/images/icons/AUTHORS (100%) rename {webclient => webclient (old)}/images/icons/LICENSE (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_alt1_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_alt1_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_alt1_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_alt1_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_down_alt1_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_left_alt1_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_left_alt1_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_left_alt1_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/arrow_left_alt1_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/cd_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/cd_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/cd_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/cd_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/cd_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/cog_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/cog_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/cog_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/cog_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/cog_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/first_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/first_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/first_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/first_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/first_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/fork_21x24.png (100%) rename {webclient => webclient (old)}/images/icons/headphones_12x11.png (100%) rename {webclient => webclient (old)}/images/icons/headphones_16x14.png (100%) rename {webclient => webclient (old)}/images/icons/headphones_24x21.png (100%) rename {webclient => webclient (old)}/images/icons/headphones_32x28.png (100%) rename {webclient => webclient (old)}/images/icons/headphones_8x7.png (100%) rename {webclient => webclient (old)}/images/icons/heart_fill_12x11.png (100%) rename {webclient => webclient (old)}/images/icons/heart_fill_16x14.png (100%) rename {webclient => webclient (old)}/images/icons/heart_fill_24x21.png (100%) rename {webclient => webclient (old)}/images/icons/heart_fill_32x28.png (100%) rename {webclient => webclient (old)}/images/icons/heart_fill_8x7.png (100%) rename {webclient => webclient (old)}/images/icons/heart_stroke_12x11.png (100%) rename {webclient => webclient (old)}/images/icons/heart_stroke_16x14.png (100%) rename {webclient => webclient (old)}/images/icons/heart_stroke_24x21.png (100%) rename {webclient => webclient (old)}/images/icons/heart_stroke_32x28.png (100%) rename {webclient => webclient (old)}/images/icons/heart_stroke_8x7.png (100%) rename {webclient => webclient (old)}/images/icons/info_12x24.png (100%) rename {webclient => webclient (old)}/images/icons/info_16x32.png (100%) rename {webclient => webclient (old)}/images/icons/info_4x8.png (100%) rename {webclient => webclient (old)}/images/icons/info_6x12.png (100%) rename {webclient => webclient (old)}/images/icons/info_8x16.png (100%) rename {webclient => webclient (old)}/images/icons/last_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/last_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/last_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/last_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/last_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/layers_24x21.png (100%) rename {webclient => webclient (old)}/images/icons/list_12x11.png (100%) rename {webclient => webclient (old)}/images/icons/list_16x14.png (100%) rename {webclient => webclient (old)}/images/icons/list_24x21.png (100%) rename {webclient => webclient (old)}/images/icons/list_32x28.png (100%) rename {webclient => webclient (old)}/images/icons/list_8x7.png (100%) rename {webclient => webclient (old)}/images/icons/list_nested_12x11.png (100%) rename {webclient => webclient (old)}/images/icons/list_nested_16x14.png (100%) rename {webclient => webclient (old)}/images/icons/list_nested_24x21.png (100%) rename {webclient => webclient (old)}/images/icons/list_nested_32x28.png (100%) rename {webclient => webclient (old)}/images/icons/list_nested_8x7.png (100%) rename {webclient => webclient (old)}/images/icons/loop_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/loop_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/loop_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/loop_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/loop_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt1_12x9.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt1_16x12.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt1_24x18.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt1_32x24.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt1_8x6.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt2_12x11.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt2_16x14.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt2_24x21.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt2_32x28.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt2_8x7.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt3_12x9.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt3_16x12.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt3_24x18.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt3_32x24.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt3_8x6.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt4_12x9.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt4_16x12.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt4_24x18.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt4_32x24.png (100%) rename {webclient => webclient (old)}/images/icons/loop_alt4_8x6.png (100%) rename {webclient => webclient (old)}/images/icons/magnifying_glass_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/magnifying_glass_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/magnifying_glass_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/magnifying_glass_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/magnifying_glass_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/mic_18x24.png (100%) rename {webclient => webclient (old)}/images/icons/new_window_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/new_window_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/pause_12x16.png (100%) rename {webclient => webclient (old)}/images/icons/pause_18x24.png (100%) rename {webclient => webclient (old)}/images/icons/pause_24x32.png (100%) rename {webclient => webclient (old)}/images/icons/pause_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/pause_6x8.png (100%) rename {webclient => webclient (old)}/images/icons/pause_9x12.png (100%) rename {webclient => webclient (old)}/images/icons/play_12x16.png (100%) rename {webclient => webclient (old)}/images/icons/play_18x24.png (100%) rename {webclient => webclient (old)}/images/icons/play_24x32.png (100%) rename {webclient => webclient (old)}/images/icons/play_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/play_6x8.png (100%) rename {webclient => webclient (old)}/images/icons/play_9x12.png (100%) rename {webclient => webclient (old)}/images/icons/play_alt_12x12.png (100%) rename {webclient => webclient (old)}/images/icons/play_alt_16x16.png (100%) rename {webclient => webclient (old)}/images/icons/play_alt_24x24.png (100%) rename {webclient => webclient (old)}/images/icons/play_alt_32x32.png (100%) rename {webclient => webclient (old)}/images/icons/play_alt_8x8.png (100%) rename {webclient => webclient (old)}/images/icons/reload_12x14.png (100%) rename {webclient => webclient (old)}/images/icons/reload_18x21.png (100%) rename {webclient => webclient (old)}/images/icons/reload_24x28.png (100%) rename {webclient => webclient (old)}/images/icons/reload_6x7.png (100%) rename {webclient => webclient (old)}/images/icons/reload_9x11.png (100%) rename {webclient => webclient (old)}/images/icons/reload_alt_12x14.png (100%) rename {webclient => webclient (old)}/images/icons/reload_alt_18x21.png (100%) rename {webclient => webclient (old)}/images/icons/reload_alt_24x28.png (100%) rename {webclient => webclient (old)}/images/icons/reload_alt_6x7.png (100%) rename {webclient => webclient (old)}/images/icons/reload_alt_9x11.png (100%) rename {webclient => webclient (old)}/images/icons/user_24x32.png (100%) rename {webclient => webclient (old)}/images/icons/volume_12x9.png (100%) rename {webclient => webclient (old)}/images/icons/volume_16x12.png (100%) rename {webclient => webclient (old)}/images/icons/volume_24x18.png (100%) rename {webclient => webclient (old)}/images/icons/volume_32x24.png (100%) rename {webclient => webclient (old)}/images/icons/volume_8x6.png (100%) rename {webclient => webclient (old)}/images/icons/volume_mute_12x9.png (100%) rename {webclient => webclient (old)}/images/icons/volume_mute_16x12.png (100%) rename {webclient => webclient (old)}/images/icons/volume_mute_24x18.png (100%) rename {webclient => webclient (old)}/images/icons/volume_mute_32x24.png (100%) rename {webclient => webclient (old)}/images/icons/volume_mute_8x6.png (100%) rename {webclient => webclient (old)}/images/loader.gif (100%) rename {webclient => webclient (old)}/images/start.jpg (100%) rename {webclient => webclient (old)}/index.html (100%) rename {webclient => webclient (old)}/js/add2home.js (100%) rename {webclient => webclient (old)}/js/controls.js (100%) rename {webclient => webclient (old)}/js/fastclick.js (100%) rename {webclient => webclient (old)}/js/functionsvars.js (100%) rename {webclient => webclient (old)}/js/gui.js (100%) rename {webclient => webclient (old)}/js/iscroll-lite.js (100%) rename {webclient => webclient (old)}/js/iscroll.js (100%) rename {webclient => webclient (old)}/js/jquery-1.10.2.min.js (100%) rename {webclient => webclient (old)}/js/jquery-1.10.2.min.map (100%) rename {webclient => webclient (old)}/js/jquery-1.8.3.js (100%) rename {webclient => webclient (old)}/js/jquery-1.8.3.min.js (100%) rename {webclient => webclient (old)}/js/jquery.ba-hashchange.min.js (100%) rename {webclient => webclient (old)}/js/jquery.cookie.js (100%) rename {webclient => webclient (old)}/js/jquery.mobile-1.4.0-beta.1.js (100%) rename {webclient => webclient (old)}/js/jquery.mobile-1.4.0-beta.1.min.js (100%) rename {webclient => webclient (old)}/js/jquery.mobile-1.4.0-beta.1.min.map (100%) rename {webclient => webclient (old)}/js/jquery.mobile.iscrollview-closure-min.js (100%) rename {webclient => webclient (old)}/js/jquery.mobile.iscrollview-yui-min.js (100%) rename {webclient => webclient (old)}/js/jquery.mobile.iscrollview.js (100%) rename {webclient => webclient (old)}/js/jquery.touchwipe.min.js (100%) rename {webclient => webclient (old)}/js/jquery.truncate.min.js (100%) rename {webclient => webclient (old)}/js/lastfm.api.cache.js (100%) rename {webclient => webclient (old)}/js/lastfm.api.js (100%) rename {webclient => webclient (old)}/js/lastfm.api.md5.js (100%) rename {webclient => webclient (old)}/js/lastfm.js (100%) rename {webclient => webclient (old)}/js/library.js (100%) rename {webclient => webclient (old)}/js/process_ws.js (100%) rename {webclient => webclient (old)}/mb.manifest (100%) diff --git a/flatclient/css/webclient.css b/flatclient/css/webclient.css index 11036ae..0f237cd 100755 --- a/flatclient/css/webclient.css +++ b/flatclient/css/webclient.css @@ -319,7 +319,7 @@ background-position: 4px 51%; } .currenttrack { - background-image: url('../images/icons/play_alt_16x16.png'); + background-image: url('../images/icons/play_alt_16x16.png'); background-repeat: no-repeat; background-color: #eee; background-position: 4px 50%; @@ -332,9 +332,6 @@ margin-left: 20px; } - - - .song .moreBtn{ float: right; padding: 15px 18px 12px 22px; diff --git a/flatclient/js/controls.js b/flatclient/js/controls.js index c7dc3a7..fffce95 100755 --- a/flatclient/js/controls.js +++ b/flatclient/js/controls.js @@ -46,18 +46,20 @@ function playTrack(addtoqueue) { return false; } -// first add track to be played, then the other tracks +//normal mopidy.tracklist.add(tracks); -// mopidy.tracklist.add(null, 0, playlisturi); - mopidy.tracklist.add(tracks); //.slice(selected, selected + 1) ); +//test mopidy.tracklist.add(null, 0, playlisturi); + +// first add track to be played, then the other tracks + mopidy.tracklist.add(tracks.slice(selected, selected + 1) ); //wait 1.5 second before adding the rest to give server the time to start playing - /* setTimeout(function() { - mopidy.tracklist.add(tracks.slice(0, selected), 0); - if (selected < tracks.length) { - mopidy.tracklist.add(tracks.slice(selected + 1) ); - } - }, 1500); - */ + setTimeout(function() { + mopidy.tracklist.add(tracks.slice(0, selected), 0); + if (selected < tracks.length) { + mopidy.tracklist.add(tracks.slice(selected + 1) ); + } + }, 1500); + // mopidy.playback.changeTrack(tracks[selected]); for (var i = 0; i <= selected; i++) { diff --git a/flatclient/js/gui.js b/flatclient/js/gui.js index 2e2283f..b3e39a0 100755 --- a/flatclient/js/gui.js +++ b/flatclient/js/gui.js @@ -42,7 +42,7 @@ function resizeMb() { //initialize iScroll if MobileWebkit and large window - if (isMobileWebkit && $(window).width() > 480) { +/* if (isMobileWebkit && $(window).width() > 480) { if (!playlistslistScroll) { playlistslistScroll = new iScroll('playlistslistdiv'); playlisttracksScroll = new iScroll('playlisttracksdiv'); @@ -55,7 +55,7 @@ function resizeMb() { playlisttracksScroll = null; } } - +*/ // //set height of playlist scrollers if ($(window).width() > 480) { @@ -68,11 +68,12 @@ function resizeMb() { $('.scroll').addClass('height', '99%').addClass('width', '99%'); $('#playlistspane').addClass('height', '99%').addClass('width', '99%'); } - +/* if (isMobileWebkit && ($(window).width() > 480)) { playlistslistScroll.refresh(); playlisttracksScroll.refresh(); } +*/ } function setSongInfo(data) { diff --git a/webclient/css/add2home.css b/webclient (old)/css/add2home.css similarity index 100% rename from webclient/css/add2home.css rename to webclient (old)/css/add2home.css diff --git a/webclient/css/images/ajax-loader.gif b/webclient (old)/css/images/ajax-loader.gif similarity index 100% rename from webclient/css/images/ajax-loader.gif rename to webclient (old)/css/images/ajax-loader.gif diff --git a/webclient/css/images/icons-18-black.png b/webclient (old)/css/images/icons-18-black.png similarity index 100% rename from webclient/css/images/icons-18-black.png rename to webclient (old)/css/images/icons-18-black.png diff --git a/webclient/css/images/icons-18-white.png b/webclient (old)/css/images/icons-18-white.png similarity index 100% rename from webclient/css/images/icons-18-white.png rename to webclient (old)/css/images/icons-18-white.png diff --git a/webclient/css/images/icons-36-black.png b/webclient (old)/css/images/icons-36-black.png similarity index 100% rename from webclient/css/images/icons-36-black.png rename to webclient (old)/css/images/icons-36-black.png diff --git a/webclient/css/images/icons-36-white.png b/webclient (old)/css/images/icons-36-white.png similarity index 100% rename from webclient/css/images/icons-36-white.png rename to webclient (old)/css/images/icons-36-white.png diff --git a/webclient/css/images/icons-png/action-black.png b/webclient (old)/css/images/icons-png/action-black.png similarity index 100% rename from webclient/css/images/icons-png/action-black.png rename to webclient (old)/css/images/icons-png/action-black.png diff --git a/webclient/css/images/icons-png/action-white.png b/webclient (old)/css/images/icons-png/action-white.png similarity index 100% rename from webclient/css/images/icons-png/action-white.png rename to webclient (old)/css/images/icons-png/action-white.png diff --git a/webclient/css/images/icons-png/alert-black.png b/webclient (old)/css/images/icons-png/alert-black.png similarity index 100% rename from webclient/css/images/icons-png/alert-black.png rename to webclient (old)/css/images/icons-png/alert-black.png diff --git a/webclient/css/images/icons-png/alert-white.png b/webclient (old)/css/images/icons-png/alert-white.png similarity index 100% rename from webclient/css/images/icons-png/alert-white.png rename to webclient (old)/css/images/icons-png/alert-white.png diff --git a/webclient/css/images/icons-png/arrow-d-black.png b/webclient (old)/css/images/icons-png/arrow-d-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-d-black.png rename to webclient (old)/css/images/icons-png/arrow-d-black.png diff --git a/webclient/css/images/icons-png/arrow-d-l-black.png b/webclient (old)/css/images/icons-png/arrow-d-l-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-d-l-black.png rename to webclient (old)/css/images/icons-png/arrow-d-l-black.png diff --git a/webclient/css/images/icons-png/arrow-d-l-white.png b/webclient (old)/css/images/icons-png/arrow-d-l-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-d-l-white.png rename to webclient (old)/css/images/icons-png/arrow-d-l-white.png diff --git a/webclient/css/images/icons-png/arrow-d-r-black.png b/webclient (old)/css/images/icons-png/arrow-d-r-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-d-r-black.png rename to webclient (old)/css/images/icons-png/arrow-d-r-black.png diff --git a/webclient/css/images/icons-png/arrow-d-r-white.png b/webclient (old)/css/images/icons-png/arrow-d-r-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-d-r-white.png rename to webclient (old)/css/images/icons-png/arrow-d-r-white.png diff --git a/webclient/css/images/icons-png/arrow-d-white.png b/webclient (old)/css/images/icons-png/arrow-d-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-d-white.png rename to webclient (old)/css/images/icons-png/arrow-d-white.png diff --git a/webclient/css/images/icons-png/arrow-l-black.png b/webclient (old)/css/images/icons-png/arrow-l-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-l-black.png rename to webclient (old)/css/images/icons-png/arrow-l-black.png diff --git a/webclient/css/images/icons-png/arrow-l-white.png b/webclient (old)/css/images/icons-png/arrow-l-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-l-white.png rename to webclient (old)/css/images/icons-png/arrow-l-white.png diff --git a/webclient/css/images/icons-png/arrow-r-black.png b/webclient (old)/css/images/icons-png/arrow-r-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-r-black.png rename to webclient (old)/css/images/icons-png/arrow-r-black.png diff --git a/webclient/css/images/icons-png/arrow-r-white.png b/webclient (old)/css/images/icons-png/arrow-r-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-r-white.png rename to webclient (old)/css/images/icons-png/arrow-r-white.png diff --git a/webclient/css/images/icons-png/arrow-u-black.png b/webclient (old)/css/images/icons-png/arrow-u-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-u-black.png rename to webclient (old)/css/images/icons-png/arrow-u-black.png diff --git a/webclient/css/images/icons-png/arrow-u-l-black.png b/webclient (old)/css/images/icons-png/arrow-u-l-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-u-l-black.png rename to webclient (old)/css/images/icons-png/arrow-u-l-black.png diff --git a/webclient/css/images/icons-png/arrow-u-l-white.png b/webclient (old)/css/images/icons-png/arrow-u-l-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-u-l-white.png rename to webclient (old)/css/images/icons-png/arrow-u-l-white.png diff --git a/webclient/css/images/icons-png/arrow-u-r-black.png b/webclient (old)/css/images/icons-png/arrow-u-r-black.png similarity index 100% rename from webclient/css/images/icons-png/arrow-u-r-black.png rename to webclient (old)/css/images/icons-png/arrow-u-r-black.png diff --git a/webclient/css/images/icons-png/arrow-u-r-white.png b/webclient (old)/css/images/icons-png/arrow-u-r-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-u-r-white.png rename to webclient (old)/css/images/icons-png/arrow-u-r-white.png diff --git a/webclient/css/images/icons-png/arrow-u-white.png b/webclient (old)/css/images/icons-png/arrow-u-white.png similarity index 100% rename from webclient/css/images/icons-png/arrow-u-white.png rename to webclient (old)/css/images/icons-png/arrow-u-white.png diff --git a/webclient/css/images/icons-png/audio-black.png b/webclient (old)/css/images/icons-png/audio-black.png similarity index 100% rename from webclient/css/images/icons-png/audio-black.png rename to webclient (old)/css/images/icons-png/audio-black.png diff --git a/webclient/css/images/icons-png/audio-white.png b/webclient (old)/css/images/icons-png/audio-white.png similarity index 100% rename from webclient/css/images/icons-png/audio-white.png rename to webclient (old)/css/images/icons-png/audio-white.png diff --git a/webclient/css/images/icons-png/back-black.png b/webclient (old)/css/images/icons-png/back-black.png similarity index 100% rename from webclient/css/images/icons-png/back-black.png rename to webclient (old)/css/images/icons-png/back-black.png diff --git a/webclient/css/images/icons-png/back-white.png b/webclient (old)/css/images/icons-png/back-white.png similarity index 100% rename from webclient/css/images/icons-png/back-white.png rename to webclient (old)/css/images/icons-png/back-white.png diff --git a/webclient/css/images/icons-png/bars-black.png b/webclient (old)/css/images/icons-png/bars-black.png similarity index 100% rename from webclient/css/images/icons-png/bars-black.png rename to webclient (old)/css/images/icons-png/bars-black.png diff --git a/webclient/css/images/icons-png/bars-white.png b/webclient (old)/css/images/icons-png/bars-white.png similarity index 100% rename from webclient/css/images/icons-png/bars-white.png rename to webclient (old)/css/images/icons-png/bars-white.png diff --git a/webclient/css/images/icons-png/bullets-black.png b/webclient (old)/css/images/icons-png/bullets-black.png similarity index 100% rename from webclient/css/images/icons-png/bullets-black.png rename to webclient (old)/css/images/icons-png/bullets-black.png diff --git a/webclient/css/images/icons-png/bullets-white.png b/webclient (old)/css/images/icons-png/bullets-white.png similarity index 100% rename from webclient/css/images/icons-png/bullets-white.png rename to webclient (old)/css/images/icons-png/bullets-white.png diff --git a/webclient/css/images/icons-png/calendar-black.png b/webclient (old)/css/images/icons-png/calendar-black.png similarity index 100% rename from webclient/css/images/icons-png/calendar-black.png rename to webclient (old)/css/images/icons-png/calendar-black.png diff --git a/webclient/css/images/icons-png/calendar-white.png b/webclient (old)/css/images/icons-png/calendar-white.png similarity index 100% rename from webclient/css/images/icons-png/calendar-white.png rename to webclient (old)/css/images/icons-png/calendar-white.png diff --git a/webclient/css/images/icons-png/camera-black.png b/webclient (old)/css/images/icons-png/camera-black.png similarity index 100% rename from webclient/css/images/icons-png/camera-black.png rename to webclient (old)/css/images/icons-png/camera-black.png diff --git a/webclient/css/images/icons-png/camera-white.png b/webclient (old)/css/images/icons-png/camera-white.png similarity index 100% rename from webclient/css/images/icons-png/camera-white.png rename to webclient (old)/css/images/icons-png/camera-white.png diff --git a/webclient/css/images/icons-png/carat-d-black.png b/webclient (old)/css/images/icons-png/carat-d-black.png similarity index 100% rename from webclient/css/images/icons-png/carat-d-black.png rename to webclient (old)/css/images/icons-png/carat-d-black.png diff --git a/webclient/css/images/icons-png/carat-d-white.png b/webclient (old)/css/images/icons-png/carat-d-white.png similarity index 100% rename from webclient/css/images/icons-png/carat-d-white.png rename to webclient (old)/css/images/icons-png/carat-d-white.png diff --git a/webclient/css/images/icons-png/carat-l-black.png b/webclient (old)/css/images/icons-png/carat-l-black.png similarity index 100% rename from webclient/css/images/icons-png/carat-l-black.png rename to webclient (old)/css/images/icons-png/carat-l-black.png diff --git a/webclient/css/images/icons-png/carat-l-white.png b/webclient (old)/css/images/icons-png/carat-l-white.png similarity index 100% rename from webclient/css/images/icons-png/carat-l-white.png rename to webclient (old)/css/images/icons-png/carat-l-white.png diff --git a/webclient/css/images/icons-png/carat-r-black.png b/webclient (old)/css/images/icons-png/carat-r-black.png similarity index 100% rename from webclient/css/images/icons-png/carat-r-black.png rename to webclient (old)/css/images/icons-png/carat-r-black.png diff --git a/webclient/css/images/icons-png/carat-r-white.png b/webclient (old)/css/images/icons-png/carat-r-white.png similarity index 100% rename from webclient/css/images/icons-png/carat-r-white.png rename to webclient (old)/css/images/icons-png/carat-r-white.png diff --git a/webclient/css/images/icons-png/carat-u-black.png b/webclient (old)/css/images/icons-png/carat-u-black.png similarity index 100% rename from webclient/css/images/icons-png/carat-u-black.png rename to webclient (old)/css/images/icons-png/carat-u-black.png diff --git a/webclient/css/images/icons-png/carat-u-white.png b/webclient (old)/css/images/icons-png/carat-u-white.png similarity index 100% rename from webclient/css/images/icons-png/carat-u-white.png rename to webclient (old)/css/images/icons-png/carat-u-white.png diff --git a/webclient/css/images/icons-png/check-black.png b/webclient (old)/css/images/icons-png/check-black.png similarity index 100% rename from webclient/css/images/icons-png/check-black.png rename to webclient (old)/css/images/icons-png/check-black.png diff --git a/webclient/css/images/icons-png/check-white.png b/webclient (old)/css/images/icons-png/check-white.png similarity index 100% rename from webclient/css/images/icons-png/check-white.png rename to webclient (old)/css/images/icons-png/check-white.png diff --git a/webclient/css/images/icons-png/clock-black.png b/webclient (old)/css/images/icons-png/clock-black.png similarity index 100% rename from webclient/css/images/icons-png/clock-black.png rename to webclient (old)/css/images/icons-png/clock-black.png diff --git a/webclient/css/images/icons-png/clock-white.png b/webclient (old)/css/images/icons-png/clock-white.png similarity index 100% rename from webclient/css/images/icons-png/clock-white.png rename to webclient (old)/css/images/icons-png/clock-white.png diff --git a/webclient/css/images/icons-png/cloud-black.png b/webclient (old)/css/images/icons-png/cloud-black.png similarity index 100% rename from webclient/css/images/icons-png/cloud-black.png rename to webclient (old)/css/images/icons-png/cloud-black.png diff --git a/webclient/css/images/icons-png/cloud-white.png b/webclient (old)/css/images/icons-png/cloud-white.png similarity index 100% rename from webclient/css/images/icons-png/cloud-white.png rename to webclient (old)/css/images/icons-png/cloud-white.png diff --git a/webclient/css/images/icons-png/comment-black.png b/webclient (old)/css/images/icons-png/comment-black.png similarity index 100% rename from webclient/css/images/icons-png/comment-black.png rename to webclient (old)/css/images/icons-png/comment-black.png diff --git a/webclient/css/images/icons-png/comment-white.png b/webclient (old)/css/images/icons-png/comment-white.png similarity index 100% rename from webclient/css/images/icons-png/comment-white.png rename to webclient (old)/css/images/icons-png/comment-white.png diff --git a/webclient/css/images/icons-png/delete-black.png b/webclient (old)/css/images/icons-png/delete-black.png similarity index 100% rename from webclient/css/images/icons-png/delete-black.png rename to webclient (old)/css/images/icons-png/delete-black.png diff --git a/webclient/css/images/icons-png/delete-white.png b/webclient (old)/css/images/icons-png/delete-white.png similarity index 100% rename from webclient/css/images/icons-png/delete-white.png rename to webclient (old)/css/images/icons-png/delete-white.png diff --git a/webclient/css/images/icons-png/edit-black.png b/webclient (old)/css/images/icons-png/edit-black.png similarity index 100% rename from webclient/css/images/icons-png/edit-black.png rename to webclient (old)/css/images/icons-png/edit-black.png diff --git a/webclient/css/images/icons-png/edit-white.png b/webclient (old)/css/images/icons-png/edit-white.png similarity index 100% rename from webclient/css/images/icons-png/edit-white.png rename to webclient (old)/css/images/icons-png/edit-white.png diff --git a/webclient/css/images/icons-png/eye-black.png b/webclient (old)/css/images/icons-png/eye-black.png similarity index 100% rename from webclient/css/images/icons-png/eye-black.png rename to webclient (old)/css/images/icons-png/eye-black.png diff --git a/webclient/css/images/icons-png/eye-white.png b/webclient (old)/css/images/icons-png/eye-white.png similarity index 100% rename from webclient/css/images/icons-png/eye-white.png rename to webclient (old)/css/images/icons-png/eye-white.png diff --git a/webclient/css/images/icons-png/forbidden-black.png b/webclient (old)/css/images/icons-png/forbidden-black.png similarity index 100% rename from webclient/css/images/icons-png/forbidden-black.png rename to webclient (old)/css/images/icons-png/forbidden-black.png diff --git a/webclient/css/images/icons-png/forbidden-white.png b/webclient (old)/css/images/icons-png/forbidden-white.png similarity index 100% rename from webclient/css/images/icons-png/forbidden-white.png rename to webclient (old)/css/images/icons-png/forbidden-white.png diff --git a/webclient/css/images/icons-png/forward-black.png b/webclient (old)/css/images/icons-png/forward-black.png similarity index 100% rename from webclient/css/images/icons-png/forward-black.png rename to webclient (old)/css/images/icons-png/forward-black.png diff --git a/webclient/css/images/icons-png/forward-white.png b/webclient (old)/css/images/icons-png/forward-white.png similarity index 100% rename from webclient/css/images/icons-png/forward-white.png rename to webclient (old)/css/images/icons-png/forward-white.png diff --git a/webclient/css/images/icons-png/gear-black.png b/webclient (old)/css/images/icons-png/gear-black.png similarity index 100% rename from webclient/css/images/icons-png/gear-black.png rename to webclient (old)/css/images/icons-png/gear-black.png diff --git a/webclient/css/images/icons-png/gear-white.png b/webclient (old)/css/images/icons-png/gear-white.png similarity index 100% rename from webclient/css/images/icons-png/gear-white.png rename to webclient (old)/css/images/icons-png/gear-white.png diff --git a/webclient/css/images/icons-png/grid-black.png b/webclient (old)/css/images/icons-png/grid-black.png similarity index 100% rename from webclient/css/images/icons-png/grid-black.png rename to webclient (old)/css/images/icons-png/grid-black.png diff --git a/webclient/css/images/icons-png/grid-white.png b/webclient (old)/css/images/icons-png/grid-white.png similarity index 100% rename from webclient/css/images/icons-png/grid-white.png rename to webclient (old)/css/images/icons-png/grid-white.png diff --git a/webclient/css/images/icons-png/heart-black.png b/webclient (old)/css/images/icons-png/heart-black.png similarity index 100% rename from webclient/css/images/icons-png/heart-black.png rename to webclient (old)/css/images/icons-png/heart-black.png diff --git a/webclient/css/images/icons-png/heart-white.png b/webclient (old)/css/images/icons-png/heart-white.png similarity index 100% rename from webclient/css/images/icons-png/heart-white.png rename to webclient (old)/css/images/icons-png/heart-white.png diff --git a/webclient/css/images/icons-png/home-black.png b/webclient (old)/css/images/icons-png/home-black.png similarity index 100% rename from webclient/css/images/icons-png/home-black.png rename to webclient (old)/css/images/icons-png/home-black.png diff --git a/webclient/css/images/icons-png/home-white.png b/webclient (old)/css/images/icons-png/home-white.png similarity index 100% rename from webclient/css/images/icons-png/home-white.png rename to webclient (old)/css/images/icons-png/home-white.png diff --git a/webclient/css/images/icons-png/info-black.png b/webclient (old)/css/images/icons-png/info-black.png similarity index 100% rename from webclient/css/images/icons-png/info-black.png rename to webclient (old)/css/images/icons-png/info-black.png diff --git a/webclient/css/images/icons-png/info-white.png b/webclient (old)/css/images/icons-png/info-white.png similarity index 100% rename from webclient/css/images/icons-png/info-white.png rename to webclient (old)/css/images/icons-png/info-white.png diff --git a/webclient/css/images/icons-png/location-black.png b/webclient (old)/css/images/icons-png/location-black.png similarity index 100% rename from webclient/css/images/icons-png/location-black.png rename to webclient (old)/css/images/icons-png/location-black.png diff --git a/webclient/css/images/icons-png/location-white.png b/webclient (old)/css/images/icons-png/location-white.png similarity index 100% rename from webclient/css/images/icons-png/location-white.png rename to webclient (old)/css/images/icons-png/location-white.png diff --git a/webclient/css/images/icons-png/lock-black.png b/webclient (old)/css/images/icons-png/lock-black.png similarity index 100% rename from webclient/css/images/icons-png/lock-black.png rename to webclient (old)/css/images/icons-png/lock-black.png diff --git a/webclient/css/images/icons-png/lock-white.png b/webclient (old)/css/images/icons-png/lock-white.png similarity index 100% rename from webclient/css/images/icons-png/lock-white.png rename to webclient (old)/css/images/icons-png/lock-white.png diff --git a/webclient/css/images/icons-png/mail-black.png b/webclient (old)/css/images/icons-png/mail-black.png similarity index 100% rename from webclient/css/images/icons-png/mail-black.png rename to webclient (old)/css/images/icons-png/mail-black.png diff --git a/webclient/css/images/icons-png/mail-white.png b/webclient (old)/css/images/icons-png/mail-white.png similarity index 100% rename from webclient/css/images/icons-png/mail-white.png rename to webclient (old)/css/images/icons-png/mail-white.png diff --git a/webclient/css/images/icons-png/minus-black.png b/webclient (old)/css/images/icons-png/minus-black.png similarity index 100% rename from webclient/css/images/icons-png/minus-black.png rename to webclient (old)/css/images/icons-png/minus-black.png diff --git a/webclient/css/images/icons-png/minus-white.png b/webclient (old)/css/images/icons-png/minus-white.png similarity index 100% rename from webclient/css/images/icons-png/minus-white.png rename to webclient (old)/css/images/icons-png/minus-white.png diff --git a/webclient/css/images/icons-png/navigation-black.png b/webclient (old)/css/images/icons-png/navigation-black.png similarity index 100% rename from webclient/css/images/icons-png/navigation-black.png rename to webclient (old)/css/images/icons-png/navigation-black.png diff --git a/webclient/css/images/icons-png/navigation-white.png b/webclient (old)/css/images/icons-png/navigation-white.png similarity index 100% rename from webclient/css/images/icons-png/navigation-white.png rename to webclient (old)/css/images/icons-png/navigation-white.png diff --git a/webclient/css/images/icons-png/phone-black.png b/webclient (old)/css/images/icons-png/phone-black.png similarity index 100% rename from webclient/css/images/icons-png/phone-black.png rename to webclient (old)/css/images/icons-png/phone-black.png diff --git a/webclient/css/images/icons-png/phone-white.png b/webclient (old)/css/images/icons-png/phone-white.png similarity index 100% rename from webclient/css/images/icons-png/phone-white.png rename to webclient (old)/css/images/icons-png/phone-white.png diff --git a/webclient/css/images/icons-png/plus-black.png b/webclient (old)/css/images/icons-png/plus-black.png similarity index 100% rename from webclient/css/images/icons-png/plus-black.png rename to webclient (old)/css/images/icons-png/plus-black.png diff --git a/webclient/css/images/icons-png/plus-white.png b/webclient (old)/css/images/icons-png/plus-white.png similarity index 100% rename from webclient/css/images/icons-png/plus-white.png rename to webclient (old)/css/images/icons-png/plus-white.png diff --git a/webclient/css/images/icons-png/power-black.png b/webclient (old)/css/images/icons-png/power-black.png similarity index 100% rename from webclient/css/images/icons-png/power-black.png rename to webclient (old)/css/images/icons-png/power-black.png diff --git a/webclient/css/images/icons-png/power-white.png b/webclient (old)/css/images/icons-png/power-white.png similarity index 100% rename from webclient/css/images/icons-png/power-white.png rename to webclient (old)/css/images/icons-png/power-white.png diff --git a/webclient/css/images/icons-png/recycle-black.png b/webclient (old)/css/images/icons-png/recycle-black.png similarity index 100% rename from webclient/css/images/icons-png/recycle-black.png rename to webclient (old)/css/images/icons-png/recycle-black.png diff --git a/webclient/css/images/icons-png/recycle-white.png b/webclient (old)/css/images/icons-png/recycle-white.png similarity index 100% rename from webclient/css/images/icons-png/recycle-white.png rename to webclient (old)/css/images/icons-png/recycle-white.png diff --git a/webclient/css/images/icons-png/refresh-black.png b/webclient (old)/css/images/icons-png/refresh-black.png similarity index 100% rename from webclient/css/images/icons-png/refresh-black.png rename to webclient (old)/css/images/icons-png/refresh-black.png diff --git a/webclient/css/images/icons-png/refresh-white.png b/webclient (old)/css/images/icons-png/refresh-white.png similarity index 100% rename from webclient/css/images/icons-png/refresh-white.png rename to webclient (old)/css/images/icons-png/refresh-white.png diff --git a/webclient/css/images/icons-png/search-black.png b/webclient (old)/css/images/icons-png/search-black.png similarity index 100% rename from webclient/css/images/icons-png/search-black.png rename to webclient (old)/css/images/icons-png/search-black.png diff --git a/webclient/css/images/icons-png/search-white.png b/webclient (old)/css/images/icons-png/search-white.png similarity index 100% rename from webclient/css/images/icons-png/search-white.png rename to webclient (old)/css/images/icons-png/search-white.png diff --git a/webclient/css/images/icons-png/shop-black.png b/webclient (old)/css/images/icons-png/shop-black.png similarity index 100% rename from webclient/css/images/icons-png/shop-black.png rename to webclient (old)/css/images/icons-png/shop-black.png diff --git a/webclient/css/images/icons-png/shop-white.png b/webclient (old)/css/images/icons-png/shop-white.png similarity index 100% rename from webclient/css/images/icons-png/shop-white.png rename to webclient (old)/css/images/icons-png/shop-white.png diff --git a/webclient/css/images/icons-png/star-black.png b/webclient (old)/css/images/icons-png/star-black.png similarity index 100% rename from webclient/css/images/icons-png/star-black.png rename to webclient (old)/css/images/icons-png/star-black.png diff --git a/webclient/css/images/icons-png/star-white.png b/webclient (old)/css/images/icons-png/star-white.png similarity index 100% rename from webclient/css/images/icons-png/star-white.png rename to webclient (old)/css/images/icons-png/star-white.png diff --git a/webclient/css/images/icons-png/tag-black.png b/webclient (old)/css/images/icons-png/tag-black.png similarity index 100% rename from webclient/css/images/icons-png/tag-black.png rename to webclient (old)/css/images/icons-png/tag-black.png diff --git a/webclient/css/images/icons-png/tag-white.png b/webclient (old)/css/images/icons-png/tag-white.png similarity index 100% rename from webclient/css/images/icons-png/tag-white.png rename to webclient (old)/css/images/icons-png/tag-white.png diff --git a/webclient/css/images/icons-png/user-black.png b/webclient (old)/css/images/icons-png/user-black.png similarity index 100% rename from webclient/css/images/icons-png/user-black.png rename to webclient (old)/css/images/icons-png/user-black.png diff --git a/webclient/css/images/icons-png/user-white.png b/webclient (old)/css/images/icons-png/user-white.png similarity index 100% rename from webclient/css/images/icons-png/user-white.png rename to webclient (old)/css/images/icons-png/user-white.png diff --git a/webclient/css/images/icons-png/video-black.png b/webclient (old)/css/images/icons-png/video-black.png similarity index 100% rename from webclient/css/images/icons-png/video-black.png rename to webclient (old)/css/images/icons-png/video-black.png diff --git a/webclient/css/images/icons-png/video-white.png b/webclient (old)/css/images/icons-png/video-white.png similarity index 100% rename from webclient/css/images/icons-png/video-white.png rename to webclient (old)/css/images/icons-png/video-white.png diff --git a/webclient/css/iscroll-pull-icon@2x.png b/webclient (old)/css/iscroll-pull-icon@2x.png similarity index 100% rename from webclient/css/iscroll-pull-icon@2x.png rename to webclient (old)/css/iscroll-pull-icon@2x.png diff --git a/webclient/css/jquery.mobile-1.4.0-beta.1.css b/webclient (old)/css/jquery.mobile-1.4.0-beta.1.css similarity index 100% rename from webclient/css/jquery.mobile-1.4.0-beta.1.css rename to webclient (old)/css/jquery.mobile-1.4.0-beta.1.css diff --git a/webclient/css/jquery.mobile-1.4.0-beta.1.min.css b/webclient (old)/css/jquery.mobile-1.4.0-beta.1.min.css similarity index 100% rename from webclient/css/jquery.mobile-1.4.0-beta.1.min.css rename to webclient (old)/css/jquery.mobile-1.4.0-beta.1.min.css diff --git a/webclient/css/jquery.mobile.external-png-1.4.0-beta.1.css b/webclient (old)/css/jquery.mobile.external-png-1.4.0-beta.1.css similarity index 100% rename from webclient/css/jquery.mobile.external-png-1.4.0-beta.1.css rename to webclient (old)/css/jquery.mobile.external-png-1.4.0-beta.1.css diff --git a/webclient/css/jquery.mobile.external-png-1.4.0-beta.1.min.css b/webclient (old)/css/jquery.mobile.external-png-1.4.0-beta.1.min.css similarity index 100% rename from webclient/css/jquery.mobile.external-png-1.4.0-beta.1.min.css rename to webclient (old)/css/jquery.mobile.external-png-1.4.0-beta.1.min.css diff --git a/webclient/css/jquery.mobile.inline-png-1.4.0-beta.1.css b/webclient (old)/css/jquery.mobile.inline-png-1.4.0-beta.1.css similarity index 100% rename from webclient/css/jquery.mobile.inline-png-1.4.0-beta.1.css rename to webclient (old)/css/jquery.mobile.inline-png-1.4.0-beta.1.css diff --git a/webclient/css/jquery.mobile.inline-png-1.4.0-beta.1.min.css b/webclient (old)/css/jquery.mobile.inline-png-1.4.0-beta.1.min.css similarity index 100% rename from webclient/css/jquery.mobile.inline-png-1.4.0-beta.1.min.css rename to webclient (old)/css/jquery.mobile.inline-png-1.4.0-beta.1.min.css diff --git a/webclient/css/jquery.mobile.inline-svg-1.4.0-beta.1.css b/webclient (old)/css/jquery.mobile.inline-svg-1.4.0-beta.1.css similarity index 100% rename from webclient/css/jquery.mobile.inline-svg-1.4.0-beta.1.css rename to webclient (old)/css/jquery.mobile.inline-svg-1.4.0-beta.1.css diff --git a/webclient/css/jquery.mobile.inline-svg-1.4.0-beta.1.min.css b/webclient (old)/css/jquery.mobile.inline-svg-1.4.0-beta.1.min.css similarity index 100% rename from webclient/css/jquery.mobile.inline-svg-1.4.0-beta.1.min.css rename to webclient (old)/css/jquery.mobile.inline-svg-1.4.0-beta.1.min.css diff --git a/webclient/css/jquery.mobile.iscrollview-pull.css b/webclient (old)/css/jquery.mobile.iscrollview-pull.css similarity index 100% rename from webclient/css/jquery.mobile.iscrollview-pull.css rename to webclient (old)/css/jquery.mobile.iscrollview-pull.css diff --git a/webclient/css/jquery.mobile.iscrollview.css b/webclient (old)/css/jquery.mobile.iscrollview.css similarity index 100% rename from webclient/css/jquery.mobile.iscrollview.css rename to webclient (old)/css/jquery.mobile.iscrollview.css diff --git a/webclient/css/jquery.mobile.structure-1.4.0-beta.1.css b/webclient (old)/css/jquery.mobile.structure-1.4.0-beta.1.css similarity index 100% rename from webclient/css/jquery.mobile.structure-1.4.0-beta.1.css rename to webclient (old)/css/jquery.mobile.structure-1.4.0-beta.1.css diff --git a/webclient/css/jquery.mobile.structure-1.4.0-beta.1.min.css b/webclient (old)/css/jquery.mobile.structure-1.4.0-beta.1.min.css similarity index 100% rename from webclient/css/jquery.mobile.structure-1.4.0-beta.1.min.css rename to webclient (old)/css/jquery.mobile.structure-1.4.0-beta.1.min.css diff --git a/webclient/css/jquery.mobile.theme-1.4.0-beta.1.css b/webclient (old)/css/jquery.mobile.theme-1.4.0-beta.1.css similarity index 100% rename from webclient/css/jquery.mobile.theme-1.4.0-beta.1.css rename to webclient (old)/css/jquery.mobile.theme-1.4.0-beta.1.css diff --git a/webclient/css/jquery.mobile.theme-1.4.0-beta.1.min.css b/webclient (old)/css/jquery.mobile.theme-1.4.0-beta.1.min.css similarity index 100% rename from webclient/css/jquery.mobile.theme-1.4.0-beta.1.min.css rename to webclient (old)/css/jquery.mobile.theme-1.4.0-beta.1.min.css diff --git a/webclient/css/webclient.css b/webclient (old)/css/webclient.css similarity index 100% rename from webclient/css/webclient.css rename to webclient (old)/css/webclient.css diff --git a/webclient/images/ajax-loader.gif b/webclient (old)/images/ajax-loader.gif similarity index 100% rename from webclient/images/ajax-loader.gif rename to webclient (old)/images/ajax-loader.gif diff --git a/webclient/images/empty.png b/webclient (old)/images/empty.png similarity index 100% rename from webclient/images/empty.png rename to webclient (old)/images/empty.png diff --git a/webclient/images/icons-18-black.png b/webclient (old)/images/icons-18-black.png similarity index 100% rename from webclient/images/icons-18-black.png rename to webclient (old)/images/icons-18-black.png diff --git a/webclient/images/icons-18-white.png b/webclient (old)/images/icons-18-white.png similarity index 100% rename from webclient/images/icons-18-white.png rename to webclient (old)/images/icons-18-white.png diff --git a/webclient/images/icons-36-black.png b/webclient (old)/images/icons-36-black.png similarity index 100% rename from webclient/images/icons-36-black.png rename to webclient (old)/images/icons-36-black.png diff --git a/webclient/images/icons-36-white.png b/webclient (old)/images/icons-36-white.png similarity index 100% rename from webclient/images/icons-36-white.png rename to webclient (old)/images/icons-36-white.png diff --git a/webclient/images/icons/AUTHORS b/webclient (old)/images/icons/AUTHORS similarity index 100% rename from webclient/images/icons/AUTHORS rename to webclient (old)/images/icons/AUTHORS diff --git a/webclient/images/icons/LICENSE b/webclient (old)/images/icons/LICENSE similarity index 100% rename from webclient/images/icons/LICENSE rename to webclient (old)/images/icons/LICENSE diff --git a/webclient/images/icons/arrow_down_12x12.png b/webclient (old)/images/icons/arrow_down_12x12.png similarity index 100% rename from webclient/images/icons/arrow_down_12x12.png rename to webclient (old)/images/icons/arrow_down_12x12.png diff --git a/webclient/images/icons/arrow_down_16x16.png b/webclient (old)/images/icons/arrow_down_16x16.png similarity index 100% rename from webclient/images/icons/arrow_down_16x16.png rename to webclient (old)/images/icons/arrow_down_16x16.png diff --git a/webclient/images/icons/arrow_down_24x24.png b/webclient (old)/images/icons/arrow_down_24x24.png similarity index 100% rename from webclient/images/icons/arrow_down_24x24.png rename to webclient (old)/images/icons/arrow_down_24x24.png diff --git a/webclient/images/icons/arrow_down_32x32.png b/webclient (old)/images/icons/arrow_down_32x32.png similarity index 100% rename from webclient/images/icons/arrow_down_32x32.png rename to webclient (old)/images/icons/arrow_down_32x32.png diff --git a/webclient/images/icons/arrow_down_8x8.png b/webclient (old)/images/icons/arrow_down_8x8.png similarity index 100% rename from webclient/images/icons/arrow_down_8x8.png rename to webclient (old)/images/icons/arrow_down_8x8.png diff --git a/webclient/images/icons/arrow_down_alt1_12x12.png b/webclient (old)/images/icons/arrow_down_alt1_12x12.png similarity index 100% rename from webclient/images/icons/arrow_down_alt1_12x12.png rename to webclient (old)/images/icons/arrow_down_alt1_12x12.png diff --git a/webclient/images/icons/arrow_down_alt1_16x16.png b/webclient (old)/images/icons/arrow_down_alt1_16x16.png similarity index 100% rename from webclient/images/icons/arrow_down_alt1_16x16.png rename to webclient (old)/images/icons/arrow_down_alt1_16x16.png diff --git a/webclient/images/icons/arrow_down_alt1_24x24.png b/webclient (old)/images/icons/arrow_down_alt1_24x24.png similarity index 100% rename from webclient/images/icons/arrow_down_alt1_24x24.png rename to webclient (old)/images/icons/arrow_down_alt1_24x24.png diff --git a/webclient/images/icons/arrow_down_alt1_32x32.png b/webclient (old)/images/icons/arrow_down_alt1_32x32.png similarity index 100% rename from webclient/images/icons/arrow_down_alt1_32x32.png rename to webclient (old)/images/icons/arrow_down_alt1_32x32.png diff --git a/webclient/images/icons/arrow_down_alt1_8x8.png b/webclient (old)/images/icons/arrow_down_alt1_8x8.png similarity index 100% rename from webclient/images/icons/arrow_down_alt1_8x8.png rename to webclient (old)/images/icons/arrow_down_alt1_8x8.png diff --git a/webclient/images/icons/arrow_left_alt1_12x12.png b/webclient (old)/images/icons/arrow_left_alt1_12x12.png similarity index 100% rename from webclient/images/icons/arrow_left_alt1_12x12.png rename to webclient (old)/images/icons/arrow_left_alt1_12x12.png diff --git a/webclient/images/icons/arrow_left_alt1_16x16.png b/webclient (old)/images/icons/arrow_left_alt1_16x16.png similarity index 100% rename from webclient/images/icons/arrow_left_alt1_16x16.png rename to webclient (old)/images/icons/arrow_left_alt1_16x16.png diff --git a/webclient/images/icons/arrow_left_alt1_24x24.png b/webclient (old)/images/icons/arrow_left_alt1_24x24.png similarity index 100% rename from webclient/images/icons/arrow_left_alt1_24x24.png rename to webclient (old)/images/icons/arrow_left_alt1_24x24.png diff --git a/webclient/images/icons/arrow_left_alt1_32x32.png b/webclient (old)/images/icons/arrow_left_alt1_32x32.png similarity index 100% rename from webclient/images/icons/arrow_left_alt1_32x32.png rename to webclient (old)/images/icons/arrow_left_alt1_32x32.png diff --git a/webclient/images/icons/cd_12x12.png b/webclient (old)/images/icons/cd_12x12.png similarity index 100% rename from webclient/images/icons/cd_12x12.png rename to webclient (old)/images/icons/cd_12x12.png diff --git a/webclient/images/icons/cd_16x16.png b/webclient (old)/images/icons/cd_16x16.png similarity index 100% rename from webclient/images/icons/cd_16x16.png rename to webclient (old)/images/icons/cd_16x16.png diff --git a/webclient/images/icons/cd_24x24.png b/webclient (old)/images/icons/cd_24x24.png similarity index 100% rename from webclient/images/icons/cd_24x24.png rename to webclient (old)/images/icons/cd_24x24.png diff --git a/webclient/images/icons/cd_32x32.png b/webclient (old)/images/icons/cd_32x32.png similarity index 100% rename from webclient/images/icons/cd_32x32.png rename to webclient (old)/images/icons/cd_32x32.png diff --git a/webclient/images/icons/cd_8x8.png b/webclient (old)/images/icons/cd_8x8.png similarity index 100% rename from webclient/images/icons/cd_8x8.png rename to webclient (old)/images/icons/cd_8x8.png diff --git a/webclient/images/icons/cog_12x12.png b/webclient (old)/images/icons/cog_12x12.png similarity index 100% rename from webclient/images/icons/cog_12x12.png rename to webclient (old)/images/icons/cog_12x12.png diff --git a/webclient/images/icons/cog_16x16.png b/webclient (old)/images/icons/cog_16x16.png similarity index 100% rename from webclient/images/icons/cog_16x16.png rename to webclient (old)/images/icons/cog_16x16.png diff --git a/webclient/images/icons/cog_24x24.png b/webclient (old)/images/icons/cog_24x24.png similarity index 100% rename from webclient/images/icons/cog_24x24.png rename to webclient (old)/images/icons/cog_24x24.png diff --git a/webclient/images/icons/cog_32x32.png b/webclient (old)/images/icons/cog_32x32.png similarity index 100% rename from webclient/images/icons/cog_32x32.png rename to webclient (old)/images/icons/cog_32x32.png diff --git a/webclient/images/icons/cog_8x8.png b/webclient (old)/images/icons/cog_8x8.png similarity index 100% rename from webclient/images/icons/cog_8x8.png rename to webclient (old)/images/icons/cog_8x8.png diff --git a/webclient/images/icons/first_12x12.png b/webclient (old)/images/icons/first_12x12.png similarity index 100% rename from webclient/images/icons/first_12x12.png rename to webclient (old)/images/icons/first_12x12.png diff --git a/webclient/images/icons/first_16x16.png b/webclient (old)/images/icons/first_16x16.png similarity index 100% rename from webclient/images/icons/first_16x16.png rename to webclient (old)/images/icons/first_16x16.png diff --git a/webclient/images/icons/first_24x24.png b/webclient (old)/images/icons/first_24x24.png similarity index 100% rename from webclient/images/icons/first_24x24.png rename to webclient (old)/images/icons/first_24x24.png diff --git a/webclient/images/icons/first_32x32.png b/webclient (old)/images/icons/first_32x32.png similarity index 100% rename from webclient/images/icons/first_32x32.png rename to webclient (old)/images/icons/first_32x32.png diff --git a/webclient/images/icons/first_8x8.png b/webclient (old)/images/icons/first_8x8.png similarity index 100% rename from webclient/images/icons/first_8x8.png rename to webclient (old)/images/icons/first_8x8.png diff --git a/webclient/images/icons/fork_21x24.png b/webclient (old)/images/icons/fork_21x24.png similarity index 100% rename from webclient/images/icons/fork_21x24.png rename to webclient (old)/images/icons/fork_21x24.png diff --git a/webclient/images/icons/headphones_12x11.png b/webclient (old)/images/icons/headphones_12x11.png similarity index 100% rename from webclient/images/icons/headphones_12x11.png rename to webclient (old)/images/icons/headphones_12x11.png diff --git a/webclient/images/icons/headphones_16x14.png b/webclient (old)/images/icons/headphones_16x14.png similarity index 100% rename from webclient/images/icons/headphones_16x14.png rename to webclient (old)/images/icons/headphones_16x14.png diff --git a/webclient/images/icons/headphones_24x21.png b/webclient (old)/images/icons/headphones_24x21.png similarity index 100% rename from webclient/images/icons/headphones_24x21.png rename to webclient (old)/images/icons/headphones_24x21.png diff --git a/webclient/images/icons/headphones_32x28.png b/webclient (old)/images/icons/headphones_32x28.png similarity index 100% rename from webclient/images/icons/headphones_32x28.png rename to webclient (old)/images/icons/headphones_32x28.png diff --git a/webclient/images/icons/headphones_8x7.png b/webclient (old)/images/icons/headphones_8x7.png similarity index 100% rename from webclient/images/icons/headphones_8x7.png rename to webclient (old)/images/icons/headphones_8x7.png diff --git a/webclient/images/icons/heart_fill_12x11.png b/webclient (old)/images/icons/heart_fill_12x11.png similarity index 100% rename from webclient/images/icons/heart_fill_12x11.png rename to webclient (old)/images/icons/heart_fill_12x11.png diff --git a/webclient/images/icons/heart_fill_16x14.png b/webclient (old)/images/icons/heart_fill_16x14.png similarity index 100% rename from webclient/images/icons/heart_fill_16x14.png rename to webclient (old)/images/icons/heart_fill_16x14.png diff --git a/webclient/images/icons/heart_fill_24x21.png b/webclient (old)/images/icons/heart_fill_24x21.png similarity index 100% rename from webclient/images/icons/heart_fill_24x21.png rename to webclient (old)/images/icons/heart_fill_24x21.png diff --git a/webclient/images/icons/heart_fill_32x28.png b/webclient (old)/images/icons/heart_fill_32x28.png similarity index 100% rename from webclient/images/icons/heart_fill_32x28.png rename to webclient (old)/images/icons/heart_fill_32x28.png diff --git a/webclient/images/icons/heart_fill_8x7.png b/webclient (old)/images/icons/heart_fill_8x7.png similarity index 100% rename from webclient/images/icons/heart_fill_8x7.png rename to webclient (old)/images/icons/heart_fill_8x7.png diff --git a/webclient/images/icons/heart_stroke_12x11.png b/webclient (old)/images/icons/heart_stroke_12x11.png similarity index 100% rename from webclient/images/icons/heart_stroke_12x11.png rename to webclient (old)/images/icons/heart_stroke_12x11.png diff --git a/webclient/images/icons/heart_stroke_16x14.png b/webclient (old)/images/icons/heart_stroke_16x14.png similarity index 100% rename from webclient/images/icons/heart_stroke_16x14.png rename to webclient (old)/images/icons/heart_stroke_16x14.png diff --git a/webclient/images/icons/heart_stroke_24x21.png b/webclient (old)/images/icons/heart_stroke_24x21.png similarity index 100% rename from webclient/images/icons/heart_stroke_24x21.png rename to webclient (old)/images/icons/heart_stroke_24x21.png diff --git a/webclient/images/icons/heart_stroke_32x28.png b/webclient (old)/images/icons/heart_stroke_32x28.png similarity index 100% rename from webclient/images/icons/heart_stroke_32x28.png rename to webclient (old)/images/icons/heart_stroke_32x28.png diff --git a/webclient/images/icons/heart_stroke_8x7.png b/webclient (old)/images/icons/heart_stroke_8x7.png similarity index 100% rename from webclient/images/icons/heart_stroke_8x7.png rename to webclient (old)/images/icons/heart_stroke_8x7.png diff --git a/webclient/images/icons/info_12x24.png b/webclient (old)/images/icons/info_12x24.png similarity index 100% rename from webclient/images/icons/info_12x24.png rename to webclient (old)/images/icons/info_12x24.png diff --git a/webclient/images/icons/info_16x32.png b/webclient (old)/images/icons/info_16x32.png similarity index 100% rename from webclient/images/icons/info_16x32.png rename to webclient (old)/images/icons/info_16x32.png diff --git a/webclient/images/icons/info_4x8.png b/webclient (old)/images/icons/info_4x8.png similarity index 100% rename from webclient/images/icons/info_4x8.png rename to webclient (old)/images/icons/info_4x8.png diff --git a/webclient/images/icons/info_6x12.png b/webclient (old)/images/icons/info_6x12.png similarity index 100% rename from webclient/images/icons/info_6x12.png rename to webclient (old)/images/icons/info_6x12.png diff --git a/webclient/images/icons/info_8x16.png b/webclient (old)/images/icons/info_8x16.png similarity index 100% rename from webclient/images/icons/info_8x16.png rename to webclient (old)/images/icons/info_8x16.png diff --git a/webclient/images/icons/last_12x12.png b/webclient (old)/images/icons/last_12x12.png similarity index 100% rename from webclient/images/icons/last_12x12.png rename to webclient (old)/images/icons/last_12x12.png diff --git a/webclient/images/icons/last_16x16.png b/webclient (old)/images/icons/last_16x16.png similarity index 100% rename from webclient/images/icons/last_16x16.png rename to webclient (old)/images/icons/last_16x16.png diff --git a/webclient/images/icons/last_24x24.png b/webclient (old)/images/icons/last_24x24.png similarity index 100% rename from webclient/images/icons/last_24x24.png rename to webclient (old)/images/icons/last_24x24.png diff --git a/webclient/images/icons/last_32x32.png b/webclient (old)/images/icons/last_32x32.png similarity index 100% rename from webclient/images/icons/last_32x32.png rename to webclient (old)/images/icons/last_32x32.png diff --git a/webclient/images/icons/last_8x8.png b/webclient (old)/images/icons/last_8x8.png similarity index 100% rename from webclient/images/icons/last_8x8.png rename to webclient (old)/images/icons/last_8x8.png diff --git a/webclient/images/icons/layers_24x21.png b/webclient (old)/images/icons/layers_24x21.png similarity index 100% rename from webclient/images/icons/layers_24x21.png rename to webclient (old)/images/icons/layers_24x21.png diff --git a/webclient/images/icons/list_12x11.png b/webclient (old)/images/icons/list_12x11.png similarity index 100% rename from webclient/images/icons/list_12x11.png rename to webclient (old)/images/icons/list_12x11.png diff --git a/webclient/images/icons/list_16x14.png b/webclient (old)/images/icons/list_16x14.png similarity index 100% rename from webclient/images/icons/list_16x14.png rename to webclient (old)/images/icons/list_16x14.png diff --git a/webclient/images/icons/list_24x21.png b/webclient (old)/images/icons/list_24x21.png similarity index 100% rename from webclient/images/icons/list_24x21.png rename to webclient (old)/images/icons/list_24x21.png diff --git a/webclient/images/icons/list_32x28.png b/webclient (old)/images/icons/list_32x28.png similarity index 100% rename from webclient/images/icons/list_32x28.png rename to webclient (old)/images/icons/list_32x28.png diff --git a/webclient/images/icons/list_8x7.png b/webclient (old)/images/icons/list_8x7.png similarity index 100% rename from webclient/images/icons/list_8x7.png rename to webclient (old)/images/icons/list_8x7.png diff --git a/webclient/images/icons/list_nested_12x11.png b/webclient (old)/images/icons/list_nested_12x11.png similarity index 100% rename from webclient/images/icons/list_nested_12x11.png rename to webclient (old)/images/icons/list_nested_12x11.png diff --git a/webclient/images/icons/list_nested_16x14.png b/webclient (old)/images/icons/list_nested_16x14.png similarity index 100% rename from webclient/images/icons/list_nested_16x14.png rename to webclient (old)/images/icons/list_nested_16x14.png diff --git a/webclient/images/icons/list_nested_24x21.png b/webclient (old)/images/icons/list_nested_24x21.png similarity index 100% rename from webclient/images/icons/list_nested_24x21.png rename to webclient (old)/images/icons/list_nested_24x21.png diff --git a/webclient/images/icons/list_nested_32x28.png b/webclient (old)/images/icons/list_nested_32x28.png similarity index 100% rename from webclient/images/icons/list_nested_32x28.png rename to webclient (old)/images/icons/list_nested_32x28.png diff --git a/webclient/images/icons/list_nested_8x7.png b/webclient (old)/images/icons/list_nested_8x7.png similarity index 100% rename from webclient/images/icons/list_nested_8x7.png rename to webclient (old)/images/icons/list_nested_8x7.png diff --git a/webclient/images/icons/loop_12x12.png b/webclient (old)/images/icons/loop_12x12.png similarity index 100% rename from webclient/images/icons/loop_12x12.png rename to webclient (old)/images/icons/loop_12x12.png diff --git a/webclient/images/icons/loop_16x16.png b/webclient (old)/images/icons/loop_16x16.png similarity index 100% rename from webclient/images/icons/loop_16x16.png rename to webclient (old)/images/icons/loop_16x16.png diff --git a/webclient/images/icons/loop_24x24.png b/webclient (old)/images/icons/loop_24x24.png similarity index 100% rename from webclient/images/icons/loop_24x24.png rename to webclient (old)/images/icons/loop_24x24.png diff --git a/webclient/images/icons/loop_32x32.png b/webclient (old)/images/icons/loop_32x32.png similarity index 100% rename from webclient/images/icons/loop_32x32.png rename to webclient (old)/images/icons/loop_32x32.png diff --git a/webclient/images/icons/loop_8x8.png b/webclient (old)/images/icons/loop_8x8.png similarity index 100% rename from webclient/images/icons/loop_8x8.png rename to webclient (old)/images/icons/loop_8x8.png diff --git a/webclient/images/icons/loop_alt1_12x9.png b/webclient (old)/images/icons/loop_alt1_12x9.png similarity index 100% rename from webclient/images/icons/loop_alt1_12x9.png rename to webclient (old)/images/icons/loop_alt1_12x9.png diff --git a/webclient/images/icons/loop_alt1_16x12.png b/webclient (old)/images/icons/loop_alt1_16x12.png similarity index 100% rename from webclient/images/icons/loop_alt1_16x12.png rename to webclient (old)/images/icons/loop_alt1_16x12.png diff --git a/webclient/images/icons/loop_alt1_24x18.png b/webclient (old)/images/icons/loop_alt1_24x18.png similarity index 100% rename from webclient/images/icons/loop_alt1_24x18.png rename to webclient (old)/images/icons/loop_alt1_24x18.png diff --git a/webclient/images/icons/loop_alt1_32x24.png b/webclient (old)/images/icons/loop_alt1_32x24.png similarity index 100% rename from webclient/images/icons/loop_alt1_32x24.png rename to webclient (old)/images/icons/loop_alt1_32x24.png diff --git a/webclient/images/icons/loop_alt1_8x6.png b/webclient (old)/images/icons/loop_alt1_8x6.png similarity index 100% rename from webclient/images/icons/loop_alt1_8x6.png rename to webclient (old)/images/icons/loop_alt1_8x6.png diff --git a/webclient/images/icons/loop_alt2_12x11.png b/webclient (old)/images/icons/loop_alt2_12x11.png similarity index 100% rename from webclient/images/icons/loop_alt2_12x11.png rename to webclient (old)/images/icons/loop_alt2_12x11.png diff --git a/webclient/images/icons/loop_alt2_16x14.png b/webclient (old)/images/icons/loop_alt2_16x14.png similarity index 100% rename from webclient/images/icons/loop_alt2_16x14.png rename to webclient (old)/images/icons/loop_alt2_16x14.png diff --git a/webclient/images/icons/loop_alt2_24x21.png b/webclient (old)/images/icons/loop_alt2_24x21.png similarity index 100% rename from webclient/images/icons/loop_alt2_24x21.png rename to webclient (old)/images/icons/loop_alt2_24x21.png diff --git a/webclient/images/icons/loop_alt2_32x28.png b/webclient (old)/images/icons/loop_alt2_32x28.png similarity index 100% rename from webclient/images/icons/loop_alt2_32x28.png rename to webclient (old)/images/icons/loop_alt2_32x28.png diff --git a/webclient/images/icons/loop_alt2_8x7.png b/webclient (old)/images/icons/loop_alt2_8x7.png similarity index 100% rename from webclient/images/icons/loop_alt2_8x7.png rename to webclient (old)/images/icons/loop_alt2_8x7.png diff --git a/webclient/images/icons/loop_alt3_12x9.png b/webclient (old)/images/icons/loop_alt3_12x9.png similarity index 100% rename from webclient/images/icons/loop_alt3_12x9.png rename to webclient (old)/images/icons/loop_alt3_12x9.png diff --git a/webclient/images/icons/loop_alt3_16x12.png b/webclient (old)/images/icons/loop_alt3_16x12.png similarity index 100% rename from webclient/images/icons/loop_alt3_16x12.png rename to webclient (old)/images/icons/loop_alt3_16x12.png diff --git a/webclient/images/icons/loop_alt3_24x18.png b/webclient (old)/images/icons/loop_alt3_24x18.png similarity index 100% rename from webclient/images/icons/loop_alt3_24x18.png rename to webclient (old)/images/icons/loop_alt3_24x18.png diff --git a/webclient/images/icons/loop_alt3_32x24.png b/webclient (old)/images/icons/loop_alt3_32x24.png similarity index 100% rename from webclient/images/icons/loop_alt3_32x24.png rename to webclient (old)/images/icons/loop_alt3_32x24.png diff --git a/webclient/images/icons/loop_alt3_8x6.png b/webclient (old)/images/icons/loop_alt3_8x6.png similarity index 100% rename from webclient/images/icons/loop_alt3_8x6.png rename to webclient (old)/images/icons/loop_alt3_8x6.png diff --git a/webclient/images/icons/loop_alt4_12x9.png b/webclient (old)/images/icons/loop_alt4_12x9.png similarity index 100% rename from webclient/images/icons/loop_alt4_12x9.png rename to webclient (old)/images/icons/loop_alt4_12x9.png diff --git a/webclient/images/icons/loop_alt4_16x12.png b/webclient (old)/images/icons/loop_alt4_16x12.png similarity index 100% rename from webclient/images/icons/loop_alt4_16x12.png rename to webclient (old)/images/icons/loop_alt4_16x12.png diff --git a/webclient/images/icons/loop_alt4_24x18.png b/webclient (old)/images/icons/loop_alt4_24x18.png similarity index 100% rename from webclient/images/icons/loop_alt4_24x18.png rename to webclient (old)/images/icons/loop_alt4_24x18.png diff --git a/webclient/images/icons/loop_alt4_32x24.png b/webclient (old)/images/icons/loop_alt4_32x24.png similarity index 100% rename from webclient/images/icons/loop_alt4_32x24.png rename to webclient (old)/images/icons/loop_alt4_32x24.png diff --git a/webclient/images/icons/loop_alt4_8x6.png b/webclient (old)/images/icons/loop_alt4_8x6.png similarity index 100% rename from webclient/images/icons/loop_alt4_8x6.png rename to webclient (old)/images/icons/loop_alt4_8x6.png diff --git a/webclient/images/icons/magnifying_glass_12x12.png b/webclient (old)/images/icons/magnifying_glass_12x12.png similarity index 100% rename from webclient/images/icons/magnifying_glass_12x12.png rename to webclient (old)/images/icons/magnifying_glass_12x12.png diff --git a/webclient/images/icons/magnifying_glass_16x16.png b/webclient (old)/images/icons/magnifying_glass_16x16.png similarity index 100% rename from webclient/images/icons/magnifying_glass_16x16.png rename to webclient (old)/images/icons/magnifying_glass_16x16.png diff --git a/webclient/images/icons/magnifying_glass_24x24.png b/webclient (old)/images/icons/magnifying_glass_24x24.png similarity index 100% rename from webclient/images/icons/magnifying_glass_24x24.png rename to webclient (old)/images/icons/magnifying_glass_24x24.png diff --git a/webclient/images/icons/magnifying_glass_32x32.png b/webclient (old)/images/icons/magnifying_glass_32x32.png similarity index 100% rename from webclient/images/icons/magnifying_glass_32x32.png rename to webclient (old)/images/icons/magnifying_glass_32x32.png diff --git a/webclient/images/icons/magnifying_glass_8x8.png b/webclient (old)/images/icons/magnifying_glass_8x8.png similarity index 100% rename from webclient/images/icons/magnifying_glass_8x8.png rename to webclient (old)/images/icons/magnifying_glass_8x8.png diff --git a/webclient/images/icons/mic_18x24.png b/webclient (old)/images/icons/mic_18x24.png similarity index 100% rename from webclient/images/icons/mic_18x24.png rename to webclient (old)/images/icons/mic_18x24.png diff --git a/webclient/images/icons/new_window_16x16.png b/webclient (old)/images/icons/new_window_16x16.png similarity index 100% rename from webclient/images/icons/new_window_16x16.png rename to webclient (old)/images/icons/new_window_16x16.png diff --git a/webclient/images/icons/new_window_24x24.png b/webclient (old)/images/icons/new_window_24x24.png similarity index 100% rename from webclient/images/icons/new_window_24x24.png rename to webclient (old)/images/icons/new_window_24x24.png diff --git a/webclient/images/icons/pause_12x16.png b/webclient (old)/images/icons/pause_12x16.png similarity index 100% rename from webclient/images/icons/pause_12x16.png rename to webclient (old)/images/icons/pause_12x16.png diff --git a/webclient/images/icons/pause_18x24.png b/webclient (old)/images/icons/pause_18x24.png similarity index 100% rename from webclient/images/icons/pause_18x24.png rename to webclient (old)/images/icons/pause_18x24.png diff --git a/webclient/images/icons/pause_24x32.png b/webclient (old)/images/icons/pause_24x32.png similarity index 100% rename from webclient/images/icons/pause_24x32.png rename to webclient (old)/images/icons/pause_24x32.png diff --git a/webclient/images/icons/pause_32x32.png b/webclient (old)/images/icons/pause_32x32.png similarity index 100% rename from webclient/images/icons/pause_32x32.png rename to webclient (old)/images/icons/pause_32x32.png diff --git a/webclient/images/icons/pause_6x8.png b/webclient (old)/images/icons/pause_6x8.png similarity index 100% rename from webclient/images/icons/pause_6x8.png rename to webclient (old)/images/icons/pause_6x8.png diff --git a/webclient/images/icons/pause_9x12.png b/webclient (old)/images/icons/pause_9x12.png similarity index 100% rename from webclient/images/icons/pause_9x12.png rename to webclient (old)/images/icons/pause_9x12.png diff --git a/webclient/images/icons/play_12x16.png b/webclient (old)/images/icons/play_12x16.png similarity index 100% rename from webclient/images/icons/play_12x16.png rename to webclient (old)/images/icons/play_12x16.png diff --git a/webclient/images/icons/play_18x24.png b/webclient (old)/images/icons/play_18x24.png similarity index 100% rename from webclient/images/icons/play_18x24.png rename to webclient (old)/images/icons/play_18x24.png diff --git a/webclient/images/icons/play_24x32.png b/webclient (old)/images/icons/play_24x32.png similarity index 100% rename from webclient/images/icons/play_24x32.png rename to webclient (old)/images/icons/play_24x32.png diff --git a/webclient/images/icons/play_32x32.png b/webclient (old)/images/icons/play_32x32.png similarity index 100% rename from webclient/images/icons/play_32x32.png rename to webclient (old)/images/icons/play_32x32.png diff --git a/webclient/images/icons/play_6x8.png b/webclient (old)/images/icons/play_6x8.png similarity index 100% rename from webclient/images/icons/play_6x8.png rename to webclient (old)/images/icons/play_6x8.png diff --git a/webclient/images/icons/play_9x12.png b/webclient (old)/images/icons/play_9x12.png similarity index 100% rename from webclient/images/icons/play_9x12.png rename to webclient (old)/images/icons/play_9x12.png diff --git a/webclient/images/icons/play_alt_12x12.png b/webclient (old)/images/icons/play_alt_12x12.png similarity index 100% rename from webclient/images/icons/play_alt_12x12.png rename to webclient (old)/images/icons/play_alt_12x12.png diff --git a/webclient/images/icons/play_alt_16x16.png b/webclient (old)/images/icons/play_alt_16x16.png similarity index 100% rename from webclient/images/icons/play_alt_16x16.png rename to webclient (old)/images/icons/play_alt_16x16.png diff --git a/webclient/images/icons/play_alt_24x24.png b/webclient (old)/images/icons/play_alt_24x24.png similarity index 100% rename from webclient/images/icons/play_alt_24x24.png rename to webclient (old)/images/icons/play_alt_24x24.png diff --git a/webclient/images/icons/play_alt_32x32.png b/webclient (old)/images/icons/play_alt_32x32.png similarity index 100% rename from webclient/images/icons/play_alt_32x32.png rename to webclient (old)/images/icons/play_alt_32x32.png diff --git a/webclient/images/icons/play_alt_8x8.png b/webclient (old)/images/icons/play_alt_8x8.png similarity index 100% rename from webclient/images/icons/play_alt_8x8.png rename to webclient (old)/images/icons/play_alt_8x8.png diff --git a/webclient/images/icons/reload_12x14.png b/webclient (old)/images/icons/reload_12x14.png similarity index 100% rename from webclient/images/icons/reload_12x14.png rename to webclient (old)/images/icons/reload_12x14.png diff --git a/webclient/images/icons/reload_18x21.png b/webclient (old)/images/icons/reload_18x21.png similarity index 100% rename from webclient/images/icons/reload_18x21.png rename to webclient (old)/images/icons/reload_18x21.png diff --git a/webclient/images/icons/reload_24x28.png b/webclient (old)/images/icons/reload_24x28.png similarity index 100% rename from webclient/images/icons/reload_24x28.png rename to webclient (old)/images/icons/reload_24x28.png diff --git a/webclient/images/icons/reload_6x7.png b/webclient (old)/images/icons/reload_6x7.png similarity index 100% rename from webclient/images/icons/reload_6x7.png rename to webclient (old)/images/icons/reload_6x7.png diff --git a/webclient/images/icons/reload_9x11.png b/webclient (old)/images/icons/reload_9x11.png similarity index 100% rename from webclient/images/icons/reload_9x11.png rename to webclient (old)/images/icons/reload_9x11.png diff --git a/webclient/images/icons/reload_alt_12x14.png b/webclient (old)/images/icons/reload_alt_12x14.png similarity index 100% rename from webclient/images/icons/reload_alt_12x14.png rename to webclient (old)/images/icons/reload_alt_12x14.png diff --git a/webclient/images/icons/reload_alt_18x21.png b/webclient (old)/images/icons/reload_alt_18x21.png similarity index 100% rename from webclient/images/icons/reload_alt_18x21.png rename to webclient (old)/images/icons/reload_alt_18x21.png diff --git a/webclient/images/icons/reload_alt_24x28.png b/webclient (old)/images/icons/reload_alt_24x28.png similarity index 100% rename from webclient/images/icons/reload_alt_24x28.png rename to webclient (old)/images/icons/reload_alt_24x28.png diff --git a/webclient/images/icons/reload_alt_6x7.png b/webclient (old)/images/icons/reload_alt_6x7.png similarity index 100% rename from webclient/images/icons/reload_alt_6x7.png rename to webclient (old)/images/icons/reload_alt_6x7.png diff --git a/webclient/images/icons/reload_alt_9x11.png b/webclient (old)/images/icons/reload_alt_9x11.png similarity index 100% rename from webclient/images/icons/reload_alt_9x11.png rename to webclient (old)/images/icons/reload_alt_9x11.png diff --git a/webclient/images/icons/user_24x32.png b/webclient (old)/images/icons/user_24x32.png similarity index 100% rename from webclient/images/icons/user_24x32.png rename to webclient (old)/images/icons/user_24x32.png diff --git a/webclient/images/icons/volume_12x9.png b/webclient (old)/images/icons/volume_12x9.png similarity index 100% rename from webclient/images/icons/volume_12x9.png rename to webclient (old)/images/icons/volume_12x9.png diff --git a/webclient/images/icons/volume_16x12.png b/webclient (old)/images/icons/volume_16x12.png similarity index 100% rename from webclient/images/icons/volume_16x12.png rename to webclient (old)/images/icons/volume_16x12.png diff --git a/webclient/images/icons/volume_24x18.png b/webclient (old)/images/icons/volume_24x18.png similarity index 100% rename from webclient/images/icons/volume_24x18.png rename to webclient (old)/images/icons/volume_24x18.png diff --git a/webclient/images/icons/volume_32x24.png b/webclient (old)/images/icons/volume_32x24.png similarity index 100% rename from webclient/images/icons/volume_32x24.png rename to webclient (old)/images/icons/volume_32x24.png diff --git a/webclient/images/icons/volume_8x6.png b/webclient (old)/images/icons/volume_8x6.png similarity index 100% rename from webclient/images/icons/volume_8x6.png rename to webclient (old)/images/icons/volume_8x6.png diff --git a/webclient/images/icons/volume_mute_12x9.png b/webclient (old)/images/icons/volume_mute_12x9.png similarity index 100% rename from webclient/images/icons/volume_mute_12x9.png rename to webclient (old)/images/icons/volume_mute_12x9.png diff --git a/webclient/images/icons/volume_mute_16x12.png b/webclient (old)/images/icons/volume_mute_16x12.png similarity index 100% rename from webclient/images/icons/volume_mute_16x12.png rename to webclient (old)/images/icons/volume_mute_16x12.png diff --git a/webclient/images/icons/volume_mute_24x18.png b/webclient (old)/images/icons/volume_mute_24x18.png similarity index 100% rename from webclient/images/icons/volume_mute_24x18.png rename to webclient (old)/images/icons/volume_mute_24x18.png diff --git a/webclient/images/icons/volume_mute_32x24.png b/webclient (old)/images/icons/volume_mute_32x24.png similarity index 100% rename from webclient/images/icons/volume_mute_32x24.png rename to webclient (old)/images/icons/volume_mute_32x24.png diff --git a/webclient/images/icons/volume_mute_8x6.png b/webclient (old)/images/icons/volume_mute_8x6.png similarity index 100% rename from webclient/images/icons/volume_mute_8x6.png rename to webclient (old)/images/icons/volume_mute_8x6.png diff --git a/webclient/images/loader.gif b/webclient (old)/images/loader.gif similarity index 100% rename from webclient/images/loader.gif rename to webclient (old)/images/loader.gif diff --git a/webclient/images/start.jpg b/webclient (old)/images/start.jpg similarity index 100% rename from webclient/images/start.jpg rename to webclient (old)/images/start.jpg diff --git a/webclient/index.html b/webclient (old)/index.html similarity index 100% rename from webclient/index.html rename to webclient (old)/index.html diff --git a/webclient/js/add2home.js b/webclient (old)/js/add2home.js similarity index 100% rename from webclient/js/add2home.js rename to webclient (old)/js/add2home.js diff --git a/webclient/js/controls.js b/webclient (old)/js/controls.js similarity index 100% rename from webclient/js/controls.js rename to webclient (old)/js/controls.js diff --git a/webclient/js/fastclick.js b/webclient (old)/js/fastclick.js similarity index 100% rename from webclient/js/fastclick.js rename to webclient (old)/js/fastclick.js diff --git a/webclient/js/functionsvars.js b/webclient (old)/js/functionsvars.js similarity index 100% rename from webclient/js/functionsvars.js rename to webclient (old)/js/functionsvars.js diff --git a/webclient/js/gui.js b/webclient (old)/js/gui.js similarity index 100% rename from webclient/js/gui.js rename to webclient (old)/js/gui.js diff --git a/webclient/js/iscroll-lite.js b/webclient (old)/js/iscroll-lite.js similarity index 100% rename from webclient/js/iscroll-lite.js rename to webclient (old)/js/iscroll-lite.js diff --git a/webclient/js/iscroll.js b/webclient (old)/js/iscroll.js similarity index 100% rename from webclient/js/iscroll.js rename to webclient (old)/js/iscroll.js diff --git a/webclient/js/jquery-1.10.2.min.js b/webclient (old)/js/jquery-1.10.2.min.js similarity index 100% rename from webclient/js/jquery-1.10.2.min.js rename to webclient (old)/js/jquery-1.10.2.min.js diff --git a/webclient/js/jquery-1.10.2.min.map b/webclient (old)/js/jquery-1.10.2.min.map similarity index 100% rename from webclient/js/jquery-1.10.2.min.map rename to webclient (old)/js/jquery-1.10.2.min.map diff --git a/webclient/js/jquery-1.8.3.js b/webclient (old)/js/jquery-1.8.3.js similarity index 100% rename from webclient/js/jquery-1.8.3.js rename to webclient (old)/js/jquery-1.8.3.js diff --git a/webclient/js/jquery-1.8.3.min.js b/webclient (old)/js/jquery-1.8.3.min.js similarity index 100% rename from webclient/js/jquery-1.8.3.min.js rename to webclient (old)/js/jquery-1.8.3.min.js diff --git a/webclient/js/jquery.ba-hashchange.min.js b/webclient (old)/js/jquery.ba-hashchange.min.js similarity index 100% rename from webclient/js/jquery.ba-hashchange.min.js rename to webclient (old)/js/jquery.ba-hashchange.min.js diff --git a/webclient/js/jquery.cookie.js b/webclient (old)/js/jquery.cookie.js similarity index 100% rename from webclient/js/jquery.cookie.js rename to webclient (old)/js/jquery.cookie.js diff --git a/webclient/js/jquery.mobile-1.4.0-beta.1.js b/webclient (old)/js/jquery.mobile-1.4.0-beta.1.js similarity index 100% rename from webclient/js/jquery.mobile-1.4.0-beta.1.js rename to webclient (old)/js/jquery.mobile-1.4.0-beta.1.js diff --git a/webclient/js/jquery.mobile-1.4.0-beta.1.min.js b/webclient (old)/js/jquery.mobile-1.4.0-beta.1.min.js similarity index 100% rename from webclient/js/jquery.mobile-1.4.0-beta.1.min.js rename to webclient (old)/js/jquery.mobile-1.4.0-beta.1.min.js diff --git a/webclient/js/jquery.mobile-1.4.0-beta.1.min.map b/webclient (old)/js/jquery.mobile-1.4.0-beta.1.min.map similarity index 100% rename from webclient/js/jquery.mobile-1.4.0-beta.1.min.map rename to webclient (old)/js/jquery.mobile-1.4.0-beta.1.min.map diff --git a/webclient/js/jquery.mobile.iscrollview-closure-min.js b/webclient (old)/js/jquery.mobile.iscrollview-closure-min.js similarity index 100% rename from webclient/js/jquery.mobile.iscrollview-closure-min.js rename to webclient (old)/js/jquery.mobile.iscrollview-closure-min.js diff --git a/webclient/js/jquery.mobile.iscrollview-yui-min.js b/webclient (old)/js/jquery.mobile.iscrollview-yui-min.js similarity index 100% rename from webclient/js/jquery.mobile.iscrollview-yui-min.js rename to webclient (old)/js/jquery.mobile.iscrollview-yui-min.js diff --git a/webclient/js/jquery.mobile.iscrollview.js b/webclient (old)/js/jquery.mobile.iscrollview.js similarity index 100% rename from webclient/js/jquery.mobile.iscrollview.js rename to webclient (old)/js/jquery.mobile.iscrollview.js diff --git a/webclient/js/jquery.touchwipe.min.js b/webclient (old)/js/jquery.touchwipe.min.js similarity index 100% rename from webclient/js/jquery.touchwipe.min.js rename to webclient (old)/js/jquery.touchwipe.min.js diff --git a/webclient/js/jquery.truncate.min.js b/webclient (old)/js/jquery.truncate.min.js similarity index 100% rename from webclient/js/jquery.truncate.min.js rename to webclient (old)/js/jquery.truncate.min.js diff --git a/webclient/js/lastfm.api.cache.js b/webclient (old)/js/lastfm.api.cache.js similarity index 100% rename from webclient/js/lastfm.api.cache.js rename to webclient (old)/js/lastfm.api.cache.js diff --git a/webclient/js/lastfm.api.js b/webclient (old)/js/lastfm.api.js similarity index 100% rename from webclient/js/lastfm.api.js rename to webclient (old)/js/lastfm.api.js diff --git a/webclient/js/lastfm.api.md5.js b/webclient (old)/js/lastfm.api.md5.js similarity index 100% rename from webclient/js/lastfm.api.md5.js rename to webclient (old)/js/lastfm.api.md5.js diff --git a/webclient/js/lastfm.js b/webclient (old)/js/lastfm.js similarity index 100% rename from webclient/js/lastfm.js rename to webclient (old)/js/lastfm.js diff --git a/webclient/js/library.js b/webclient (old)/js/library.js similarity index 100% rename from webclient/js/library.js rename to webclient (old)/js/library.js diff --git a/webclient/js/process_ws.js b/webclient (old)/js/process_ws.js similarity index 100% rename from webclient/js/process_ws.js rename to webclient (old)/js/process_ws.js diff --git a/webclient/mb.manifest b/webclient (old)/mb.manifest similarity index 100% rename from webclient/mb.manifest rename to webclient (old)/mb.manifest From f87f7f4aae6a66b773f9763eefb3985389dd7c02 Mon Sep 17 00:00:00 2001 From: woutervanwijk Date: Fri, 24 Jan 2014 11:42:44 +0100 Subject: [PATCH 02/17] Initial browsing functionality (Mopidy 0.18) (playing tracks does not work yet) --- flatclient/css/webclient.css | 2 +- flatclient/index.html | 11 ++++-- flatclient/js/controls.js | 40 +++++++++++++++++++++ flatclient/js/gui.js | 6 +++- flatclient/js/library.js | 9 ++++- flatclient/js/process_ws.js | 67 ++++++++++++++++++++++++++++++++++++ 6 files changed, 130 insertions(+), 5 deletions(-) diff --git a/flatclient/css/webclient.css b/flatclient/css/webclient.css index 0f237cd..e09a582 100755 --- a/flatclient/css/webclient.css +++ b/flatclient/css/webclient.css @@ -287,7 +287,7 @@ background-color: #ddd !important; } -#playlistslist li a { +#browselist li a, #playlistslist li a { padding: 7px; } diff --git a/flatclient/index.html b/flatclient/index.html index f8bc345..d287e41 100755 --- a/flatclient/index.html +++ b/flatclient/index.html @@ -63,6 +63,10 @@ Playlists +
  • '; - child += '

    ' + name + '

  • '; - tmp += child; - } - }; - $('#radiostationstable').html(tmp); -} - -function initRadio() { - $.cookie.json = true; - tmpRS = $.cookie('radioStations'); - radioStations = tmpRS || radioStations; - updateRadioStations(); -} - -function saveRadioStations() { - $.cookie.json = true; - $.cookie('radioStations', radioStations); -} - diff --git a/webclient (old)/js/fastclick.js b/webclient (old)/js/fastclick.js deleted file mode 100644 index 85963ef..0000000 --- a/webclient (old)/js/fastclick.js +++ /dev/null @@ -1,639 +0,0 @@ -/** - * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs. - * - * @version 0.5.6 - * @codingstandard ftlabs-jsv2 - * @copyright The Financial Times Limited [All Rights Reserved] - * @license MIT License (see LICENSE.txt) - */ - -/*jslint browser:true, node:true*/ -/*global define, Event, Node*/ - - -/** - * Instantiate fast-clicking listeners on the specificed layer. - * - * @constructor - * @param {Element} layer The layer to listen on - */ -function FastClick(layer) { - 'use strict'; - var oldOnClick, self = this; - - - /** - * Whether a click is currently being tracked. - * - * @type boolean - */ - this.trackingClick = false; - - - /** - * Timestamp for when when click tracking started. - * - * @type number - */ - this.trackingClickStart = 0; - - - /** - * The element being tracked for a click. - * - * @type EventTarget - */ - this.targetElement = null; - - - /** - * X-coordinate of touch start event. - * - * @type number - */ - this.touchStartX = 0; - - - /** - * Y-coordinate of touch start event. - * - * @type number - */ - this.touchStartY = 0; - - - /** - * ID of the last touch, retrieved from Touch.identifier. - * - * @type number - */ - this.lastTouchIdentifier = 0; - - - /** - * The FastClick layer. - * - * @type Element - */ - this.layer = layer; - - if (!layer || !layer.nodeType) { - throw new TypeError('Layer must be a document node'); - } - - /** @type function() */ - this.onClick = function() { FastClick.prototype.onClick.apply(self, arguments); }; - - /** @type function() */ - this.onTouchStart = function() { FastClick.prototype.onTouchStart.apply(self, arguments); }; - - /** @type function() */ - this.onTouchEnd = function() { FastClick.prototype.onTouchEnd.apply(self, arguments); }; - - /** @type function() */ - this.onTouchCancel = function() { FastClick.prototype.onTouchCancel.apply(self, arguments); }; - - // Devices that don't support touch don't need FastClick - if (typeof window.ontouchstart === 'undefined') { - return; - } - - // Set up event handlers as required - layer.addEventListener('click', this.onClick, true); - layer.addEventListener('touchstart', this.onTouchStart, false); - layer.addEventListener('touchend', this.onTouchEnd, false); - layer.addEventListener('touchcancel', this.onTouchCancel, false); - - // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) - // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick - // layer when they are cancelled. - if (!Event.prototype.stopImmediatePropagation) { - layer.removeEventListener = function(type, callback, capture) { - var rmv = Node.prototype.removeEventListener; - if (type === 'click') { - rmv.call(layer, type, callback.hijacked || callback, capture); - } else { - rmv.call(layer, type, callback, capture); - } - }; - - layer.addEventListener = function(type, callback, capture) { - var adv = Node.prototype.addEventListener; - if (type === 'click') { - adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) { - if (!event.propagationStopped) { - callback(event); - } - }), capture); - } else { - adv.call(layer, type, callback, capture); - } - }; - } - - // If a handler is already declared in the element's onclick attribute, it will be fired before - // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and - // adding it as listener. - if (typeof layer.onclick === 'function') { - - // Android browser on at least 3.2 requires a new reference to the function in layer.onclick - // - the old one won't work if passed to addEventListener directly. - oldOnClick = layer.onclick; - layer.addEventListener('click', function(event) { - oldOnClick(event); - }, false); - layer.onclick = null; - } -} - - -/** - * Android requires an exception for labels. - * - * @type boolean - */ -FastClick.prototype.deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0; - - -/** - * iOS requires an exception for alert confirm dialogs. - * - * @type boolean - */ -FastClick.prototype.deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent); - - -/** - * iOS 4 requires an exception for select elements. - * - * @type boolean - */ -FastClick.prototype.deviceIsIOS4 = FastClick.prototype.deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent); - - -/** - * iOS 6.0(+?) requires the target element to be manually derived - * - * @type boolean - */ -FastClick.prototype.deviceIsIOSWithBadTarget = FastClick.prototype.deviceIsIOS && (/OS ([6-9]|\d{2})_\d/).test(navigator.userAgent); - - -/** - * Determine whether a given element requires a native click. - * - * @param {EventTarget|Element} target Target DOM element - * @returns {boolean} Returns true if the element needs a native click - */ -FastClick.prototype.needsClick = function(target) { - 'use strict'; - switch (target.nodeName.toLowerCase()) { - case 'button': - case 'input': - - // File inputs need real clicks on iOS 6 due to a browser bug (issue #68) - if (this.deviceIsIOS && target.type === 'file') { - return true; - } - - // Don't send a synthetic click to disabled inputs (issue #62) - return target.disabled; - case 'label': - case 'video': - return true; - default: - return (/\bneedsclick\b/).test(target.className); - } -}; - - -/** - * Determine whether a given element requires a call to focus to simulate click into element. - * - * @param {EventTarget|Element} target Target DOM element - * @returns {boolean} Returns true if the element requires a call to focus to simulate native click. - */ -FastClick.prototype.needsFocus = function(target) { - 'use strict'; - switch (target.nodeName.toLowerCase()) { - case 'textarea': - case 'select': - return true; - case 'input': - switch (target.type) { - case 'button': - case 'checkbox': - case 'file': - case 'image': - case 'radio': - case 'submit': - return false; - } - - // No point in attempting to focus disabled inputs - return !target.disabled; - default: - return (/\bneedsfocus\b/).test(target.className); - } -}; - - -/** - * Send a click event to the specified element. - * - * @param {EventTarget|Element} targetElement - * @param {Event} event - */ -FastClick.prototype.sendClick = function(targetElement, event) { - 'use strict'; - var clickEvent, touch; - - // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24) - if (document.activeElement && document.activeElement !== targetElement) { - document.activeElement.blur(); - } - - touch = event.changedTouches[0]; - - // Synthesise a click event, with an extra attribute so it can be tracked - clickEvent = document.createEvent('MouseEvents'); - clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); - clickEvent.forwardedTouchEvent = true; - targetElement.dispatchEvent(clickEvent); -}; - - -/** - * @param {EventTarget|Element} targetElement - */ -FastClick.prototype.focus = function(targetElement) { - 'use strict'; - var length; - - if (this.deviceIsIOS && targetElement.setSelectionRange) { - length = targetElement.value.length; - targetElement.setSelectionRange(length, length); - } else { - targetElement.focus(); - } -}; - - -/** - * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it. - * - * @param {EventTarget|Element} targetElement - */ -FastClick.prototype.updateScrollParent = function(targetElement) { - 'use strict'; - var scrollParent, parentElement; - - scrollParent = targetElement.fastClickScrollParent; - - // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the - // target element was moved to another parent. - if (!scrollParent || !scrollParent.contains(targetElement)) { - parentElement = targetElement; - do { - if (parentElement.scrollHeight > parentElement.offsetHeight) { - scrollParent = parentElement; - targetElement.fastClickScrollParent = parentElement; - break; - } - - parentElement = parentElement.parentElement; - } while (parentElement); - } - - // Always update the scroll top tracker if possible. - if (scrollParent) { - scrollParent.fastClickLastScrollTop = scrollParent.scrollTop; - } -}; - - -/** - * @param {EventTarget} targetElement - * @returns {Element|EventTarget} - */ -FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) { - 'use strict'; - - // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node. - if (eventTarget.nodeType === Node.TEXT_NODE) { - return eventTarget.parentNode; - } - - return eventTarget; -}; - - -/** - * On touch start, record the position and scroll offset. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchStart = function(event) { - 'use strict'; - var targetElement, touch, selection; - - targetElement = this.getTargetElementFromEventTarget(event.target); - touch = event.targetTouches[0]; - - if (this.deviceIsIOS) { - - // Only trusted events will deselect text on iOS (issue #49) - selection = window.getSelection(); - if (selection.rangeCount && !selection.isCollapsed) { - return true; - } - - if (!this.deviceIsIOS4) { - - // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23): - // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched - // with the same identifier as the touch event that previously triggered the click that triggered the alert. - // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an - // immediately preceeding touch event (issue #52), so this fix is unavailable on that platform. - if (touch.identifier === this.lastTouchIdentifier) { - event.preventDefault(); - return false; - } - - this.lastTouchIdentifier = touch.identifier; - - // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and: - // 1) the user does a fling scroll on the scrollable layer - // 2) the user stops the fling scroll with another tap - // then the event.target of the last 'touchend' event will be the element that was under the user's finger - // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check - // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42). - this.updateScrollParent(targetElement); - } - } - - this.trackingClick = true; - this.trackingClickStart = event.timeStamp; - this.targetElement = targetElement; - - this.touchStartX = touch.pageX; - this.touchStartY = touch.pageY; - - // Prevent phantom clicks on fast double-tap (issue #36) - if ((event.timeStamp - this.lastClickTime) < 200) { - event.preventDefault(); - } - - return true; -}; - - -/** - * Based on a touchmove event object, check whether the touch has moved past a boundary since it started. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.touchHasMoved = function(event) { - 'use strict'; - var touch = event.changedTouches[0]; - - if (Math.abs(touch.pageX - this.touchStartX) > 10 || Math.abs(touch.pageY - this.touchStartY) > 10) { - return true; - } - - return false; -}; - - -/** - * Attempt to find the labelled control for the given label element. - * - * @param {EventTarget|HTMLLabelElement} labelElement - * @returns {Element|null} - */ -FastClick.prototype.findControl = function(labelElement) { - 'use strict'; - - // Fast path for newer browsers supporting the HTML5 control attribute - if (labelElement.control !== undefined) { - return labelElement.control; - } - - // All browsers under test that support touch events also support the HTML5 htmlFor attribute - if (labelElement.htmlFor) { - return document.getElementById(labelElement.htmlFor); - } - - // If no for attribute exists, attempt to retrieve the first labellable descendant element - // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label - return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea'); -}; - - -/** - * On touch end, determine whether to send a click event at once. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onTouchEnd = function(event) { - 'use strict'; - var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement; - - // If the touch has moved, cancel the click tracking - if (this.touchHasMoved(event)) { - this.trackingClick = false; - this.targetElement = null; - } - - if (!this.trackingClick) { - return true; - } - - // Prevent phantom clicks on fast double-tap (issue #36) - if ((event.timeStamp - this.lastClickTime) < 200) { - this.cancelNextClick = true; - return true; - } - - this.lastClickTime = event.timeStamp; - - trackingClickStart = this.trackingClickStart; - this.trackingClick = false; - this.trackingClickStart = 0; - - // On some iOS devices, the targetElement supplied with the event is invalid if the layer - // is performing a transition or scroll, and has to be re-detected manually. Note that - // for this to function correctly, it must be called *after* the event target is checked! - // See issue #57; also filed as rdar://13048589 . - if (this.deviceIsIOSWithBadTarget) { - touch = event.changedTouches[0]; - targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset); - } - - targetTagName = targetElement.tagName.toLowerCase(); - if (targetTagName === 'label') { - forElement = this.findControl(targetElement); - if (forElement) { - this.focus(targetElement); - if (this.deviceIsAndroid) { - return false; - } - - targetElement = forElement; - } - } else if (this.needsFocus(targetElement)) { - - // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through. - // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37). - if ((event.timeStamp - trackingClickStart) > 100 || (this.deviceIsIOS && window.top !== window && targetTagName === 'input')) { - this.targetElement = null; - return false; - } - - this.focus(targetElement); - - // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open. - if (!this.deviceIsIOS4 || targetTagName !== 'select') { - this.targetElement = null; - event.preventDefault(); - } - - return false; - } - - if (this.deviceIsIOS && !this.deviceIsIOS4) { - - // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled - // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42). - scrollParent = targetElement.fastClickScrollParent; - if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) { - return true; - } - } - - // Prevent the actual click from going though - unless the target node is marked as requiring - // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted. - if (!this.needsClick(targetElement)) { - event.preventDefault(); - this.sendClick(targetElement, event); - } - - return false; -}; - - -/** - * On touch cancel, stop tracking the click. - * - * @returns {void} - */ -FastClick.prototype.onTouchCancel = function() { - 'use strict'; - this.trackingClick = false; - this.targetElement = null; -}; - - -/** - * On actual clicks, determine whether this is a touch-generated click, a click action occurring - * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or - * an actual click which should be permitted. - * - * @param {Event} event - * @returns {boolean} - */ -FastClick.prototype.onClick = function(event) { - 'use strict'; - var oldTargetElement; - - // If a target element was never set (because a touch event was never fired) allow the click - if (!this.targetElement) { - return true; - } - - if (event.forwardedTouchEvent) { - return true; - } - - oldTargetElement = this.targetElement; - this.targetElement = null; - - // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early. - if (this.trackingClick) { - this.trackingClick = false; - return true; - } - - // Programmatically generated events targeting a specific element should be permitted - if (!event.cancelable) { - return true; - } - - // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target. - if (event.target.type === 'submit' && event.detail === 0) { - return true; - } - - // Derive and check the target element to see whether the click needs to be permitted; - // unless explicitly enabled, prevent non-touch click events from triggering actions, - // to prevent ghost/doubleclicks. - if (!this.needsClick(oldTargetElement) || this.cancelNextClick) { - this.cancelNextClick = false; - - // Prevent any user-added listeners declared on FastClick element from being fired. - if (event.stopImmediatePropagation) { - event.stopImmediatePropagation(); - } else { - - // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) - event.propagationStopped = true; - } - - // Cancel the event - event.stopPropagation(); - event.preventDefault(); - - return false; - } - - // If clicks are permitted, return true for the action to go through. - return true; -}; - - -/** - * Remove all FastClick's event listeners. - * - * @returns {void} - */ -FastClick.prototype.destroy = function() { - 'use strict'; - var layer = this.layer; - - layer.removeEventListener('click', this.onClick, true); - layer.removeEventListener('touchstart', this.onTouchStart, false); - layer.removeEventListener('touchend', this.onTouchEnd, false); - layer.removeEventListener('touchcancel', this.onTouchCancel, false); -}; - - -if (typeof define !== 'undefined' && define.amd) { - - // AMD. Register as an anonymous module. - define(function() { - 'use strict'; - return FastClick; - }); -} - -if (typeof module !== 'undefined' && module.exports) { - module.exports = function(layer) { - 'use strict'; - return new FastClick(layer); - }; - - module.exports.FastClick = FastClick; -} diff --git a/webclient (old)/js/functionsvars.js b/webclient (old)/js/functionsvars.js deleted file mode 100755 index c3fba2e..0000000 --- a/webclient (old)/js/functionsvars.js +++ /dev/null @@ -1,347 +0,0 @@ -/** - * @author Wouter van Wijk - * - * all kinds functions and vars - */ - -var baseurl = '/mopidy'; -var host = window.location.hostname; -var port = window.location.port; -var wsurl = host + ':' + port + baseurl -var intv; -var socket; -var mopidy; - -//values for controls -var play = false; -var random; -var repeat; -var currentVolume = -1; -var muteVolume = -1; -var volumeChanging = false; -var posChanging = false; - -var posTimer; -var volumeTimer; -var seekTimer; -var initgui = true; -var currentpos = 0; -var popupData = {}; -var songlength = 0; - -var artistshtml = ''; -var artiststext = ''; -var songname = ''; -var songdata = ''; -var newposition = 0; - -var playlisttracksScroll; -var playlistslistScroll; - -//array of cached playlists (not only user-playlists, also search, artist, album-playlists) -var playlists = {}; -var currentplaylist; -var customPlaylists = []; -var customTracklists = []; - -var ua = navigator.userAgent, - isMobileWebkit = /WebKit/.test(ua) && /Mobile/.test(ua); - -//constants -PROGRAM_NAME = 'MusicBox'; -//PROGRAM_NAME = 'Mopidy'; -ARTIST_TABLE = '#artiststable'; -ALBUM_TABLE = '#albumstable'; -PLAYLIST_TABLE = '#playlisttracks'; -CURRENT_PLAYLIST_TABLE = '#currenttable'; -SEARCH_ALL_TABLE = '#allresulttable'; -SEARCH_ALBUM_TABLE = '#albumresulttable'; -SEARCH_ARTIST_TABLE = '#artistresulttable'; -SEARCH_TRACK_TABLE = '#trackresulttable'; - -PLAY_NOW = 0; -PLAY_NEXT = 1; -ADD_THIS_BOTTOM = 2; -ADD_ALL_BOTTOM = 3; - -MAX_TABLEROWS = 50; - -//update track slider timer, milliseconds -TRACK_TIMER = 1000; - -//check status timer, every 5 or 10 sec -STATUS_TIMER = 10000; - -var radioStations = []; -//fill with defaults - radioStations.push(['NPR 24', 'http://nprdmp.ic.llnwd.net/stream/nprdmp_live01_mp3']); - radioStations.push(['3FM Dutch', 'http://icecast.omroep.nl/3fm-bb-mp3']); - radioStations.push(['BBC WorldService', 'http://vprbbc.streamguys.net:8000/vprbbc24.mp3']); - radioStations.push(['Arrow Jazz', 'http://81.173.3.132:8082']); - radioStations.push(['PBS Australia', 'http://eno.emit.com:8000/pbsfm_live_64.mp3']); - -/******* - * - */ -function scrollToTop() { - var divtop = 0; - $('body,html').animate({ - scrollTop : divtop - }, 250); -} - -function scrollToTracklist() { -/* if (isMobileWebkit) { - playlistslistScroll.refresh(); - } -*/ - var divtop = $("#playlisttracksdiv").offset().top - 50; - $('body,html').animate({ - scrollTop : divtop - }, 250); -} - -//A hack to find the name of the first artist of a playlist. this is not yet returned by mopidy -//does not work wel with multiple artists of course -function getArtist(pl) { - for (var i = 0; i < pl.length; i++) { - for (var j = 0; j < pl[i].artists.length; j++) { - if (pl[i].artists[j].name != '') { - return pl[i].artists[j].name; - } - } - }; -} - -//A hack to find the first album of a playlist. this is not yet returned by mopidy -function getAlbum(pl) { - for (var i = 0; i < pl.length; i++) { - if (pl[i].album.name != '') { - return pl[i].album.name; - } - }; -} - -/******************************************************** - * break up results and put them in album tables - *********************************************************/ -function albumTracksToTable(pl, target, uri) { - var tmp = ''; - var targetmin = target.substr(1); - $(target).empty(); - var child = ''; - for (var i = 0; i < pl.length; i++) { - popupData[pl[i].uri] = pl[i]; - child = '
  • '; - child += '

    ' + timeFromSeconds(pl[i].length / 1000) + '

    ' + pl[i].name + '

  • '; - tmp += child; - }; - $(target).html(tmp); - $(target).attr('data', uri); -} - -function resultsToTables(results, target, uri) { - var newalbum = []; - var nexturi = ''; - var count = 0; -// var popupMenu = (target == CURRENT_PLAYLIST_TABLE) ? 'popupQueue' : 'popupTracks'; - newalbum = []; - $(target).html(''); - //quick fix, sorry - if (!results) { return;} - - //break into albums and put in tables - var html = ''; - var tableid, j, artistname, alburi; - var targetmin = target.substr(1); - $(target).attr('data', uri); -// console.log(results); - var length = 0 || results.length; - for ( i = 0; i < length; i++) { - newalbum.push(results[i]); - nexturi = ''; - if (i < length - 1) { - nexturi = results[i + 1].album.uri; - } - if (!results[i].album) { - if (results[i].uri) { - var name = results[i].name || results[i].uri; - html += '
  • ' + name + ' [Stream]

  • '; - newalbum = []; - nexturi = ''; - } - } else { - if (results[i].album.uri != nexturi) { - tableid = 'art' + i; - //render differently if only one track in the album - if ( newalbum.length == 1 ) { - if (i != 0) { html += '
  •  
  • '; } - html += '
  • '; - html += '

    ' + newalbum[0].name + "

    "; - html += '

    '; - html += '' + timeFromSeconds(newalbum[0].length / 1000) + ''; - for ( j = 0; j < newalbum[0].artists.length; j++) { - html += newalbum[0].artists[j].name; - html += (j == newalbum[0].artists.length - 1) ? '' : ' / '; - //stop after 3 - if (j > 2) { - html += '...'; - break; - } - } - html += ' / ' + newalbum[0].album.name + '

    '; - html += '
  • '; - popupData[newalbum[0].uri] = newalbum[0]; - newalbum = []; - - } else { - html += '
  • '; - html += '

    ' + results[i].album.name + '

    '; - if (results[i].album.artists) { - for ( j = 0; j < results[i].album.artists.length; j++) { - html += results[i].album.artists[j].name; - html += (j == results[i].album.artists.length - 1) ? '' : ' / '; - //stop after 3 - if (j > 2) { - child += '...'; - break; - } - } - } - html += '

  • '; - for ( j = 0; j < newalbum.length; j++) { - popupData[newalbum[j].uri] = newalbum[j]; -// html += '
  • '; - html += '
  • '; - html += '

    ' + timeFromSeconds(newalbum[j].length / 1000) + '

    ' + newalbum[j].name + '

  • '; - }; - artistname = results[i].artists[0].name; - getCover(artistname, results[i].album.name, target + '-cover-' + i, 'medium'); - // customTracklists[results[i].album.uri] = newalbum; - newalbum = []; - } - } - } - } - tableid = "#" + tableid; - $(target).html(html); - $(target).attr('data', uri); -// $(target).listview('refresh'); -} - -//process updated playlist to gui -function playlisttotable(pl, target, uri) { - var tmp = ''; - $(target).html(''); - var targetmin = target.substr(1); - var child = ''; - for (var i = 0; i < pl.length; i++) { - if (pl[i]) { - popupData[pl[i].uri] = pl[i]; - child = '
  • '; - child += '

    ' + pl[i].name + "

    "; - child += '

    '; - child += '' + timeFromSeconds(pl[i].length / 1000) + ''; - //   - for (var j = 0; j < pl[i].artists.length; j++) { - if (pl[i].artists[j]) { - child += pl[i].artists[j].name; - child += (j == pl[i].artists.length - 1) ? '' : ' / '; - //stop after 3 - if (j > 2) { - child += '...'; - break; - } - } - } - child += ' / ' + pl[i].album.name + '

    '; - child += '
  • '; - tmp += child; - } - }; - - $(target).html(tmp); - $(target).attr('data', uri); -} - -function getPlaylistFromUri(uri) { - if (playlists[uri]) { - return playlists[uri]; - } - if (customPlaylists[uri]) { - return customPlaylists[uri]; - } -} - -function getTracksFromUri(uri) { - var pl = getPlaylistFromUri(uri); - if (pl) { - return pl.tracks; - } else if (customTracklists[uri]) { - return customTracklists[uri]; - } -} - -//convert time to human readable format -function timeFromSeconds(length) { - var d = Number(length); - var h = Math.floor(d / 3600); - var m = Math.floor(d % 3600 / 60); - var s = Math.floor(d % 3600 % 60); - return ((h > 0 ? h + ":" : "") + (m > 0 ? (h > 0 && m < 10 ? "0" : "") + m + ":" : "0:") + (s < 10 ? "0" : "") + s); -} - - -/******* Toast ***/ -function toast (message, delay, textOnly) { - textOnl = textOnly || false; - message = message || "Loading..."; - delay = delay || 1000; - $.mobile.loading( 'show', { - text: message, - textVisible: true, - theme: 'a', - textonly: textOnl - }); - if(delay > 0) { - setTimeout(function(){ - $.mobile.loading('hide'); - }, delay); - } -} - -/***************** - * Modal dialogs - *****************/ -function showLoading(on) { - if (on) { - $("body").css("cursor", "progress"); - $.mobile.loading('show', { - text : 'Loading data from ' + PROGRAM_NAME + '. Please wait...', - textVisible : true, - theme : 'a' - }); - } else { - $("body").css("cursor", "default"); - $.mobile.loading('hide'); - } -} - -function showOffline(on) { - if (on) { - $.mobile.loading('show', { - text : 'Trying to reach ' + PROGRAM_NAME + '. Please wait...', - textVisible : true, - theme : 'a' - }); - } else { - $.mobile.loading('hide'); - } -} - - -// from http://dzone.com/snippets/validate-url-regexp -function validUri(str) { - var regexp = /(mms|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ - return regexp.test(str); -} \ No newline at end of file diff --git a/webclient (old)/js/gui.js b/webclient (old)/js/gui.js deleted file mode 100755 index 24efcfb..0000000 --- a/webclient (old)/js/gui.js +++ /dev/null @@ -1,451 +0,0 @@ -/* gui interactions here -* set- functions only set/update the gui elements -* do- functions interact with the server -* show- functions do both -*/ -/******************** - * Song Info Sreen - ********************/ -function resetSong() { - if (!posChanging) { - pauseTimer(); - - setPlayState(false); - setPosition(0); - var data = new Object; - data.name = ''; - data.artists = ''; - data.length = 0; - data.uri = ''; - setSongInfo(data); - } -} - -function resizeMb() { - $("#infoname").html(songdata.name); - $("#infoartist").html(artiststext); - //bug in truncate? - var spanwidth = $("#infoartist").width() - 38; - $("#infoname").truncate({ - width : spanwidth, - token : '…', - center : true, - multiline : false - }); - $("#infoartist").truncate({ - width : spanwidth, - token : '…', - center : true, - multiline : false - }); - $("#infoartist").html('' + $("#infoartist").html() + ''); - - //initialize iScroll if MobileWebkit and large window - if (isMobileWebkit) { - if ($(window).width() > 480) { - if (!playlistslistScroll) { - playlistslistScroll = new iScroll('playlistslistdiv'); - playlisttracksScroll = new iScroll('playlisttracksdiv'); - } - } else { - if (playlistslistScroll) { - playlistslistScroll.destroy(); - playlistslistScroll = null; - playlisttracksScroll.destroy(); - playlisttracksScroll = null; - } - } - } - - //set height of playlist scrollers - - if ($(window).width() > 480) { - $('.scroll').height($(window).height() - 111); - //jqm added something which it shouldnt (at least in this case) I guess - // $('#playlistspane').removeClass('height').height($(window).height() - 110); - $('.scroll').removeClass('height').removeClass('width'); - $('#playlistspane').removeClass('height').removeClass('width'); - } else { - $('.scroll').addClass('height', '100%').addClass('width', '100%'); - $('#playlistspane').addClass('height', '100%').addClass('width', '100%'); - } - - if (isMobileWebkit && ($(window).width() > 480)) { - playlistslistScroll.refresh(); - playlisttracksScroll.refresh(); - } -} - -function setSongInfo(data) { - if (!data) { return; } - if (data.name == '') { - return; - }; - - //update styles of listviews - $('#currenttable li').each(function() { - $(this).removeClass("currenttrack"); - if (this.id == 'currenttable-' + data.uri) { - $(this).addClass('currenttrack'); - } - }); - - $('#playlisttracks li').each(function() { - $(this).removeClass("currenttrack2"); - if (this.id == 'playlisttracks-' + data.uri) { - $(this).addClass('currenttrack2'); - } - }); - $('#trackresulttable li').each(function() { - $(this).removeClass("currenttrack2"); - if (this.id == 'trackresulttable-' + data.uri) { - $(this).addClass('currenttrack2'); - } - }); - - $('#artiststable li').each(function() { - $(this).removeClass("currenttrack2"); - if (this.id == 'artiststable-' + data.uri) { - $(this).addClass('currenttrack2'); - } - });1 - $('#albumstable li').each(function() { - $(this).removeClass("currenttrack2"); - if (this.id == 'albumstable-' + data.uri) { - $(this).addClass('currenttrack2'); - } - }); - - - if (data.name && (songdata.name == data.name)) { - return; - } - if (data) { - songdata = data; - } else { - data = songdata; - } - artistshtml = ''; - artiststext = ''; - - if (validUri(data.name)) { - for (var key in radioStations) { - rs = radioStations[key]; - if (rs && rs[1] == data.name) { - data.name = (rs[0] || rs[1]); - } - }; - } - - $("#modalname").html(data.name); - - if (!data.length || data.length == 0) { - songlength = 0; - $("#songlength").html(''); - pauseTimer(); - $('#trackslider').slider('disable'); - } else { - songlength = data.length; - $("#songlength").html(timeFromSeconds(data.length / 1000)); - $('#trackslider').slider('enable'); - } - - var arttmp = ''; - - if(data.artists) { - for (var j = 0; j < data.artists.length; j++) { - artistshtml += '' + data.artists[j].name + ''; - artiststext += data.artists[j].name; - if (j != data.artists.length - 1) { - artistshtml += ', '; - artiststext += ', '; - } - } - arttmp = 'Artist'; - if (data.artists.length > 1) { - arttmp += 's'; - } - arttmp += ': ' + artistshtml; - } - - if (data.album) { - $("#modalalbum").html('Album: ' + data.album.name + ''); - getCover(artiststext, data.album.name, '#infocover, #controlspopupimage', 'extralarge'); - } else { - $("#modalalbum").html(''); - $("#infocover").attr('src', '../images/icons/cd_32x32.png'); - $("#controlspopupimage").attr('src', '../images/icons/cd_32x32.png'); - } - - $("#modalartist").html(arttmp); - - $("#trackslider").attr("min", 0); - $("#trackslider").attr("max", data.length); - - resizeMb(); -} - -/*************** - * display popups - */ -function closePopups() { - $('#popupTracks').popup('close'); - $('#artistpopup').popup('close'); - $('#coverpopup').popup('close'); - $('#popupQueue').popup('close'); - $('#controlspopup').popup('close'); -} - -function popupTracks(e, listuri, trackuri) { - if (!e) - var e = window.event; - $('.popupTrackName').html(popupData[trackuri].name); - $('.popupAlbumName').html(popupData[trackuri].album.name); - var child = ""; - if (popupData[trackuri].artists.length == 1) { - child = 'Show Artist'; - $('.popupArtistName').html(popupData[trackuri].artists[0].name); - $('.popupArtistHref').attr('onclick', 'showArtist("' + popupData[trackuri].artists[0].uri + '");' ); - $('.popupArtistsDiv').hide(); - $('.popupArtistsLi').show(); - } else { - for (var j = 0; j < popupData[trackuri].artists.length; j++) { - child += '
  • ' + popupData[trackuri].artists[j].name + '
  • '; - } - $('.popupArtistsLi').hide(); - $('.popupArtistsLv').html(child).show(); - $('.popupArtistsDiv').show(); - // this makes the viewport of the window resize somehow - $('.popupArtistsLv').listview("refresh"); - } - - var hash = document.location.hash.split('?'); - var divid = hash[0].substr(1); - if (divid == 'current') { - $(".addqueue").hide(); - var popupName = '#popupQueue'; - } else { - $(".addqueue").show(); - var popupName = '#popupTracks'; - } - - $(popupName).data("list", listuri).data("track", trackuri).popup("open", { - x : e.pageX, - y : e.pageY - }); - return false; -} - -function showAlbumPopup() { - uri = $('#popupTracks').data("track"); - showAlbum(popupData[uri].album.uri); -} - -/********************* - * initialize sockets - *********************/ - -function initSocketevents() { - mopidy.on("state:online", function() { - showOffline(false); - getCurrentPlaylist(); - updateStatusOfAll(); - getPlaylists(); - showLoading(false); - $(window).hashchange(); - }); - - mopidy.on("state:offline", function() { - resetSong(); - showOffline(true); - }); - - mopidy.on("event:trackPlaybackStarted", function(data) { - mopidy.playback.getTimePosition().then(processCurrentposition, console.error); - setPlayState(true); - setSongInfo(data.tl_track.track); - initTimer(); - }); - - mopidy.on("event:trackPlaybackPaused", function(data) { - //setSongInfo(data.tl_track.track); - pauseTimer(); - setPlayState(false); - }); - - mopidy.on("event:playlistsLoaded", function(data) { - showLoading(true); - getPlaylists(); - }); - - mopidy.on("event:volumeChanged", function(data) { - if (!volumeChanging) { - setVolume(data["volume"]); - } - }); - - mopidy.on("event:playbackStateChanged", function(data) { - switch (data["new_state"]) { - case "stopped": - resetSong(); - break; - case "playing": - mopidy.playback.getTimePosition().then(processCurrentposition, console.error); - resumeTimer(); - setPlayState(true); - break; - } - }); - - mopidy.on("event:tracklistChanged", function(data) { - getCurrentPlaylist(); - }); - - mopidy.on("event:seeked", function(data) { - setPosition(parseInt(data["time_position"])); - }); -} - -/********************** - * initialize software - **********************/ -$(document).ready(function() { - //check for websockets - if (!window.WebSocket) { - switchContent("playlists"); - $('#playlistspane').html('

    Old Browser

    Sorry. Your browser isn\'t modern enough for this webapp. Modern versions of Chrome, Firefox, Safari all will do. Maybe Opera and Internet Explorer 10 also work, but it\'s not tested.

    '); - exit; - } - - $(window).hashchange(); - - // Connect to server - mopidy = new Mopidy(); - //initialize events - initSocketevents(); - - resetSong(); - - if (location.hash.length < 2) { - switchContent("playlists"); - } - - initgui = false; - window.onhashchange = locationHashChanged; - // Log all events - //mopidy.on(function() { - //}); - - //update gui status every x seconds from mopdidy - setInterval(updateTimer, STATUS_TIMER); - //only show backbutton if in UIWebview - if (window.navigator.standalone) { - $("#btback").show(); - } else { - $("#btback").hide(); - } - - $(window).resize(function() { - resizeMb(); - }); - - $(document).keypress( function (event) { -// console.log('kp'); - if (event.target.tagName != 'INPUT') { - event.preventDefault(); - switch(event.which) { - case 32: - doPlay(); - break; - case '>': - doNext(); - break; - case '<': - doPrevious(); - break; - } - return true; - } - }); - initRadio(); - -}); - -$(document).bind("pageinit", function() { - resizeMb(); -}); - -/************************ - * diverse - ************************/ -function switchContent(divid, uri) { - var hash = divid; - if (uri) { - hash += "?" + uri; - } - // $.mobile.changePage("#" + hash); - location.hash = "#" + hash; -} - -//update timer -function updateTimer() { - mopidy.playback.getCurrentTrack().then(processCurrenttrack, console.error); - mopidy.playback.getTimePosition().then(processCurrentposition, console.error); - //TODO check offline? -} - -//update everything as if reloaded -function updateStatusOfAll() { - mopidy.playback.getCurrentTrack().then(processCurrenttrack, console.error); - mopidy.playback.getTimePosition().then(processCurrentposition, console.error); - mopidy.playback.getState().then(processPlaystate, console.error); - - mopidy.playback.getRepeat().then(processRepeat, console.error); - mopidy.playback.getRandom().then(processRandom, console.error); - - mopidy.playback.getVolume().then(processVolume, console.error); -} - -function locationHashChanged() { - var hash = document.location.hash.split('?'); - //remove # - var divid = hash[0].substr(1); - var uri = hash[1]; - $('#navcurrent a').removeClass('ui-state-active ui-state-persist ui-btn-active'); - $('#navplaylists a').removeClass('ui-state-active ui-state-persist ui-btn-active'); - $('#navsearch a').removeClass('ui-state-active ui-state-persist ui-btn-active'); - $('.pane').hide(); - $('#' + divid + 'pane').show(); - - switch(divid) { - case 'current': - $('#navcurrent a').addClass('ui-state-active ui-state-persist ui-btn-active'); - break; - case 'playlists': - $('#navplaylists a').addClass('ui-state-active ui-state-persist ui-btn-active'); - break; - case 'search': - $('#navsearch a').addClass($.mobile.activeBtnClass); - $("#searchinput").focus(); - if (customTracklists['allresultscache'] == '') { - initSearch($('#searchinput').val()); - } - break; - case 'radio': - $('#navradio a').addClass('ui-state-active ui-state-persist ui-btn-active'); - break; - case 'artists': - if (uri != '') { - showArtist(uri); - } - break; - case 'albums': - if (uri != '') { - showAlbum(uri); - } - break; - } - // Set the page title based on the hash. - document.title = PROGRAM_NAME; - return false; -} diff --git a/webclient (old)/js/iscroll-lite.js b/webclient (old)/js/iscroll-lite.js deleted file mode 100755 index 3a6cab7..0000000 --- a/webclient (old)/js/iscroll-lite.js +++ /dev/null @@ -1,594 +0,0 @@ -/*! - * iScroll Lite base on iScroll v4.1.6 ~ Copyright (c) 2011 Matteo Spinelli, http://cubiq.org - * Released under MIT license, http://cubiq.org/license - */ - -(function(){ -var m = Math, - mround = function (r) { return r >> 0; }, - vendor = (/webkit/i).test(navigator.appVersion) ? 'webkit' : - (/firefox/i).test(navigator.userAgent) ? 'Moz' : - 'opera' in window ? 'O' : '', - - // Browser capabilities - isAndroid = (/android/gi).test(navigator.appVersion), - isIDevice = (/iphone|ipad/gi).test(navigator.appVersion), - isPlaybook = (/playbook/gi).test(navigator.appVersion), - isTouchPad = (/hp-tablet/gi).test(navigator.appVersion), - - has3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix(), - hasTouch = 'ontouchstart' in window && !isTouchPad, - hasTransform = vendor + 'Transform' in document.documentElement.style, - hasTransitionEnd = isIDevice || isPlaybook, - - nextFrame = (function() { - return window.requestAnimationFrame - || window.webkitRequestAnimationFrame - || window.mozRequestAnimationFrame - || window.oRequestAnimationFrame - || window.msRequestAnimationFrame - || function(callback) { return setTimeout(callback, 17); } - })(), - cancelFrame = (function () { - return window.cancelRequestAnimationFrame - || window.webkitCancelAnimationFrame - || window.webkitCancelRequestAnimationFrame - || window.mozCancelRequestAnimationFrame - || window.oCancelRequestAnimationFrame - || window.msCancelRequestAnimationFrame - || clearTimeout - })(), - - // Events - RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize', - START_EV = hasTouch ? 'touchstart' : 'mousedown', - MOVE_EV = hasTouch ? 'touchmove' : 'mousemove', - END_EV = hasTouch ? 'touchend' : 'mouseup', - CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup', - - // Helpers - trnOpen = 'translate' + (has3d ? '3d(' : '('), - trnClose = has3d ? ',0)' : ')', - - // Constructor - iScroll = function (el, options) { - var that = this, - doc = document, - i; - - that.wrapper = typeof el == 'object' ? el : doc.getElementById(el); - that.wrapper.style.overflow = 'hidden'; - that.scroller = that.wrapper.children[0]; - - // Default options - that.options = { - hScroll: true, - vScroll: true, - x: 0, - y: 0, - bounce: true, - bounceLock: false, - momentum: true, - lockDirection: true, - useTransform: true, - useTransition: false, - - // Events - onRefresh: null, - onBeforeScrollStart: function (e) { e.preventDefault(); }, - onScrollStart: null, - onBeforeScrollMove: null, - onScrollMove: null, - onBeforeScrollEnd: null, - onScrollEnd: null, - onTouchEnd: null, - onDestroy: null - }; - - // User defined options - for (i in options) that.options[i] = options[i]; - - // Set starting position - that.x = that.options.x; - that.y = that.options.y; - - // Normalize options - that.options.useTransform = hasTransform ? that.options.useTransform : false; - that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar; - that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar; - that.options.useTransition = hasTransitionEnd && that.options.useTransition; - - // Set some default styles - that.scroller.style[vendor + 'TransitionProperty'] = that.options.useTransform ? '-' + vendor.toLowerCase() + '-transform' : 'top left'; - that.scroller.style[vendor + 'TransitionDuration'] = '0'; - that.scroller.style[vendor + 'TransformOrigin'] = '0 0'; - if (that.options.useTransition) that.scroller.style[vendor + 'TransitionTimingFunction'] = 'cubic-bezier(0.33,0.66,0.66,1)'; - - if (that.options.useTransform) that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose; - else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px'; - - that.refresh(); - - that._bind(RESIZE_EV, window); - that._bind(START_EV); - if (!hasTouch) that._bind('mouseout', that.wrapper); - }; - -// Prototype -iScroll.prototype = { - enabled: true, - x: 0, - y: 0, - steps: [], - scale: 1, - - handleEvent: function (e) { - var that = this; - switch(e.type) { - case START_EV: - if (!hasTouch && e.button !== 0) return; - that._start(e); - break; - case MOVE_EV: that._move(e); break; - case END_EV: - case CANCEL_EV: that._end(e); break; - case RESIZE_EV: that._resize(); break; - case 'mouseout': that._mouseout(e); break; - case 'webkitTransitionEnd': that._transitionEnd(e); break; - } - }, - - _resize: function () { - this.refresh(); - }, - - _pos: function (x, y) { - x = this.hScroll ? x : 0; - y = this.vScroll ? y : 0; - - if (this.options.useTransform) { - this.scroller.style[vendor + 'Transform'] = trnOpen + x + 'px,' + y + 'px' + trnClose + ' scale(' + this.scale + ')'; - } else { - x = mround(x); - y = mround(y); - this.scroller.style.left = x + 'px'; - this.scroller.style.top = y + 'px'; - } - - this.x = x; - this.y = y; - }, - - _start: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - matrix, x, y; - - if (!that.enabled) return; - - if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e); - - if (that.options.useTransition) that._transitionTime(0); - - that.moved = false; - that.animating = false; - that.zoomed = false; - that.distX = 0; - that.distY = 0; - that.absDistX = 0; - that.absDistY = 0; - that.dirX = 0; - that.dirY = 0; - - if (that.options.momentum) { - if (that.options.useTransform) { - // Very lame general purpose alternative to CSSMatrix - matrix = getComputedStyle(that.scroller, null)[vendor + 'Transform'].replace(/[^0-9-.,]/g, '').split(','); - x = matrix[4] * 1; - y = matrix[5] * 1; - } else { - x = getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, '') * 1; - y = getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, '') * 1; - } - - if (x != that.x || y != that.y) { - if (that.options.useTransition) that._unbind('webkitTransitionEnd'); - else cancelFrame(that.aniTime); - that.steps = []; - that._pos(x, y); - } - } - - that.startX = that.x; - that.startY = that.y; - that.pointX = point.pageX; - that.pointY = point.pageY; - - that.startTime = e.timeStamp || Date.now(); - - if (that.options.onScrollStart) that.options.onScrollStart.call(that, e); - - that._bind(MOVE_EV); - that._bind(END_EV); - that._bind(CANCEL_EV); - }, - - _move: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - deltaX = point.pageX - that.pointX, - deltaY = point.pageY - that.pointY, - newX = that.x + deltaX, - newY = that.y + deltaY, - timestamp = e.timeStamp || Date.now(); - - if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e); - - that.pointX = point.pageX; - that.pointY = point.pageY; - - // Slow down if outside of the boundaries - if (newX > 0 || newX < that.maxScrollX) { - newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX; - } - if (newY > 0 || newY < that.maxScrollY) { - newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= 0 || that.maxScrollY >= 0 ? 0 : that.maxScrollY; - } - - that.distX += deltaX; - that.distY += deltaY; - that.absDistX = m.abs(that.distX); - that.absDistY = m.abs(that.distY); - - if (that.absDistX < 6 && that.absDistY < 6) { - return; - } - - // Lock direction - if (that.options.lockDirection) { - if (that.absDistX > that.absDistY + 5) { - newY = that.y; - deltaY = 0; - } else if (that.absDistY > that.absDistX + 5) { - newX = that.x; - deltaX = 0; - } - } - - that.moved = true; - that._pos(newX, newY); - that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; - that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; - - if (timestamp - that.startTime > 300) { - that.startTime = timestamp; - that.startX = that.x; - that.startY = that.y; - } - - if (that.options.onScrollMove) that.options.onScrollMove.call(that, e); - }, - - _end: function (e) { - if (hasTouch && e.touches.length != 0) return; - - var that = this, - point = hasTouch ? e.changedTouches[0] : e, - target, ev, - momentumX = { dist:0, time:0 }, - momentumY = { dist:0, time:0 }, - duration = (e.timeStamp || Date.now()) - that.startTime, - newPosX = that.x, - newPosY = that.y, - newDuration; - - that._unbind(MOVE_EV); - that._unbind(END_EV); - that._unbind(CANCEL_EV); - - if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e); - - if (!that.moved) { - if (hasTouch) { - // Find the last touched element - target = point.target; - while (target.nodeType != 1) target = target.parentNode; - - if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { - ev = document.createEvent('MouseEvents'); - ev.initMouseEvent('click', true, true, e.view, 1, - point.screenX, point.screenY, point.clientX, point.clientY, - e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, - 0, null); - ev._fake = true; - target.dispatchEvent(ev); - } - } - - that._resetPos(200); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - if (duration < 300 && that.options.momentum) { - momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX; - momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y : 0), that.options.bounce ? that.wrapperH : 0) : momentumY; - - newPosX = that.x + momentumX.dist; - newPosY = that.y + momentumY.dist; - - if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 }; - if ((that.y > 0 && newPosY > 0) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 }; - } - - if (momentumX.dist || momentumY.dist) { - newDuration = m.max(m.max(momentumX.time, momentumY.time), 10); - - that.scrollTo(mround(newPosX), mround(newPosY), newDuration); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - that._resetPos(200); - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - }, - - _resetPos: function (time) { - var that = this, - resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x, - resetY = that.y >= 0 || that.maxScrollY > 0 ? 0 : that.y < that.maxScrollY ? that.maxScrollY : that.y; - - if (resetX == that.x && resetY == that.y) { - if (that.moved) { - if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); // Execute custom code on scroll end - that.moved = false; - } - - return; - } - - that.scrollTo(resetX, resetY, time || 0); - }, - - _mouseout: function (e) { - var t = e.relatedTarget; - - if (!t) { - this._end(e); - return; - } - - while (t = t.parentNode) if (t == this.wrapper) return; - - this._end(e); - }, - - _transitionEnd: function (e) { - var that = this; - - if (e.target != that.scroller) return; - - that._unbind('webkitTransitionEnd'); - - that._startAni(); - }, - - /** - * - * Utilities - * - */ - _startAni: function () { - var that = this, - startX = that.x, startY = that.y, - startTime = Date.now(), - step, easeOut, - animate; - - if (that.animating) return; - - if (!that.steps.length) { - that._resetPos(400); - return; - } - - step = that.steps.shift(); - - if (step.x == startX && step.y == startY) step.time = 0; - - that.animating = true; - that.moved = true; - - if (that.options.useTransition) { - that._transitionTime(step.time); - that._pos(step.x, step.y); - that.animating = false; - if (step.time) that._bind('webkitTransitionEnd'); - else that._resetPos(0); - return; - } - - animate = function () { - var now = Date.now(), - newX, newY; - - if (now >= startTime + step.time) { - that._pos(step.x, step.y); - that.animating = false; - if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that); // Execute custom code on animation end - that._startAni(); - return; - } - - now = (now - startTime) / step.time - 1; - easeOut = m.sqrt(1 - now * now); - newX = (step.x - startX) * easeOut + startX; - newY = (step.y - startY) * easeOut + startY; - that._pos(newX, newY); - if (that.animating) that.aniTime = nextFrame(animate); - }; - - animate(); - }, - - _transitionTime: function (time) { - this.scroller.style[vendor + 'TransitionDuration'] = time + 'ms'; - }, - - _momentum: function (dist, time, maxDistUpper, maxDistLower, size) { - var deceleration = 0.0006, - speed = m.abs(dist) / time, - newDist = (speed * speed) / (2 * deceleration), - newTime = 0, outsideDist = 0; - - // Proportinally reduce speed if we are outside of the boundaries - if (dist > 0 && newDist > maxDistUpper) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistUpper = maxDistUpper + outsideDist; - speed = speed * maxDistUpper / newDist; - newDist = maxDistUpper; - } else if (dist < 0 && newDist > maxDistLower) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistLower = maxDistLower + outsideDist; - speed = speed * maxDistLower / newDist; - newDist = maxDistLower; - } - - newDist = newDist * (dist < 0 ? -1 : 1); - newTime = speed / deceleration; - - return { dist: newDist, time: mround(newTime) }; - }, - - _offset: function (el) { - var left = -el.offsetLeft, - top = -el.offsetTop; - - while (el = el.offsetParent) { - left -= el.offsetLeft; - top -= el.offsetTop; - } - - return { left: left, top: top }; - }, - - _bind: function (type, el, bubble) { - (el || this.scroller).addEventListener(type, this, !!bubble); - }, - - _unbind: function (type, el, bubble) { - (el || this.scroller).removeEventListener(type, this, !!bubble); - }, - - - /** - * - * Public methods - * - */ - destroy: function () { - var that = this; - - that.scroller.style[vendor + 'Transform'] = ''; - - // Remove the event listeners - that._unbind(RESIZE_EV, window); - that._unbind(START_EV); - that._unbind(MOVE_EV); - that._unbind(END_EV); - that._unbind(CANCEL_EV); - that._unbind('mouseout', that.wrapper); - if (that.options.useTransition) that._unbind('webkitTransitionEnd'); - - if (that.options.onDestroy) that.options.onDestroy.call(that); - }, - - refresh: function () { - var that = this, - offset; - - that.wrapperW = that.wrapper.clientWidth; - that.wrapperH = that.wrapper.clientHeight; - - that.scrollerW = that.scroller.offsetWidth; - that.scrollerH = that.scroller.offsetHeight; - that.maxScrollX = that.wrapperW - that.scrollerW; - that.maxScrollY = that.wrapperH - that.scrollerH; - that.dirX = 0; - that.dirY = 0; - - that.hScroll = that.options.hScroll && that.maxScrollX < 0; - that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH); - - offset = that._offset(that.wrapper); - that.wrapperOffsetLeft = -offset.left; - that.wrapperOffsetTop = -offset.top; - - - that.scroller.style[vendor + 'TransitionDuration'] = '0'; - - that._resetPos(200); - }, - - scrollTo: function (x, y, time, relative) { - var that = this, - step = x, - i, l; - - that.stop(); - - if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }]; - - for (i=0, l=step.length; i 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left; - pos.top = pos.top > 0 ? 0 : pos.top < that.maxScrollY ? that.maxScrollY : pos.top; - time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time; - - that.scrollTo(pos.left, pos.top, time); - }, - - disable: function () { - this.stop(); - this._resetPos(0); - this.enabled = false; - - // If disabled after touchstart we make sure that there are no left over events - this._unbind(MOVE_EV); - this._unbind(END_EV); - this._unbind(CANCEL_EV); - }, - - enable: function () { - this.enabled = true; - }, - - stop: function () { - cancelFrame(this.aniTime); - this.steps = []; - this.moved = false; - this.animating = false; - } -}; - -if (typeof exports !== 'undefined') exports.iScroll = iScroll; -else window.iScroll = iScroll; - -})(); diff --git a/webclient (old)/js/iscroll.js b/webclient (old)/js/iscroll.js deleted file mode 100755 index f8576f0..0000000 --- a/webclient (old)/js/iscroll.js +++ /dev/null @@ -1,1104 +0,0 @@ -/*! - * iScroll v4.2.5 ~ Copyright (c) 2012 Matteo Spinelli, http://cubiq.org - * Released under MIT license, http://cubiq.org/license - */ -(function(window, doc){ -var m = Math, - dummyStyle = doc.createElement('div').style, - vendor = (function () { - var vendors = 't,webkitT,MozT,msT,OT'.split(','), - t, - i = 0, - l = vendors.length; - - for ( ; i < l; i++ ) { - t = vendors[i] + 'ransform'; - if ( t in dummyStyle ) { - return vendors[i].substr(0, vendors[i].length - 1); - } - } - - return false; - })(), - cssVendor = vendor ? '-' + vendor.toLowerCase() + '-' : '', - - // Style properties - transform = prefixStyle('transform'), - transitionProperty = prefixStyle('transitionProperty'), - transitionDuration = prefixStyle('transitionDuration'), - transformOrigin = prefixStyle('transformOrigin'), - transitionTimingFunction = prefixStyle('transitionTimingFunction'), - transitionDelay = prefixStyle('transitionDelay'), - - // Browser capabilities - isAndroid = (/android/gi).test(navigator.appVersion), - isIDevice = (/iphone|ipad/gi).test(navigator.appVersion), - isTouchPad = (/hp-tablet/gi).test(navigator.appVersion), - - has3d = prefixStyle('perspective') in dummyStyle, - hasTouch = 'ontouchstart' in window && !isTouchPad, - hasTransform = vendor !== false, - hasTransitionEnd = prefixStyle('transition') in dummyStyle, - - RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize', - START_EV = hasTouch ? 'touchstart' : 'mousedown', - MOVE_EV = hasTouch ? 'touchmove' : 'mousemove', - END_EV = hasTouch ? 'touchend' : 'mouseup', - CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup', - TRNEND_EV = (function () { - if ( vendor === false ) return false; - - var transitionEnd = { - '' : 'transitionend', - 'webkit' : 'webkitTransitionEnd', - 'Moz' : 'transitionend', - 'O' : 'otransitionend', - 'ms' : 'MSTransitionEnd' - }; - - return transitionEnd[vendor]; - })(), - - nextFrame = (function() { - return window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - window.msRequestAnimationFrame || - function(callback) { return setTimeout(callback, 1); }; - })(), - cancelFrame = (function () { - return window.cancelRequestAnimationFrame || - window.webkitCancelAnimationFrame || - window.webkitCancelRequestAnimationFrame || - window.mozCancelRequestAnimationFrame || - window.oCancelRequestAnimationFrame || - window.msCancelRequestAnimationFrame || - clearTimeout; - })(), - - // Helpers - translateZ = has3d ? ' translateZ(0)' : '', - - // Constructor - iScroll = function (el, options) { - var that = this, - i; - - that.wrapper = typeof el == 'object' ? el : doc.getElementById(el); - that.wrapper.style.overflow = 'hidden'; - that.scroller = that.wrapper.children[0]; - - // Default options - that.options = { - hScroll: true, - vScroll: true, - x: 0, - y: 0, - bounce: true, - bounceLock: false, - momentum: true, - lockDirection: true, - useTransform: true, - useTransition: false, - topOffset: 0, - checkDOMChanges: false, // Experimental - handleClick: true, - - // Scrollbar - hScrollbar: true, - vScrollbar: true, - fixedScrollbar: isAndroid, - hideScrollbar: isIDevice, - fadeScrollbar: isIDevice && has3d, - scrollbarClass: '', - - // Zoom - zoom: false, - zoomMin: 1, - zoomMax: 4, - doubleTapZoom: 2, - wheelAction: 'scroll', - - // Snap - snap: false, - snapThreshold: 1, - - // Events - onRefresh: null, - onBeforeScrollStart: function (e) { e.preventDefault(); }, - onScrollStart: null, - onBeforeScrollMove: null, - onScrollMove: null, - onBeforeScrollEnd: null, - onScrollEnd: null, - onTouchEnd: null, - onDestroy: null, - onZoomStart: null, - onZoom: null, - onZoomEnd: null - }; - - // User defined options - for (i in options) that.options[i] = options[i]; - - // Set starting position - that.x = that.options.x; - that.y = that.options.y; - - // Normalize options - that.options.useTransform = hasTransform && that.options.useTransform; - that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar; - that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar; - that.options.zoom = that.options.useTransform && that.options.zoom; - that.options.useTransition = hasTransitionEnd && that.options.useTransition; - - // Helpers FIX ANDROID BUG! - // translate3d and scale doesn't work together! - // Ignoring 3d ONLY WHEN YOU SET that.options.zoom - if ( that.options.zoom && isAndroid ){ - translateZ = ''; - } - - // Set some default styles - that.scroller.style[transitionProperty] = that.options.useTransform ? cssVendor + 'transform' : 'top left'; - that.scroller.style[transitionDuration] = '0'; - that.scroller.style[transformOrigin] = '0 0'; - if (that.options.useTransition) that.scroller.style[transitionTimingFunction] = 'cubic-bezier(0.33,0.66,0.66,1)'; - - if (that.options.useTransform) that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px)' + translateZ; - else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px'; - - if (that.options.useTransition) that.options.fixedScrollbar = true; - - that.refresh(); - - that._bind(RESIZE_EV, window); - that._bind(START_EV); - if (!hasTouch) { - if (that.options.wheelAction != 'none') { - that._bind('DOMMouseScroll'); - that._bind('mousewheel'); - } - } - - if (that.options.checkDOMChanges) that.checkDOMTime = setInterval(function () { - that._checkDOMChanges(); - }, 500); - }; - -// Prototype -iScroll.prototype = { - enabled: true, - x: 0, - y: 0, - steps: [], - scale: 1, - currPageX: 0, currPageY: 0, - pagesX: [], pagesY: [], - aniTime: null, - wheelZoomCount: 0, - - handleEvent: function (e) { - var that = this; - switch(e.type) { - case START_EV: - if (!hasTouch && e.button !== 0) return; - that._start(e); - break; - case MOVE_EV: that._move(e); break; - case END_EV: - case CANCEL_EV: that._end(e); break; - case RESIZE_EV: that._resize(); break; - case 'DOMMouseScroll': case 'mousewheel': that._wheel(e); break; - case TRNEND_EV: that._transitionEnd(e); break; - } - }, - - _checkDOMChanges: function () { - if (this.moved || this.zoomed || this.animating || - (this.scrollerW == this.scroller.offsetWidth * this.scale && this.scrollerH == this.scroller.offsetHeight * this.scale)) return; - - this.refresh(); - }, - - _scrollbar: function (dir) { - var that = this, - bar; - - if (!that[dir + 'Scrollbar']) { - if (that[dir + 'ScrollbarWrapper']) { - if (hasTransform) that[dir + 'ScrollbarIndicator'].style[transform] = ''; - that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']); - that[dir + 'ScrollbarWrapper'] = null; - that[dir + 'ScrollbarIndicator'] = null; - } - - return; - } - - if (!that[dir + 'ScrollbarWrapper']) { - // Create the scrollbar wrapper - bar = doc.createElement('div'); - - if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase(); - else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px'); - - bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:opacity;' + cssVendor + 'transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1'); - - that.wrapper.appendChild(bar); - that[dir + 'ScrollbarWrapper'] = bar; - - // Create the scrollbar indicator - bar = doc.createElement('div'); - if (!that.options.scrollbarClass) { - bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);' + cssVendor + 'background-clip:padding-box;' + cssVendor + 'box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';' + cssVendor + 'border-radius:3px;border-radius:3px'; - } - bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:' + cssVendor + 'transform;' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);' + cssVendor + 'transition-duration:0;' + cssVendor + 'transform: translate(0,0)' + translateZ; - if (that.options.useTransition) bar.style.cssText += ';' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)'; - - that[dir + 'ScrollbarWrapper'].appendChild(bar); - that[dir + 'ScrollbarIndicator'] = bar; - } - - if (dir == 'h') { - that.hScrollbarSize = that.hScrollbarWrapper.clientWidth; - that.hScrollbarIndicatorSize = m.max(m.round(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8); - that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px'; - that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize; - that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX; - } else { - that.vScrollbarSize = that.vScrollbarWrapper.clientHeight; - that.vScrollbarIndicatorSize = m.max(m.round(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8); - that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px'; - that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize; - that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY; - } - - // Reset position - that._scrollbarPos(dir, true); - }, - - _resize: function () { - var that = this; - setTimeout(function () { that.refresh(); }, isAndroid ? 200 : 0); - }, - - _pos: function (x, y) { - if (this.zoomed) return; - - x = this.hScroll ? x : 0; - y = this.vScroll ? y : 0; - - if (this.options.useTransform) { - this.scroller.style[transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ')' + translateZ; - } else { - x = m.round(x); - y = m.round(y); - this.scroller.style.left = x + 'px'; - this.scroller.style.top = y + 'px'; - } - - this.x = x; - this.y = y; - - this._scrollbarPos('h'); - this._scrollbarPos('v'); - }, - - _scrollbarPos: function (dir, hidden) { - var that = this, - pos = dir == 'h' ? that.x : that.y, - size; - - if (!that[dir + 'Scrollbar']) return; - - pos = that[dir + 'ScrollbarProp'] * pos; - - if (pos < 0) { - if (!that.options.fixedScrollbar) { - size = that[dir + 'ScrollbarIndicatorSize'] + m.round(pos * 3); - if (size < 8) size = 8; - that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; - } - pos = 0; - } else if (pos > that[dir + 'ScrollbarMaxScroll']) { - if (!that.options.fixedScrollbar) { - size = that[dir + 'ScrollbarIndicatorSize'] - m.round((pos - that[dir + 'ScrollbarMaxScroll']) * 3); - if (size < 8) size = 8; - that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; - pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size); - } else { - pos = that[dir + 'ScrollbarMaxScroll']; - } - } - - that[dir + 'ScrollbarWrapper'].style[transitionDelay] = '0'; - that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1'; - that[dir + 'ScrollbarIndicator'].style[transform] = 'translate(' + (dir == 'h' ? pos + 'px,0)' : '0,' + pos + 'px)') + translateZ; - }, - - _start: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - matrix, x, y, - c1, c2; - - if (!that.enabled) return; - - if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e); - - if (that.options.useTransition || that.options.zoom) that._transitionTime(0); - - that.moved = false; - that.animating = false; - that.zoomed = false; - that.distX = 0; - that.distY = 0; - that.absDistX = 0; - that.absDistY = 0; - that.dirX = 0; - that.dirY = 0; - - // Gesture start - if (that.options.zoom && hasTouch && e.touches.length > 1) { - c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX); - c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY); - that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2); - - that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x; - that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y; - - if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); - } - - if (that.options.momentum) { - if (that.options.useTransform) { - // Very lame general purpose alternative to CSSMatrix - matrix = getComputedStyle(that.scroller, null)[transform].replace(/[^0-9\-.,]/g, '').split(','); - x = +(matrix[12] || matrix[4]); - y = +(matrix[13] || matrix[5]); - } else { - x = +getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, ''); - y = +getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, ''); - } - - if (x != that.x || y != that.y) { - if (that.options.useTransition) that._unbind(TRNEND_EV); - else cancelFrame(that.aniTime); - that.steps = []; - that._pos(x, y); - if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); - } - } - - that.absStartX = that.x; // Needed by snap threshold - that.absStartY = that.y; - - that.startX = that.x; - that.startY = that.y; - that.pointX = point.pageX; - that.pointY = point.pageY; - - that.startTime = e.timeStamp || Date.now(); - - if (that.options.onScrollStart) that.options.onScrollStart.call(that, e); - - that._bind(MOVE_EV, window); - that._bind(END_EV, window); - that._bind(CANCEL_EV, window); - }, - - _move: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - deltaX = point.pageX - that.pointX, - deltaY = point.pageY - that.pointY, - newX = that.x + deltaX, - newY = that.y + deltaY, - c1, c2, scale, - timestamp = e.timeStamp || Date.now(); - - if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e); - - // Zoom - if (that.options.zoom && hasTouch && e.touches.length > 1) { - c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX); - c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY); - that.touchesDist = m.sqrt(c1*c1+c2*c2); - - that.zoomed = true; - - scale = 1 / that.touchesDistStart * that.touchesDist * this.scale; - - if (scale < that.options.zoomMin) scale = 0.5 * that.options.zoomMin * Math.pow(2.0, scale / that.options.zoomMin); - else if (scale > that.options.zoomMax) scale = 2.0 * that.options.zoomMax * Math.pow(0.5, that.options.zoomMax / scale); - - that.lastScale = scale / this.scale; - - newX = this.originX - this.originX * that.lastScale + this.x, - newY = this.originY - this.originY * that.lastScale + this.y; - - this.scroller.style[transform] = 'translate(' + newX + 'px,' + newY + 'px) scale(' + scale + ')' + translateZ; - - if (that.options.onZoom) that.options.onZoom.call(that, e); - return; - } - - that.pointX = point.pageX; - that.pointY = point.pageY; - - // Slow down if outside of the boundaries - if (newX > 0 || newX < that.maxScrollX) { - newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX; - } - if (newY > that.minScrollY || newY < that.maxScrollY) { - newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= that.minScrollY || that.maxScrollY >= 0 ? that.minScrollY : that.maxScrollY; - } - - that.distX += deltaX; - that.distY += deltaY; - that.absDistX = m.abs(that.distX); - that.absDistY = m.abs(that.distY); - - if (that.absDistX < 6 && that.absDistY < 6) { - return; - } - - // Lock direction - if (that.options.lockDirection) { - if (that.absDistX > that.absDistY + 5) { - newY = that.y; - deltaY = 0; - } else if (that.absDistY > that.absDistX + 5) { - newX = that.x; - deltaX = 0; - } - } - - that.moved = true; - that._pos(newX, newY); - that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; - that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; - - if (timestamp - that.startTime > 300) { - that.startTime = timestamp; - that.startX = that.x; - that.startY = that.y; - } - - if (that.options.onScrollMove) that.options.onScrollMove.call(that, e); - }, - - _end: function (e) { - if (hasTouch && e.touches.length !== 0) return; - - var that = this, - point = hasTouch ? e.changedTouches[0] : e, - target, ev, - momentumX = { dist:0, time:0 }, - momentumY = { dist:0, time:0 }, - duration = (e.timeStamp || Date.now()) - that.startTime, - newPosX = that.x, - newPosY = that.y, - distX, distY, - newDuration, - snap, - scale; - - that._unbind(MOVE_EV, window); - that._unbind(END_EV, window); - that._unbind(CANCEL_EV, window); - - if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e); - - if (that.zoomed) { - scale = that.scale * that.lastScale; - scale = Math.max(that.options.zoomMin, scale); - scale = Math.min(that.options.zoomMax, scale); - that.lastScale = scale / that.scale; - that.scale = scale; - - that.x = that.originX - that.originX * that.lastScale + that.x; - that.y = that.originY - that.originY * that.lastScale + that.y; - - that.scroller.style[transitionDuration] = '200ms'; - that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + that.scale + ')' + translateZ; - - that.zoomed = false; - that.refresh(); - - if (that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); - return; - } - - if (!that.moved) { - if (hasTouch) { - if (that.doubleTapTimer && that.options.zoom) { - // Double tapped - clearTimeout(that.doubleTapTimer); - that.doubleTapTimer = null; - if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); - that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1); - if (that.options.onZoomEnd) { - setTimeout(function() { - that.options.onZoomEnd.call(that, e); - }, 200); // 200 is default zoom duration - } - } else if (this.options.handleClick) { - that.doubleTapTimer = setTimeout(function () { - that.doubleTapTimer = null; - - // Find the last touched element - target = point.target; - while (target.nodeType != 1) target = target.parentNode; - - if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { - ev = doc.createEvent('MouseEvents'); - ev.initMouseEvent('click', true, true, e.view, 1, - point.screenX, point.screenY, point.clientX, point.clientY, - e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, - 0, null); - ev._fake = true; - target.dispatchEvent(ev); - } - }, that.options.zoom ? 250 : 0); - } - } - - that._resetPos(400); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - if (duration < 300 && that.options.momentum) { - momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX; - momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y - that.minScrollY : 0), that.options.bounce ? that.wrapperH : 0) : momentumY; - - newPosX = that.x + momentumX.dist; - newPosY = that.y + momentumY.dist; - - if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 }; - if ((that.y > that.minScrollY && newPosY > that.minScrollY) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 }; - } - - if (momentumX.dist || momentumY.dist) { - newDuration = m.max(m.max(momentumX.time, momentumY.time), 10); - - // Do we need to snap? - if (that.options.snap) { - distX = newPosX - that.absStartX; - distY = newPosY - that.absStartY; - if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); } - else { - snap = that._snap(newPosX, newPosY); - newPosX = snap.x; - newPosY = snap.y; - newDuration = m.max(snap.time, newDuration); - } - } - - that.scrollTo(m.round(newPosX), m.round(newPosY), newDuration); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - // Do we need to snap? - if (that.options.snap) { - distX = newPosX - that.absStartX; - distY = newPosY - that.absStartY; - if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200); - else { - snap = that._snap(that.x, that.y); - if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time); - } - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - that._resetPos(200); - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - }, - - _resetPos: function (time) { - var that = this, - resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x, - resetY = that.y >= that.minScrollY || that.maxScrollY > 0 ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; - - if (resetX == that.x && resetY == that.y) { - if (that.moved) { - that.moved = false; - if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); // Execute custom code on scroll end - } - - if (that.hScrollbar && that.options.hideScrollbar) { - if (vendor == 'webkit') that.hScrollbarWrapper.style[transitionDelay] = '300ms'; - that.hScrollbarWrapper.style.opacity = '0'; - } - if (that.vScrollbar && that.options.hideScrollbar) { - if (vendor == 'webkit') that.vScrollbarWrapper.style[transitionDelay] = '300ms'; - that.vScrollbarWrapper.style.opacity = '0'; - } - - return; - } - - that.scrollTo(resetX, resetY, time || 0); - }, - - _wheel: function (e) { - var that = this, - wheelDeltaX, wheelDeltaY, - deltaX, deltaY, - deltaScale; - - if ('wheelDeltaX' in e) { - wheelDeltaX = e.wheelDeltaX / 12; - wheelDeltaY = e.wheelDeltaY / 12; - } else if('wheelDelta' in e) { - wheelDeltaX = wheelDeltaY = e.wheelDelta / 12; - } else if ('detail' in e) { - wheelDeltaX = wheelDeltaY = -e.detail * 3; - } else { - return; - } - - if (that.options.wheelAction == 'zoom') { - deltaScale = that.scale * Math.pow(2, 1/3 * (wheelDeltaY ? wheelDeltaY / Math.abs(wheelDeltaY) : 0)); - if (deltaScale < that.options.zoomMin) deltaScale = that.options.zoomMin; - if (deltaScale > that.options.zoomMax) deltaScale = that.options.zoomMax; - - if (deltaScale != that.scale) { - if (!that.wheelZoomCount && that.options.onZoomStart) that.options.onZoomStart.call(that, e); - that.wheelZoomCount++; - - that.zoom(e.pageX, e.pageY, deltaScale, 400); - - setTimeout(function() { - that.wheelZoomCount--; - if (!that.wheelZoomCount && that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); - }, 400); - } - - return; - } - - deltaX = that.x + wheelDeltaX; - deltaY = that.y + wheelDeltaY; - - if (deltaX > 0) deltaX = 0; - else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX; - - if (deltaY > that.minScrollY) deltaY = that.minScrollY; - else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY; - - if (that.maxScrollY < 0) { - that.scrollTo(deltaX, deltaY, 0); - } - }, - - _transitionEnd: function (e) { - var that = this; - - if (e.target != that.scroller) return; - - that._unbind(TRNEND_EV); - - that._startAni(); - }, - - - /** - * - * Utilities - * - */ - _startAni: function () { - var that = this, - startX = that.x, startY = that.y, - startTime = Date.now(), - step, easeOut, - animate; - - if (that.animating) return; - - if (!that.steps.length) { - that._resetPos(400); - return; - } - - step = that.steps.shift(); - - if (step.x == startX && step.y == startY) step.time = 0; - - that.animating = true; - that.moved = true; - - if (that.options.useTransition) { - that._transitionTime(step.time); - that._pos(step.x, step.y); - that.animating = false; - if (step.time) that._bind(TRNEND_EV); - else that._resetPos(0); - return; - } - - animate = function () { - var now = Date.now(), - newX, newY; - - if (now >= startTime + step.time) { - that._pos(step.x, step.y); - that.animating = false; - if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that); // Execute custom code on animation end - that._startAni(); - return; - } - - now = (now - startTime) / step.time - 1; - easeOut = m.sqrt(1 - now * now); - newX = (step.x - startX) * easeOut + startX; - newY = (step.y - startY) * easeOut + startY; - that._pos(newX, newY); - if (that.animating) that.aniTime = nextFrame(animate); - }; - - animate(); - }, - - _transitionTime: function (time) { - time += 'ms'; - this.scroller.style[transitionDuration] = time; - if (this.hScrollbar) this.hScrollbarIndicator.style[transitionDuration] = time; - if (this.vScrollbar) this.vScrollbarIndicator.style[transitionDuration] = time; - }, - - _momentum: function (dist, time, maxDistUpper, maxDistLower, size) { - var deceleration = 0.0006, - speed = m.abs(dist) / time, - newDist = (speed * speed) / (2 * deceleration), - newTime = 0, outsideDist = 0; - - // Proportinally reduce speed if we are outside of the boundaries - if (dist > 0 && newDist > maxDistUpper) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistUpper = maxDistUpper + outsideDist; - speed = speed * maxDistUpper / newDist; - newDist = maxDistUpper; - } else if (dist < 0 && newDist > maxDistLower) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistLower = maxDistLower + outsideDist; - speed = speed * maxDistLower / newDist; - newDist = maxDistLower; - } - - newDist = newDist * (dist < 0 ? -1 : 1); - newTime = speed / deceleration; - - return { dist: newDist, time: m.round(newTime) }; - }, - - _offset: function (el) { - var left = -el.offsetLeft, - top = -el.offsetTop; - - while (el = el.offsetParent) { - left -= el.offsetLeft; - top -= el.offsetTop; - } - - if (el != this.wrapper) { - left *= this.scale; - top *= this.scale; - } - - return { left: left, top: top }; - }, - - _snap: function (x, y) { - var that = this, - i, l, - page, time, - sizeX, sizeY; - - // Check page X - page = that.pagesX.length - 1; - for (i=0, l=that.pagesX.length; i= that.pagesX[i]) { - page = i; - break; - } - } - if (page == that.currPageX && page > 0 && that.dirX < 0) page--; - x = that.pagesX[page]; - sizeX = m.abs(x - that.pagesX[that.currPageX]); - sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0; - that.currPageX = page; - - // Check page Y - page = that.pagesY.length-1; - for (i=0; i= that.pagesY[i]) { - page = i; - break; - } - } - if (page == that.currPageY && page > 0 && that.dirY < 0) page--; - y = that.pagesY[page]; - sizeY = m.abs(y - that.pagesY[that.currPageY]); - sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0; - that.currPageY = page; - - // Snap with constant speed (proportional duration) - time = m.round(m.max(sizeX, sizeY)) || 200; - - return { x: x, y: y, time: time }; - }, - - _bind: function (type, el, bubble) { - (el || this.scroller).addEventListener(type, this, !!bubble); - }, - - _unbind: function (type, el, bubble) { - (el || this.scroller).removeEventListener(type, this, !!bubble); - }, - - - /** - * - * Public methods - * - */ - destroy: function () { - var that = this; - - that.scroller.style[transform] = ''; - - // Remove the scrollbars - that.hScrollbar = false; - that.vScrollbar = false; - that._scrollbar('h'); - that._scrollbar('v'); - - // Remove the event listeners - that._unbind(RESIZE_EV, window); - that._unbind(START_EV); - that._unbind(MOVE_EV, window); - that._unbind(END_EV, window); - that._unbind(CANCEL_EV, window); - - if (!that.options.hasTouch) { - that._unbind('DOMMouseScroll'); - that._unbind('mousewheel'); - } - - if (that.options.useTransition) that._unbind(TRNEND_EV); - - if (that.options.checkDOMChanges) clearInterval(that.checkDOMTime); - - if (that.options.onDestroy) that.options.onDestroy.call(that); - }, - - refresh: function () { - var that = this, - offset, - i, l, - els, - pos = 0, - page = 0; - - if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin; - that.wrapperW = that.wrapper.clientWidth || 1; - that.wrapperH = that.wrapper.clientHeight || 1; - - that.minScrollY = -that.options.topOffset || 0; - that.scrollerW = m.round(that.scroller.offsetWidth * that.scale); - that.scrollerH = m.round((that.scroller.offsetHeight + that.minScrollY) * that.scale); - that.maxScrollX = that.wrapperW - that.scrollerW; - that.maxScrollY = that.wrapperH - that.scrollerH + that.minScrollY; - that.dirX = 0; - that.dirY = 0; - - if (that.options.onRefresh) that.options.onRefresh.call(that); - - that.hScroll = that.options.hScroll && that.maxScrollX < 0; - that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH); - - that.hScrollbar = that.hScroll && that.options.hScrollbar; - that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH; - - offset = that._offset(that.wrapper); - that.wrapperOffsetLeft = -offset.left; - that.wrapperOffsetTop = -offset.top; - - // Prepare snap - if (typeof that.options.snap == 'string') { - that.pagesX = []; - that.pagesY = []; - els = that.scroller.querySelectorAll(that.options.snap); - for (i=0, l=els.length; i= that.maxScrollX) { - that.pagesX[page] = pos; - pos = pos - that.wrapperW; - page++; - } - if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1]; - - pos = 0; - page = 0; - that.pagesY = []; - while (pos >= that.maxScrollY) { - that.pagesY[page] = pos; - pos = pos - that.wrapperH; - page++; - } - if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1]; - } - - // Prepare the scrollbars - that._scrollbar('h'); - that._scrollbar('v'); - - if (!that.zoomed) { - that.scroller.style[transitionDuration] = '0'; - that._resetPos(400); - } - }, - - scrollTo: function (x, y, time, relative) { - var that = this, - step = x, - i, l; - - that.stop(); - - if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }]; - - for (i=0, l=step.length; i 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left; - pos.top = pos.top > that.minScrollY ? that.minScrollY : pos.top < that.maxScrollY ? that.maxScrollY : pos.top; - time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time; - - that.scrollTo(pos.left, pos.top, time); - }, - - scrollToPage: function (pageX, pageY, time) { - var that = this, x, y; - - time = time === undefined ? 400 : time; - - if (that.options.onScrollStart) that.options.onScrollStart.call(that); - - if (that.options.snap) { - pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX; - pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY; - - pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX; - pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY; - - that.currPageX = pageX; - that.currPageY = pageY; - x = that.pagesX[pageX]; - y = that.pagesY[pageY]; - } else { - x = -that.wrapperW * pageX; - y = -that.wrapperH * pageY; - if (x < that.maxScrollX) x = that.maxScrollX; - if (y < that.maxScrollY) y = that.maxScrollY; - } - - that.scrollTo(x, y, time); - }, - - disable: function () { - this.stop(); - this._resetPos(0); - this.enabled = false; - - // If disabled after touchstart we make sure that there are no left over events - this._unbind(MOVE_EV, window); - this._unbind(END_EV, window); - this._unbind(CANCEL_EV, window); - }, - - enable: function () { - this.enabled = true; - }, - - stop: function () { - if (this.options.useTransition) this._unbind(TRNEND_EV); - else cancelFrame(this.aniTime); - this.steps = []; - this.moved = false; - this.animating = false; - }, - - zoom: function (x, y, scale, time) { - var that = this, - relScale = scale / that.scale; - - if (!that.options.useTransform) return; - - that.zoomed = true; - time = time === undefined ? 200 : time; - x = x - that.wrapperOffsetLeft - that.x; - y = y - that.wrapperOffsetTop - that.y; - that.x = x - x * relScale + that.x; - that.y = y - y * relScale + that.y; - - that.scale = scale; - that.refresh(); - - that.x = that.x > 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x; - that.y = that.y > that.minScrollY ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; - - that.scroller.style[transitionDuration] = time + 'ms'; - that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + scale + ')' + translateZ; - that.zoomed = false; - }, - - isReady: function () { - return !this.moved && !this.zoomed && !this.animating; - } -}; - -function prefixStyle (style) { - if ( vendor === '' ) return style; - - style = style.charAt(0).toUpperCase() + style.substr(1); - return vendor + style; -} - -dummyStyle = null; // for the sake of it - -if (typeof exports !== 'undefined') exports.iScroll = iScroll; -else window.iScroll = iScroll; - -})(window, document); diff --git a/webclient (old)/js/jquery-1.10.2.min.js b/webclient (old)/js/jquery-1.10.2.min.js deleted file mode 100644 index da41706..0000000 --- a/webclient (old)/js/jquery-1.10.2.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery-1.10.2.min.map -*/ -(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
    ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t -}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); -u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("